← Январь 2005 → | ||||||
1
|
2
|
|||||
---|---|---|---|---|---|---|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
20
|
21
|
22
|
23
|
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
31
|
За последние 60 дней ни разу не выходила
Сайт рассылки:
http://ln.com.ua/~openxs/projects/informix
Открыта:
09-04-2004
Адрес
автора: comp.soft.db.informix-owner@subscribe.ru
Статистика
0 за неделю
Открыто о СУБД Informix на русском : Резервное копирование на диск с помощью ontape
Информационный Канал Subscribe.Ru |
Выпуск 7
Уважаемые подписчики рассылки!
Поздравляю вас с наступившим Новым годом! Надеюсь, праздники у вас прошли удачно.
В 2005 году я собираюсь сделать выпуски рассылки более регулярными, скажем, выпускать очередную статью раз в две недели. Тематика уже была предварительно обозначена в самом первом выпуске. Но, поскольку многие из вас могли его и не читать, хочу повторить заданный в нем вопрос:
Что вы хотите узнать о СУБД Informix в 2005 году?
Впрочем, хочу задать и еще пару вопросов:
Как вы относитесь к проведению в городе Киеве регулярных (раз в две недели, например) бесплатных (или платных, но недорого) семинаров по администрированию и использованию СУБД Informix? Нужны ли вам такие семинары? Какой должна быть их тематика?
Пишите! Ответов жду до следующего выпуска рассылки, в котором и постараюсь сформировать детальную программу на этот год, в том числе, с учетом ваших пожеланий, если они будут высказаны.В этом выпуске я, как и обещал, опишу основные шаги по настройке резервного копирования на диск с помощью утилиты ontape. Как-то же обходились раньше без всех этих диспетчеров хранения данных и "автоматизации", которую обеспечивает onbar.
Изложение, как и раньше, ведется на примере версии IDS 9.30.TC2 для Windows NT/2000. Тем не менее, последовательность и суть выполняемых действий не зависит от операционной системы и версии. Надеюсь, администраторы Informix на базе UNIX большинство рассматриваемых в этой статье "проблем" давно и легко решили.
Резервное копирование на диск с помощью ontape
Теоретически, все просто. Есть утилита ontape, поддерживающая следующие опции:
C:\Informix>ontape -- недопустимый аргумент ontape использование: { -a | -c | -l | -p | -r [-D список_DB-пространств] | -s [-L уровень_архива] [-A список_баз_данных] [-B список_баз_данных] [-N список_баз_данных] [-U список_баз_данных] } -a Автоматическое резервное копирование логических журналов -c Непрерывное резервное копирование логических журналов -l Логическое восстановление -p Физическое восстановление для HDR -r Полное восстановление перечисленных DB-пространств/BLOB-пространств -s Архивирование системы в целом -A установить для следующих баз данных режим журнализации ANSI -B установить для следующих баз данных режим буферизованной журнализации -N отключить журнализацию для следующих баз данных -U установить для следующих баз данных режим небуферизованной журнализации Program over. (Я позволил себе перевести выдаваемую утилитой справочную информацию на русский - на английском вы ее и так получите.)
Параметры конфигурации для ontape
Работает утилита ontape с устройствами, которые задаются следующими параметрами конфигурации (цитата из файла ONCONFIG, с переведенными комментариями):
# Ленточное устройство для архивирования системы TAPEDEV \\.\TAPE0 # Полное имя файла устройства TAPEBLK 16 # Размер блока ленты (Кбайт) TAPESIZE 10240 # Максимальный объем данных на ленте (Кбайт) # Ленточное устройство для архивирования журналов LTAPEDEV NUL # Полное имя файла устройства для журналов LTAPEBLK 16 # Размер блока ленты для журналов (Кбайт) LTAPESIZE 10240 # Максимальный объем данных на ленте для журналов (Кбайт)
Представлены значения параметров по умолчанию - именно такими они и будут в рассматриваемой версии после установки сервера, пока вы их не измените (см. также файл %INFORMIXDIR%\etc\onconfig.std).
Так вот, архивирование сервера в целом (резервное копирование пространств) выполняется командой ontape -s и ведется на устройство TAPEDEV. При этом в один том архива записывается не более TAPESIZE килобайт. Потом надо "менять ленту". Запись идет блоками по TAPEBLK килобайт, что важно при работе с лентой (надо прочитать в документации, какого размера блоки предлагает использовать производитель - так, наиболее популярные сейчас ленты DDS-4 обычно предполагают размер блока 64 Кбайта). При работе с диском, что мы и предполагаем делать, этот параметр может, наверное, влиять на производительность, но соответствующих экспериментов я пока не делал и никогда стандартное значение не менял.
Про эффективное автоматическое многотомное архивирование на диск мы еще поговорим в отдельном выпуске рассылки, а пока же нам желательно задать параметр TAPESIZE таким, чтобы весь архив вмещался в один том. К счастью, на нашей версии и платформе, неприемлемых жестких ограничений на размер создаваемого утилитой ontape файла уже нет (Раньше было ограничение - не более 2 Гбайт. Теперь же все зависит от файловой системы, в которой будет создаваться том.). Можно задать любое значение, с запасом. Тем не менее, не мешает определить это значение поточнее. (Напомню, что в архив уровня 0 попадают все непустые страницы всех DB-пространств, кроме временных.) Можно, конечно, просто просуммировать размер всех чанков, кроме чанков временных DB-пространств, но можно получить более точную оценку сверху: просуммировать размеры всех выделенных экстентов. Это можно сделать следующим простым запросом (у нас размер страницы - 4 Кбайта):
select sum(size)*4 from sysmaster:sysextents
У меня он дал значение 20556 (Кбайт, соответственно). Что делать с этим уточненным максимальным размером архива уровня 0 - решать вам. Можно, например, умножить его на 2, и еще раз на 2 (так делают некоторые любители перестраховаться) и, если полученное значение не превышает объем свободного пространства в файловой системе, где будет создаваться файл, его и установить в качестве значения параметра TAPESIZE. Мне, полагаю, хватит и 100000 (примерно 100 Мбайт), что заметно меньше суммарного объема чанков:
C:\Informix>onstat -d Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 04:13:22 -- 25472 Kbytes Dbspaces address number flags fchunk nchunks flags owner name c9e27d0 1 0x1 1 1 N informix rootdbs ca37c30 2 0x8001 2 1 N S informix sbspace ca37d78 3 0x1 3 1 N informix workdbs ca37ec0 4 0x11 4 1 N B informix blobdbs 4 active, 2047 maximum Note: For BLOB chunks, the number of free pages shown is out of date. Run 'onstat -d update' for current stats. Chunks address chk/dbs offset size free bpages flags pathname c9e2918 1 1 0 12800 4546 PO- C:\IFMXDATA\ol_creato r\rootdbs_dat.000 ca377f8 2 2 0 12500 11005 11605 POS c:\IFMXDATA\ol_creato r\sbspace_dat.000 Metadata 842 544 842 ca37960 3 3 0 25000 24947 PO- c:\IFMXDATA\ol_creato r\workdbs_dat.000 ca37ac8 4 4 0 2500 ~2500 2500 POB c:\IFMXDATA\ol_creato r\blobdbs_dat.000 4 active, 2047 maximum
Архивирование (резервное копирование) логических журналов, в свою очередь, выполняется командой ontape -а (в этом случае его называют автоматическим, поскольку автоматически копируются все использованные, но еще не скопированные журналы, и выдается запрос на копирование текущего журнала) или командой ontape -c (такое резервное копирование журналов называют непрерывным, поскольку процесс ontape -c будет работать непрерывно, копируя журналы по мере заполнения, пока вы его не прервете или, после нормальной остановки сервера Informix, он не закончит копирование последнего журнала). Ведется резервное копирование журналов на устройство LTAPEDEV. При этом в один том копии журналов записывается не более LTAPESIZE килобайт. Потом тоже надо "менять ленту". Запись идет блоками по LTAPEBLK килобайт.
Непрерывное резервное копирование журналов прекрасно подходит при работе с лентой, пока ее размер не превышает объема генерируемой в логические журналы информации, скажем, за рабочий день. Но при выполнении резервного копирования журналов на диск, что, напомню, нас в рамках этого выпуска интересует, обычно хотелось бы получить копию каждого логического журнала в отдельном файле. Поэтому мы будем выполнять автоматическое резервное копирование журналов, вызывая команду ontape -a явно после завершения записи в очередной журнал. Как этого добиться, не занимаясь непрерывным мониторингом работы сервера, будет описано чуть ниже.
С точным определением размером тома для копии журналов (LTAPEDEV) при такой постановке задачи возникает один нюанс. (Кстати, если вы зададите слишком маленькое значение, ничего страшного не произойдет. Будет создаваться многотомная копия, и вас попросят "вставить ленточку". Но зачем нам лишние заботы?) Он связан с использованием в таблицах столбцов типа TEXT и BYTE, размещенных в BLOB-пространствах (у меня одно такое пространство есть, blobdbs, как видно по представленным выше результатам выполнения команды onstat -d). Напомню, что если такие столбцы меняются, сами изменения не записываются в логические журналы. Записывается только информация об изменениях на страницах битовых карт пространства. Но, как уже упоминалось в предыдущем выпуске, при резервном копировании журнала сервер анализирует все большие объекты в BLOB-пространствах, и те из них, изменения в которых произошли по ходу транзакций, зарегистрированных в этом журнале, помещает в копию журналов перед содержимым самого журнала. Итак, в этом размер копии одного журнала может намного превосходить размер самого журнала!
Поэтому в качестве LTAPESIZE я рекомендую, по возможности, устанавливать значение, равное сумме размера самого большого журнала и размеров всех чанков BLOB-пространств. Иначе копия одного журнала может потребовать нескольких томов. В моем случае, с учетом максимального размера журнала (500 страниц или 2000 Кбайт) и размера единственного чанка blobdbs (2500 страниц или 10000 Кбайт):
C:\Informix>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 04:38:48 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-2 0 8 9 2 4.50 phybegin physize phypos phyused %used 100107 500 377 0 0.00 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 8 156 6 4 26.0 1.5 Subsystem numrecs Log Space used OLDRSAM 156 11452 address number flags uniqid begin size used %used ca376a8 1 U---C-L 31 1002fb 500 99 19.80 ca376e0 2 U-B---- 26 1004ef 500 12 2.40 ca37718 3 U-B---- 27 1006e3 500 154 30.80 ca37750 4 U-B---- 28 1008d7 500 4 0.80 ca37788 5 U-B---- 29 100acb 500 42 8.40 ca377c0 6 U-B---- 30 100cbf 500 7 1.40 6 active, 6 total
получается, что параметр LTAPESIZE должен иметь значение не менее 12000.
Автоматизация резервного копирования журналов
Я не буду много писать о необходимости, помимо регулярного архивирования, регулярно, по мере заполнения копировать логические журналы. Скажу лишь, что только резервное копирование журналов (при условии немедленного переноса копий журналов с диска на другую машину или на другой носитель) позволит вам во всех случаях восстановить изменения данных, выполненные и зафиксированные после создания последнего архива, с потерей, в самом худшем случае, небольшой части последних изменений (записанных в не скопированном текущем журнале).
Интереснее другое - как обеспечить это самое "регулярное, по мере заполнения" копирование логических журналов и совместить его с требованием размещать копию каждого журнала в отдельном файле на диске?
Для этого нам придется использовать механизм автоматического вызова заданной администратором программы при наступлении одного из предопределенных событий по ходу работы сервера Informix. Этому механизму, прекрасно описанному в документации, можно будет посвятить отдельный выпуск рассылки, а здесь нам достаточно будет знать, что соответствующий выполняемый (например, .bat на нашей платформе Windows) файл надо просто указать в качестве значения параметра конфигурации ALARMPROGRAM. Эта программа, ALARMPROGRAM, будет затем вызываться сервером автоматически, с передачей пяти параметров, описывающих особенности произошедшего события.
Нас будет интересовать второй параметр, числовой, класс события, и третий, строчный, сообщение класса. После завершения записи информации транзакций в логический журнал происходит событие класса 23, и вызывается указанная программа ALARMPROGRAM, которой в качестве третьего параметра командной строки передается текст вида:
Logical Log 8 Complete.
Третьим его словом является число - uniqid логического журнала, с которым сервер только что завершил работу.
В качестве ALARMPROGRAM я использую сценарий командного интерпретатора, который на платформе Windows оформляется в виде командного (.bat) файла, созданного на основе "стандартной" программы обработки событий %INFORMIXDIR%\etc\log_full.bat. Обычно на платформе Windows я называю его alarm.bat и размещаю вместе с другими служебными .bat-файлами в подкаталоге BAT пакета DBA_Tools. (DBA_Tools - инструментарий системного администратора и АБД для Informix на платформе Windows, созданный широко известным специалистом по Informix Василием Шульженко. Он очень популярен среди начинающих и опытных администраторов Informix на платформе Windows, которым нравится программа Far...)
Итак, файл этот может иметь следующий вид:
@echo off set DBA=c:\DBA_Tools set WINROOT=%SystemRoot% if "x%WINROOT%" == "x" set WINROOT=C:\WINNT set BACKUP_DIR=c:\tmp set BACKUP_LOG_FILE=log set EXIT_STATUS=0 set ALARM_LOG=c:\tmp\alarm.log set EVENT_SEVERITY=%1% set EVENT_CLASS=%2% set EVENT_MSG=%3% set EVENT_ADD_TEXT="%4%" set EVENT_FILE="%5%" date /t >> %ALARM_LOG% time /t >> %ALARM_LOG% echo %EVENT_SEVERITY% >> %ALARM_LOG% echo %EVENT_CLASS% >> %ALARM_LOG% echo %EVENT_MSG% >> %ALARM_LOG% echo %EVENT_ADD_TEXT% >> %ALARM_LOG% if %EVENT_CLASS% == 23 goto CONT_LOG set EXIT_STATUS=1 goto DONE :CONT_LOG for /F "usebackq tokens=3 DELIMS== " %%i in (`echo %EVENT_MSG%`) DO @set LOG=%%i echo "%LOG%" >> %ALARM_LOG% ontape -a < %DBA%\bat\Enter_no 2>&1 >> %ALARM_LOG% REM # 0 означает, что ontape сработала успешно if ERRORLEVEL 1 goto ERROR if ERRORLEVEL 0 goto SUCCESS goto DONE :ERROR set EXIT_STATUS=1 goto DONE :SUCCESS set EXIT_STATUS=0 copy %BACKUP_DIR%\%BACKUP_LOG_FILE% %BACKUP_DIR%\%BACKUP_LOG_FILE%.%LOG% copy nul %BACKUP_DIR%\%BACKUP_LOG_FILE% :DONE exit %EXIT_STATUS%
На вид он достаточно большой, но устроен предельно просто. После проверки и установки ряда переменных среды, мы выдаем в собственный журнал уведомлений (местонахождение которого задается переменной среды ALARM_LOG) дату и время возникновения события и все параметры, переданные нашему .bat-файлу в командной строке сервером Informix. Эта информация пригодится в дальнейшем, если вы захотите расширить возможности alarm.bat и обрабатывать события других классов, не связанные с заполнением логических журналов.
Далее, если произошло событие класса 23, мы в "хитрой" строке, начинающейся командой for, выбираем третье слово из третьего аргумента командной строки alarm.bat и помещаем его в переменную среды LOG. Я не большой специалист по командам DOS и Windows, да и рассылка наша не им посвящена, поэтому заинтересовавшихся, почему и как эта команда делает именно то, что я написал, я отошлю к документации. Выполните в любом окне командной строки Windows:
help for
и прочитайте, какими широкими возможностями, при столь странном синтаксисе, обладает эта команда. Эта (большая по объему) информация вам пригодится в будущем!
Итак, получив и запомнив uniqid последнего заполненного логического журнала, мы выполняем команду ontape -a в "автоматическом" режиме, направляя заранее подготовленные в файле Enter_no "ответы" на задаваемые ею вопросы. Что это за вопросы? Если выполнить команду ontape -a непосредственно, задав параметру конфигурации LTAPEDEV значение, отличающееся от NUL, мы увидим примерно следующее:
C:\Informix>ontape -a Performing automatic backup of logical logs. Please mount tape 1 on c:\tmp\log and press Return to continue ... Do you want to back up the current logical log? (y/n) n Please label this tape as number 1 in the log tape sequence. This tape contains the following logical logs: 31 (partial) Program over.
Итак, сначала нам предлагают "вставить ленту" и нажать клавишу Enter. После того, как мы это сделаем, задается вопрос о необходимости копирования текущего логического журнала. В нашем случае этого делать не нужно (нам нужна копия предыдущего, заполненного журнала), поэтому мы вводим n и нажимаем клавишу Enter.
Именно эти нажатия клавиш и надо выполнить в пустом изначально файле, который мы назвали Enter_no. В нем (на платформе Windows) должно оказаться 5 байтов, которые в шестнадцатеричном виде имеют следующие значения:
00000000: 0D 0A 6E 0D 0A
Продолжим рассмотрение сценария alarm.bat. Если команда ontape -a выполнена успешно (тогда переменная среды ERRORLEVEL сразу после ее выполнения будет иметь значение 0), нам осталось скопировать или перенести "ленту", файл %BACKUP_DIR%\%BACKUP_LOG_FILE%, куда-нибудь и "вставить новую ленту", т.е. создать пустой файл %BACKUP_DIR%\%BACKUP_LOG_FILE%. Именно это и делают две последние команды copy. Обратите внимание, что мы в этом сценарии копируем "ленту" с журналом в файл в том же каталоге, с тем же именем, но с расширением .%LOG%, которое соответствует числовому значению uniqid для логического журнала, заполнение которого и вызвало срабатывание файла alarm.bat.
- Примечание
- Разумеется, вы можете (и, пожалуй, должны) копировать этот файл в другой каталог, на другой диск, на другую машину по сети, или сразу же дописывать на CDROM или на ленту. Я представляю здесь лишь основные особенности возможного решения проблемы автоматического резервного копирования журналов на диск с помощью ontape. Детали вам надо будет продумать самостоятельно.
Обратите внимание, что данный сценарий alarm.bat предполагает выполнять резервное копирование журналов в файл log, находящийся в каталоге c:\tmp. Эти значения вам может потребоваться изменить, и их придется указать в дальнейшем, при установке параметров конфигурации Informix.
Итак, теорию мы повторили, все необходимые подготовительные действия выполнили. Теперь, собственно, пошаговая процедура организации резервного копирования, с учетом принятых ранее решений.
1. Создание файлов для TAPEDEV и LTAPEDEV
В окне командной строки переходим в каталог, в который мы решили поместить файлы-устройства для резервного копирования, и создаем пустые файлы:
C:\Informix>cd c:\tmp C:\tmp>copy nul archive C:\tmp>copy nul log
Можете создать их и другим способом, но куда уж проще...
2. Изменение параметров конфигурации
Далее, поскольку нам придется изменить значения нескольких параметров, останавливаем сервер Informix:
C:\tmp^gt;onmode -ky
Затем, с помощью любого текстового редактора устанавливаем соответствующие, определенные ранее значения следующих параметров конфигурации:
ALARMPROGRAM c:\DBA_Tools\bat\alarm.bat # Было C:\Informix\etc\log_full.bat TAPEDEV c:\tmp\archive # Было \\.\TAPE0. Можно располагать и не в C:\tmp TAPESIZE 100000 # Было 10240 LTAPEDEV c:\tmp\log # Было NUL. Такое значение предполагает наш alarm.bat LTAPESIZE 10000 # Было 10240. Можно было и оставить...
и снова запускаем сервер:
C:\tmp>starts ol_creator C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:00:28 -- 25472 Kbytes
3. Проверка полученного решения
Все готово для проверки настроенной "системы" резервного копирования. Чтобы в будущем можно было проверять различные варианты восстановления, мы пересоздадим демонстрационную базу demo_db:
dbaccessdemo -log demo_db -dbspace workdbs
и зафиксируем текущее состояние (момент времени t0):
C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 02:10:52 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 3 8 259 33 7.85 phybegin physize phypos phyused %used 100107 500 133 259 51.80 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-3 0 8 19916 804 356 24.8 2.3 Subsystem numrecs Log Space used OLDRSAM 19916 2186496 address number flags uniqid begin size used %used ca376a8 1 U-B---L 31 1002fb 500 500 100.00 ca376e0 2 U---C-- 32 1004ef 500 404 80.80 ca37718 3 U-B---- 27 1006e3 500 154 30.80 ca37750 4 U-B---- 28 1008d7 500 4 0.80 ca37788 5 U-B---- 29 100acb 500 42 8.40 ca377c0 6 U-B---- 30 100cbf 500 7 1.40 6 active, 6 totalЗатем, проделаем следующую, до боли знакомую слушателям моих курсов по системному администрированию Informix, последовательность действий по резервному копированию:
Момент времени | uniqid журнала | Действие администратора | Действие в отдельном окне DbAccess и комментарии |
t0 | 32 | Создаем архив уровня 0 и переходим на следующий журнал | По ходу архивирования, в отдельном окне добавляем "штат Украина" (insert into state values('UA', 'Ukraine')). Это у нас сейчас актуально... |
t1 | 33 | Создаем архив уровня 1> и переходим на следующий журнал | Проверяем... (select * from state where code = 'UA') |
t2 | 34 | Переходим на следующий журнал | Удаляем Штаты совсем... (drop table state) |
t3 | 35 | onmode -ky и... | Вызываем сбой дискового компонента сервера. |
Каждое из выполненных действий детально описано ниже.
Создание архива уровня 0
Итак, в момент времени t0 мы создаем архив нулевого уровня:
C:\tmp>ontape -s -L 0 Please mount tape 1 on c:\tmp\archive and press Return to continue ... 100 percent done. Please label this tape as number 1 in the arc tape sequence. This tape contains the following logical logs: 32 Program over.
В ответ на выделенную наклонным просьбу "вставить ленту" нажимаем клавишу Enter. Пока создается архив нулевого уровня, в отдельном окне изменяем стандартное состояние базы demo_db (по которому мы и будем "распознавать" в дальнейшем момент времени t0), добавляя, например, новую запись. В следующий момент времени, t1, база будет уже измененной.
Легко убедиться, что у нас появился файл архива уровня 0, заметного размера:
C:\tmp>dir archive Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 13:51 17 842 176 archive 1 файлов 17 842 176 байт 0 папок 2 348 716 032 байт свободно
Надо скопировать полученный архив и "вставить новую ленту", выполнив команды:
C:\tmp>copy archive archive.0 C:\tmp>copy nul archive
Теперь перейдем на следующий журнал, зафиксировав момент времени t1:
C:\tmp>onmode -l C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 02:49:18 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 0 8 270 37 7.30 phybegin physize phypos phyused %used 100107 500 147 0 0.00 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 8 19992 810 362 24.7 2.2 Subsystem numrecs Log Space used OLDRSAM 19992 2193108 address number flags uniqid begin size used %used ca376a8 1 U-B---- 31 1002fb 500 500 100.00 ca376e0 2 U-B---L 32 1004ef 500 411 82.20 ca37718 3 U---C-- 33 1006e3 500 1 0.20 ca37750 4 U-B---- 28 1008d7 500 4 0.80 ca37788 5 U-B---- 29 100acb 500 42 8.40 ca377c0 6 U-B---- 30 100cbf 500 7 1.40 6 active, 6 total
Создание инкрементного архива
Убеждаемся, что сделанное по ходу архивирования уровня 0 изменение есть (!), и, как и запланировано, создаем инкрементный архив. Он должен быть заметно меньше по размеру - мы ведь только вставили одну строку в таблицу state, записали успешное завершение архивирования уровня 0 и перешли на следующий журнал. Снова вызываем ontape:
C:\tmp<ontape -s -L 1 Please mount tape 1 on c:\tmp\archive and press Return to continue ... 100 percent done. Please label this tape as number 1 in the arc tape sequence. This tape contains the following logical logs: 33 Program over.
Проверим свое предположение в отношении размера архива, скопируем его и "вставим пустую ленту", как и раньше:
C:\tmp>dir archive Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 14:13 262 144 archive 1 файлов 262 144 байт 0 папок 2 337 656 832 байт свободно C:\tmp>copy archive archive.1 Скопировано файлов: 1. C:\tmp>copy nul archive Заменить archive [Yes (да)/No (нет)/All (все)]: y Скопировано файлов: 1.
и перейдем на следующий журнал, соответствующий моменту времени t2:
C:\tmp>onmode -l C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 03:05:54 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 3 8 277 38 7.29 phybegin physize phypos phyused %used 100107 500 151 3 0.60 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-3 0 8 20042 814 366 24.6 2.2 Subsystem numrecs Log Space used OLDRSAM 20042 2195724 address number flags uniqid begin size used %used ca376a8 1 U-B---- 31 1002fb 500 500 100.00 ca376e0 2 U-B---- 32 1004ef 500 411 82.20 ca37718 3 U-B---L 33 1006e3 500 4 0.80 ca37750 4 U---C-- 34 1008d7 500 1 0.20 ca37788 5 U-B---- 29 100acb 500 42 8.40 ca377c0 6 U-B---- 30 100cbf 500 7 1.40 6 active, 6 total
Дальнейшие изменения, защищенные только копиями журналов
Находясь в журнале 34, удаляем таблицу state (отсутствие Штатов станет характерным признаком момента времени t2) и переходим на следующий журнал, как и ранее. Выполненное изменение защищается только путем копирования журнала нашим сценарием alarm.bat, который автоматически вызывает сервер.
C:\tmp>onmode -l C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 03:09:02 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-2 3 8 304 42 7.24 phybegin physize phypos phyused %used 100107 500 178 27 5.40 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 8 20080 819 371 24.5 2.2 Subsystem numrecs Log Space used OLDRSAM 20080 2198528 address number flags uniqid begin size used %used ca376a8 1 U-B---- 31 1002fb 500 500 100.00 ca376e0 2 U-B---- 32 1004ef 500 411 82.20 ca37718 3 U-B---- 33 1006e3 500 4 0.80 ca37750 4 U-B---L 34 1008d7 500 5 1.00 ca37788 5 U---C-- 35 100acb 500 1 0.20 ca377c0 6 U-B---- 30 100cbf 500 7 1.40 6 active, 6 total
Теперь, находясь в журнале 35, в момент времени t3 мы сымитируем сбой дискового компонента сервера. Для этого остановим сервер и почистим пару критически важных чанков (Как обычно говорят в телепрограммах типа "Кунсткамеры": "НЕ ПЫТАЙТЕСЬ ПОВТОРИТЬ ЭТО САМИ". Я имею в виду, на рабочем сервере и если не умеете восстанавливать его из резервной копии!):
C:\tmp>onmode -ky C:\tmp>copy nul c:\IFMXDATA\ol_creator\rootdbs_dat.000 Заменить c:\IFMXDATA\ol_creator\rootdbs_dat.000 [Yes (да)/No (нет)/All (все)]: y Скопировано файлов: 1. C:\tmp>copy nul c:\IFMXDATA\ol_creator\workdbs_dat.000 Заменить c:\IFMXDATA\ol_creator\workdbs_dat.000 [Yes (да)/No (нет)/All (все)]: y Скопировано файлов: 1. C:\tmp>dir c:\IFMXDATA\ol_creator Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки c:\IFMXDATA\ol_creator 27.09.2004 15:29. 27.09.2004 15:29 .. 19.01.2005 14:28 10 240 000 blobdbs_dat.000 19.01.2005 14:29 0 rootdbs_dat.000 27.09.2004 18:14 51 200 000 sbspace_dat.000 19.01.2005 14:29 0 workdbs_dat.000 4 файлов 61 440 000 байт 2 папок 2 484 908 032 байт свободно
Понятно, что в таком виде сервер не запустится. Давайте попробуем, и оставим его в таком состоянии до следующего выпуска рассылки:
C:\tmp>starts ol_creator C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Initialization -- Up 00:00:09 -- 17280 Kbytes C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Initialization -- Up 00:00:23 -- 17280 Kbytes C:\tmp>onstat -m shared memory not initialized for INFORMIXSERVER 'ol_creator' Message Log File: C:\PROGRA~1\Informix\ol_creator.log 14:34:50 KAIO: error in kaio_READ, kaiocbp = 0xca4b77c, errno = 0 14:35:05 fildes = 252 (gfd 3), buf = 0x0CC2B400, nbytes = 4096, offset = 8192 14:35:05 Assert Failed: chunk failed sanity check 14:35:05 Informix Dynamic Server Version 9.30.TC2 14:35:05 Who: Session(1, informix@creator, 0, 0) Thread(6, main_loop(), 0, 1) File: rspartn.c Line: 7456 14:35:05 Results: Chunk 1 is being taken OFFLINE. 14:35:05 Action: Restore chunk from archive. 14:35:05 stack trace for pid 3460 written to C:\tmp\af.3ee53f9 14:35:06 See Also: C:\tmp\af.3ee53f9 14:35:08 Releasing server from system block 14:35:20 chunk failed sanity check 14:35:20 chunk failed sanity check 14:35:21 I/O error, Primary Chunk 'C:\IFMXDATA\ol_creator\rootdbs_dat.000' -- O ffline (sanity) 14:35:21 Informix Dynamic Server Stopped. C:\tmp>onstat - shared memory not initialized for INFORMIXSERVER 'ol_creator'
Сервер помучился секунд 30, но так и не смог запуститься. Оно и не удивительно - без первого чанка rootdbs серверы Informix работать не могут в любом случае... Что делать? Я выделил соответствующую запись, которую сервер поместил в журнал сообщений: восстанавливаться из архива! Как? Возможные варианты восстановления мы рассмотрим в следующем выпуске.
Отражение процесса архивирования в журнале сообщений
А откуда вообще взялась у меня уверенность, что этот сервер удастся запустить после всего, что он пережил. Минимальную уверенность дает мне то, что в журнале сообщений сервера я увидел информацию об успешном создании архивов и копий журналов:
13:50:54 Maximum server connections 1 13:50:56 Level 0 Archive started on rootdbs, blobdbs, sbspace, workdbs 13:51:06 Archive on rootdbs, blobdbs, sbspace, workdbs Completed. 13:55:57 Fuzzy Checkpoint Completed: duration was 0 seconds, 1 buffers not flushed. 13:55:57 Checkpoint loguniq 32, logpos 0x198234 13:55:57 Maximum server connections 1 14:00:58 Fuzzy Checkpoint Completed: duration was 0 seconds, 1 buffers not flushed. 14:00:58 Checkpoint loguniq 32, logpos 0x199044 14:00:58 Maximum server connections 1 14:01:28 Logical Log 32 Complete. 14:01:28 Logical Log 32 - Backup Started 14:01:28 Logical Log 32 - Backup Completed 14:05:58 Fuzzy Checkpoint Completed: duration was 0 seconds, 1 buffers not flushed. 14:05:58 Checkpoint loguniq 33, logpos 0x1044 14:05:58 Maximum server connections 1 14:13:11 Checkpoint Completed: duration was 0 seconds. 14:13:11 Checkpoint loguniq 33, logpos 0x2850 14:13:11 Maximum server connections 1 14:13:12 Level 1 Archive started on rootdbs, blobdbs, sbspace, workdbs 14:13:16 Archive on rootdbs, blobdbs, sbspace, workdbs Completed. 14:18:04 Logical Log 33 Complete. 14:18:04 Logical Log 33 - Backup Started 14:18:04 Logical Log 33 - Backup Completed 14:18:30 Checkpoint Completed: duration was 0 seconds. 14:18:30 Checkpoint loguniq 34, logpos 0x1018 14:18:30 Maximum server connections 1 14:21:12 Logical Log 34 Complete. 14:21:13 Logical Log 34 - Backup Started 14:21:13 Logical Log 34 - Backup Completed 14:23:30 Fuzzy Checkpoint Completed: duration was 0 seconds, 7 buffers not flushed. 14:23:30 Checkpoint loguniq 35, logpos 0x1074 14:23:30 Maximum server connections 1 14:28:31 Fuzzy Checkpoint Completed: duration was 0 seconds, 7 buffers not flushed. 14:28:31 Checkpoint loguniq 35, logpos 0x2074 14:28:31 Maximum server connections 1 14:28:51 Checkpoint Completed: duration was 0 seconds. 14:28:51 Checkpoint loguniq 35, logpos 0x3018 14:28:51 Maximum server connections 1 14:28:52 Informix Dynamic Server Stopped.
Я, конечно, не проверял весь дисковый компонент сервера перед архивированием с помощью oncheck, как положено в производственной среде, но выделенные сообщения позволяют мне надеяться, что все данные моего сервера Informix восстановить будет можно.
Итоги
Мы рассмотрели, как подготовить и организовать архивирование данных и резервное копирование логических журналов на диск с помощью утилиты ontape. При этом мы обеспечили автоматическое копирование каждого журнала в отдельный файл по мере их заполнения. Архивирование и управление полученными файлами архивов мы вели вручную.
В результате проведенной простой подготовки и выполненных действий по резервному копированию, мы получили следующее содержимое в каталоге, где размещаются наши резервные копии:
C:\tmp>dir archive.* log.* Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 14:15 0 archive 19.01.2005 13:51 17 842 176 archive.0 19.01.2005 14:13 262 144 archive.1 Содержимое папки C:\tmp 19.01.2005 14:21 0 log 19.01.2005 14:01 1 736 704 log.32 19.01.2005 14:18 65 536 log.33 19.01.2005 14:21 65 536 log.34
Другими словами, в отдельных файлах у нас есть архивы уровня 0 (archive.0) и соответствующий инкрементный, уровня 1 (arhcive.1), а также копии журналов с идентификаторами 32, 33 и 34 (log.32, log.33, log.34). Это позволит нам восстановить данные на любой из описанных выше моментов времени, t0, t1 и t2, причем, несколькими способами.
Документация:
1.Informix Storage Manager Administrator's Guide, Version 2.2 (G251-0498-00).
2.Informix Backup and Restore Guide, Version 8.31/9.3 (G251-0481-00).
Архив рассылки
Все вышедшие выпуски рассылки можно найти на сайте рассылки. Там же реализована возможность поиска материалов по ключевым словам (с помощью Google)
Другие мои проекты
Обращаю ваше внимание, что, помимо рассылки по СУБД Informix, я веду еще несколько проектов. В частности, появились новости в проекте "Страницы справочного руководства ОС UNIX на русском" (начата публикация моего перевода man ksh(1)) и в проекте "Открыто о СУБД Oracle на русском" (там вообще много новостей). Посмотрите, кому интересно.
В следующем выпуске
Рассмотрим, какие варианты восстановления возможны при наличии созданного выше набора резервных копий ontape, как это восстановление провести, и какие проблемы могут возникать по ходу восстановления. Я также с удовольствием отвечу на все вопросы по резервному копированию с помощью ontape, которые вы успеете задать мне до следующего выпуска.
С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.db.informix |
Отписаться |
В избранное | ||