← Февраль 2005 → | ||||||
2
|
3
|
4
|
5
|
6
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
За последние 60 дней ни разу не выходила
Сайт рассылки:
http://ln.com.ua/~openxs/projects/informix
Открыта:
09-04-2004
Адрес
автора: comp.soft.db.informix-owner@subscribe.ru
Статистика
0 за неделю
Открыто о СУБД Informix на русском : Восстановление сервера с помощью ontape
Информационный Канал Subscribe.Ru |
Выпуск 8
Уважаемые подписчики рассылки!
На свой вопрос "Что вы хотите узнать о СУБД Informix в 2005 году?" я не получил
ровно ни одного ответа. Поэтому я буду вести рассылку в тех направлениях, которые
будут интересны мне. Соответственно, в этом году я предполагаю рассмотреть следующие
вопросы:
- Восстановление IDS в случае разнообразных сбоев
- Автоматизация многотомного архивирования при использовании ontape
- Репликация данных
- Использование Informix HPL для эффективной загрузки больших объемов данных
- Получение и интерпретация планов выполнения запросов в базах данных Informix
- Новые возможности и особенности IDS 9.40 (и 9.50, как появится)
- Использование фрагментации в IDS
- Администрирование и использование подсистемы PDQ
- Как Informix хранит данные на диске (внутренняя архитектура)
Этот выпуск я начну с уточнений, которые были сделаны старшими и более опытными товарищами после прочтения предыдущего выпуска рассылки, а также постановки проблем, имеющихся в представленном решении и требующих дополнительного исследования. Затем я, как и обещал, опишу различные простые варианты восстановления, которые доступны администратору при наличии резервных копий, создание которых описано в предыдущем выпуске рассылки.
Изложение, как и раньше, ведется на примере версии IDS 9.30.TC2 для Windows NT/2000. Тем не менее, последовательность и суть выполняемых действий не зависит от операционной системы и версии.
Уточнения по процедуре резервного копирования и нерешенные проблемы
В прошлом выпуске я упустил ряд нюансов и проблем, не существенных для рассматриваемой простой, "домашней" системы Informix версии 9.30. Тем не менее, о некоторых из них вам следует знать.
1. Определение значений параметров TAPESIZE и LTAPESIZE
Как справедливо было замечено, начиная с версии 9.40 в качестве значения параметров TAPESIZE и LTAPESIZE можно указывать 0, и утилита ontape будет писать в указанные файлы до тех пор, пока не запишет все, что считает нужным, или пока не закончится свободное пространство в файловой системе. В прежних версиях можно указать эти значения просто с большим запасом.
Тем не менее, даже если места на диске достаточно, определение размера архива я считаю занятие не праздным. Носители, на которых в конечном итоге окажется архив, например, CD, имеют ограниченный объем, и не мешает знать, сколько их понадобится. Кроме того, от размера архива определенно зависит продолжительность архивирования, а в некоторых ситуациях не мешает заранее определить ее поточнее.
Был предложен входящий в пакет DBA_Tools запрос size_all.sql для более точного определения количества непустых страниц в системе:
------------------------------------------------- -- Gives the total size allocated -- and the total size ACTUALLY used. -- All db's (whole instance) -- -- Using in \DBA_Tools\bat\ontape_auto.bat -- -- V.Shulzhenko DBA_Tools (by John Carlson, CDI) ------------------------------------------------- set isolation to dirty read; select round(sum(nptotal*v.sh_pagesize/1024)) total_KB ,round(sum(npused*v.sh_pagesize/1024)) used_KB from sysptnhdr h, sysptprof p, sysdatabases d, sysshmvals v where h.partnum = p.partnum and p.dbsname = d.name;
Чуть позже, восстановив сервер, мы проверим его в действии. Обратите внимание, как в запросе получается размер страницы Informix.
2. Утилита ontape отказывается переписывать копии логических журналов
Обратите внимание, что если в файле, указанном в качестве LTAPEDEV, уже находится копия журнала, команда ontape -a откажется его переписывать. Именно поэтому мы в файле alarm.bat (с таким же успехом его можно было назвать и alarm.cmd) и занимались копированием файлов под девизом "вставляем пустую ленту".
3. Альтернативы alarm.bat и проблемы в представленном файле
Предложенный простой сценарий alarm.bat далек от совершенства. Вместо него можно использовать входящий в состав DBA_Tools файл event_alarm.bat или, если вы работаете с версией 9.40, стандартный %INFORMIXDIR%\etc\alarmprogram.bat, просто добавив соответствующую обработку события класса 23.
Серьезных проблем в предложенном сценарии alarm.bat, мне кажется, три. Во-первых, если уж копировать файл LTAPEDEV, то в другой каталог, желательно - на другом диске или вообще на другой системе. Вместо создания локальной копии, имеет смысл команду
copy %BACKUP_DIR%\%BACKUP_LOG_FILE% %BACKUP_DIR%\%BACKUP_LOG_FILE%.%LOG%
заменить командой
rename %BACKUP_DIR%\%BACKUP_LOG_FILE% %BACKUP_DIR%\%BACKUP_LOG_FILE%.%LOG%
С именем создаваемой копии журнала тоже не все так просто. Как мы увидим в этом выпуске, при восстановлении происходит так называемая "реинкарнация" сервера, он начинает "проживать новую жизнь". Идентификаторы логических журналов в этой "новой" жизни будут совпадать с идентификаторами некоторых журналов из "прежней" жизни, но содержимое будет отличаться! Если оставить alarm.bat без изменений, эти новые копии будут переписаны поверх копий из "прежней" жизни, что не всегда допустимо.
Решить эту проблему несложно. Надо в имя копии добавить временную отметку, например, получив дату и время в переменные среды, как это сделано в файле ontape_auto.bat все в том же пакете DBA_Tools:
rem -- Установить текущую дату (для названия файла) -- Set _PARSEARG="eol=; tokens=1,2,3,4* delims=/,. " For /F %_PARSEARG% %%i in ('date /t') Do SET _YYYYMMDD=%%l_%%k_%%j rem -- Установить текущее время (для названия файла) -- Set _PARSEARG="eol=; tokens=1,2,3* delims=:, " For /F %_PARSEARG% %%i in ('time /t') Do Set _HHMM=_%%i%%j
После этого можно использовать значения переменных _HHMM и _YYYYMMDD в имени файла, в который мы помещаем резервную копию журнала. Мне бы хотелось указывать время с точностью большей, чем до минуты, и это можно сделать, анализируя вместо результатов time /t значение переменной среды time:
C:\Informix>echo %time% 14:03:14,79
Правда, в NT4 эта переменная еще не поддерживалась... Впрочем, если восстановление выполняется дольше, чем за минуту (так оно и будет в реальной ситуации), никаких серьезных проблем не возникает. Каждая копия журнала уникально идентифицируется.
Третья, и наиболее серьезная проблема, на которую мне указали, состоит в том, что пока копируется журнал, может заполниться следующий. Что при этом произойдет ("подхватит" ли текущий процесс ontape -a новый заполненный журнал или нет, не будет ли конфликтов при одновременной работе двух и более процессов ontape -a и возможна ли она вообще) - надо исследовать. Я собираюсь рассмотреть эту проблему в одном из следующих выпусков. А пока - пора восстанавливать Informix, а то мне без него скучно...
Восстановление сервера с помощью ontape
Теоретически, восстанавливать сервер из резервной копии так же просто, как и создавать ее. Если сервер "упал" и не запускается, необходимо найти подходящие резервные копии, поместить соответствующий архив уровня 0 в устройство, задаваемое параметром конфигурации TAPEDEV, и выполнить восстановление с помощью команды ontape -r.
1. Восстановление из архива уровня 0
C:\Informix>cd c:\tmp C:\tmp>copy /y archive.0 archive Скопировано файлов: 1. C:\tmp>dir archive* Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 13:51 17 842 176 archive 19.01.2005 13:51 17 842 176 archive.0 19.01.2005 14:13 262 144 archive.1 ... C:\tmp>ontape -r Please mount tape 1 on c:\tmp\archive and press Return to continue ... Archive Tape Information Tape type: Archive Backup Tape Online version: Informix Dynamic Server Version 9.30.TC2 Archive date: Wed Jan 19 13:50:53 2005 User id: openxs Terminal id: CREATOR Archive level: 0 Tape device: c:\tmp\archive Tape blocksize (in k): 16 Tape size (in k): 100000 Tape number in series: 1 Spaces to restore:1 [rootdbs ] 2 [blobdbs ] 3 [sbspace ] 4 [workdbs ] Archive Information Informix Dynamic Server Copyright(C) 1986-1999 Informix Software, Inc. Initialization Time 04/15/2003 09:28:15 System Page Size 4096 Version 12 Archive CheckPoint Time 01/19/2005 13:50:54 Dbspaces number flags fchunk nchunks flags owner name 1 1 1 1 N informix rootdbs 2 8001 2 1 N S informix sbspace 3 1 3 1 N informix workdbs 4 11 4 1 N B informix blobdbs Chunks chk/dbs offset size free bpages flags pathname 1 1 0 12800 5413 PO- C:\IFMXDATA\ol_creator\rootdbs_dat.000 2 2 0 12500 544 POS c:\IFMXDATA\ol_creator\sbspace_dat.000 3 3 0 25000 24206 PO- c:\IFMXDATA\ol_creator\workdbs_dat.000 4 4 0 2500 2500 POB c:\IFMXDATA\ol_creator\blobdbs_dat.000 Continue restore? (y/n)y Do you want to back up the logs? (y/n)y Please mount tape 1 on c:\tmp\log and press Return to continue ... Log files are corrupt. Could not salvage logs, continue restore? (y/n)y Restore a level 1 archive (y/n) n Do you want to restore log tapes? (y/n)n Program over. C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Fast Recovery (CKPT REQ) -- Up 0 0:11:50 -- 25472 Kbytes Blocked:CKPT C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Quiescent -- Up 00:11:53 -- 2547 2 Kbytes C:\tmp>onmode -m C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:12:10 -- 25472 Kbytes C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:20:05 -- 25472 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 0 8 0 0 0.00 phybegin physize phypos phyused %used 100107 500 141 0 0.00 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 8 1 1 1 1.0 1.0 Subsystem numrecs Log Space used OLDRSAM 1 32 address number flags uniqid begin size used %used ca376a8 1 F------ 0 1002fb 500 0 0.00 ca376e0 2 U---C-L 32 1004ef 500 408 81.60 ca37718 3 F------ 0 1006e3 500 0 0.00 ca37750 4 F------ 0 1008d7 500 0 0.00 ca37788 5 F------ 0 100acb 500 0 0.00 ca377c0 6 F------ 0 100cbf 500 0 0.00 6 active, 6 total C:\tmp>dir log* Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 01.02.2005 14:50 16 384 log 19.01.2005 13:22 2 097 152 log.31 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. В соответствии с представленной в прошлом выпуске таблицей:
Момент времени | 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 и... | Вызываем сбой дискового компонента сервера. |
это соответствует моменту времени t0. Сомневающиеся могут выполнить запрос select * from state и убедиться, что таблица state существует, но штата Украина в ней (пока) нет.
Обратите внимание на вопрос утилиты ontape о копировании журналов при восстановлении. Она пытается сохранить всю доступную информацию о транзакциях, ведь, как минимум, текущий на момент сбоя журнал наверняка не скопирован. У нас попытка копирования журналов закончилась сбоем (логические журналы, как это ни прискорбно, размещались в rootdbs, а с его первым чанком мы поступили жестоко... Теперь вы знаете еще одну причину, почему логические журналы имеет смысл выносить в отдельное DB-пространство и на отдельный диск.
Надеюсь, вы понимаете, что текущий журнал с идентификатором 32 отличается от того, копия которого хранится в файле log.32? Когда мы восстановили сервер, он начал работать с того же момента времени t0 заново, это та самая "реинкарнация". В журнале с идентификатором 32 теперь записано про успешное восстановление из архива и запуск сервера, но ничего не записано про добавление "штата Украина".
Кстати, в журнале сообщений Informix наш процесс восстановления отразился следующим образом:
14:53:06 Informix Dynamic Server Started. Tue Feb 01 14:53:07 2005 14:53:07 Booting Language <c> from module <> 14:53:07 Loading Module <CNULL> 14:53:07 Booting Language <builtin> from module <> 14:53:07 Loading Module <BUILTINNULL> 14:53:12 Informix Dynamic Server Version 9.30.TC2 Software Serial Number AAC#J415297 14:53:12 Informix Dynamic Server Initialized -- Shared Memory Initialized. 14:53:12 Data replication type and state information reset. To start DR, use the 'onmode -d' command and wait for the pair to be operational, before shutting down the database server 14:53:27 Dataskip is now OFF for all dbspaces 14:53:27 Restartable Restore has been ENABLED 14:53:27 Recovery Mode 14:53:28 Physical Restore of rootdbs, blobdbs, sbspace, workdbs started. 14:53:37 Checkpoint Completed: duration was 1 seconds. 14:53:37 Checkpoint loguniq 32, logpos 0x196850 14:53:37 Maximum server connections 0 14:53:37 Checkpoint Completed: duration was 0 seconds. 14:53:37 Checkpoint loguniq 32, logpos 0x196850 14:53:37 Maximum server connections 0 14:53:38 Checkpoint Completed: duration was 0 seconds. 14:53:38 Checkpoint loguniq 32, logpos 0x196850 14:53:38 Maximum server connections 0 14:53:49 Checkpoint Completed: duration was 0 seconds. 14:53:49 Checkpoint loguniq 32, logpos 0x196850 14:53:49 Maximum server connections 0 14:53:49 Physical Restore of rootdbs, blobdbs, sbspace, workdbs Completed. 14:53:49 Checkpoint Completed: duration was 0 seconds. 14:53:49 Checkpoint loguniq 32, logpos 0x196850 14:53:49 Maximum server connections 0 15:04:52 No logical log restore will be performed. 15:04:52 Preparing Physical Log for Fast Recovery ... 15:04:52 Clearing the physical and logical logs has started 15:04:53 Cleared 12 MB of the physical and logical logs in 0 seconds 15:04:53 Dropping temporary TBLspace 0x300026, recovering 28 pages. 15:04:53 Physical Recovery Started at Page(1:404). 15:04:53 Physical Recovery Complete: 0 Pages Examined 0 Pages Restored. 15:04:53 Logical Recovery Started. 15:04:53 10 recovery worker threads will be started. 15:04:53 Dynamically allocated new virtual shared memory segment (size 8192KB) 15:04:54 Checkpoint Completed: duration was 0 seconds. 15:04:54 Checkpoint loguniq 32, logpos 0x196850 15:04:54 Maximum server connections 0 15:04:56 Logical Recovery has reached the transaction cleanup phase. 15:04:56 Logical Recovery Complete. 0 Committed, 0 Rolled Back, 0 Open, 0 Bad Locks 15:04:57 Bringing system to Quiescent Mode with no Logical Restore. 15:04:58 Quiescent Mode 15:04:58 Checkpoint Completed: duration was 0 seconds. 15:04:58 Checkpoint loguniq 32, logpos 0x197018 15:04:58 Maximum server connections 0 15:05:15 On-Line Mode
2. Восстановление из инкрементного архива
Восстановление состояния сервера на момент времени t1 можно выполнить двумя способами: восстановление из архива уровня 0 и затем логическое восстановление по журналам или восстановление из архива уровня 0 и инкрементного архива уровня 1. Вот это способ мы и рассмотрим. Я приведу только те детали, которые отличают рассматриваемую процедуру восстановления от предыдущей:
C:\tmp>onmode -ky C:\tmp>onstat - shared memory not initialized for INFORMIXSERVER 'ol_creator' C:\tmp>ontape -r ... Continue restore? (y/n)y Do you want to back up the logs? (y/n)y Please mount tape 1 on c:\tmp\log and press Return to continue ... Would you like to back up log 32? (y/n) y Please label this tape as number 1 in the log tape sequence. This tape contains the following logical logs: 32 Log salvage is complete, continuing restore of archive. Restore a level 1 archive (y/n) y Ready for level 1 tape Please mount tape 1 on c:\tmp\archive and press Return to continue ...
Тем временем, в другом окне командной строки мы сохраняем копию журнала 32 из новой "реинкарнации" (это был пример успешного выполнения log salvage, поскольку не заполненный и не скопированный журнал доступен) и, когда нас попросили вставить ленточку с архивом уровня 1 (но не раньше), копируем соответствующий файл в TAPEDEV:
C:\Informix>cd c:\tmp C:\tmp>rename log log.32.salvaged C:\tmp>copy nul log Скопировано файлов: 1. C:\tmp>copy /y archive.1 archive Скопировано файлов: 1.
и нажимаем в первом окне Enter. Получаем:
Archive Tape Information Tape type: Archive Backup Tape Online version: Informix Dynamic Server Version 9.30.TC2 Archive date: Wed Jan 19 14:13:11 2005 User id: openxs Terminal id: CREATOR Archive level: 1 Tape device: c:\tmp\archive Tape blocksize (in k): 16 Tape size (in k): 100000 Tape number in series: 1 Restore a level 2 archive (y/n) n Do you want to restore log tapes? (y/n)n Program over. C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Quiescent -- Up 00:05:20 -- 2547 2 Kbytes C:\tmp>onmode -m C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:05:27 -- 25472 Kbytes
Инкрементного архива уровня 2 у нас нет, а восстановление по копиям журналов мы снова решили не выполнять.
Можно проверить, что это действительно состояние на момент времени t1, выполнив запрос select * from state where code = 'UA'.
3. Восстановление до момента сбоя
В большинстве случаев реального сбоя одного из DB-пространств сервер надо восстановить как можно ближе к моменту сбоя. Вот и мы давайте восстановим сервер на момент времени t2 (состояние t3 нельзя восстановить, так как логический журнал с идентификатором 35 был безнадежно утрачен вместе с rootdbs)
Выполненная перед этим успешная попытка восстановления на момент времени t1, в сочетании с недостатками использованного alarm.bat, нам, правда, немного помешают. Обратите внимание:
C:\tmp>dir log* Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 14:21 65 536 log 19.01.2005 13:22 2 097 152 log.31 01.02.2005 16:19 32 768 log.32 01.02.2005 16:08 1 720 320 log.32.salvaged 19.01.2005 14:18 65 536 log.33 19.01.2005 14:21 65 536 log.34
Копия журнала 32 переписана - у нее сегодняшняя дата. Правда, есть копия, которую мы сделали перед попыткой восстановления... Допустим, никто не обратил на это внимание и снова выключил сервер для восстановления, "вставив ленту" с архивом уровня 0:
C:\tmp>onmode -ky C:\tmp>copy /y archive.0 archive Скопировано файлов: 1. C:\tmp>ontape -r ... Continue restore? (y/n)y Do you want to back up the logs? (y/n)n Restore a level 1 archive (y/n) n
Для разнообразия, давайте восстановимся после архива уровня 0 только по журналам:
Do you want to restore log tapes? (y/n)y Roll forward should start with log number 32 Please mount tape 1 on c:\tmp\log and press Return to continue ...
В соседнем окне, не долго думая, "вставляем ленту" с журналом 32, и жмем Enter в первом окне:
C:\tmp>copy /y log.32 log Скопировано файлов: 1.
Но что это за сообщение?
Unexpected end of log tape (errno 0), continuing...
Ага! Мы же (ПО ОШИБКЕ!) скопировали сегодняшнюю копию журнала 32. Но у нас есть сохраненная:
C:\tmp>copy /y log.32.salvaged log Скопировано файлов: 1.
И пробуем снова:
Do you want to restore another log tape? (y/n)y Please mount tape 2 on c:\tmp\log and press Return to continue ...
Вроде прошло:
Do you want to restore another log tape? (y/n)y Please mount tape 3 on c:\tmp\log and press Return to continue ...
В другом окне:
C:\tmp>copy /y log.33 log Скопировано файлов: 1.
Продолжаем дальше:
Do you want to restore another log tape? (y/n)y Please mount tape 4 on c:\tmp\log and press Return to continue ...
В другом окне:
C:\tmp>copy /y log.34 log Скопировано файлов: 1.
Больше копий у нас нет:
Do you want to restore another log tape? (y/n)n Program over. C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- Quiescent -- Up 00:03:34 -- 3366 4 Kbytes C:\tmp>onmode -m C:\tmp>onstat -l Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:03:47 -- 33664 Kbytes Physical Logging Buffer bufused bufsize numpages numwrits pages/io P-1 0 8 1 1 1.00 phybegin physize phypos phyused %used 100107 500 142 0 0.00 Logical Logging Buffer bufused bufsize numrecs numpages numwrits recs/pages pages/io L-2 0 8 0 0 0 0.0 0.0 Subsystem numrecs Log Space used address number flags uniqid begin size used %used ca376a8 1 F------ 0 1002fb 500 0 0.00 ca376e0 2 U-B---- 32 1004ef 500 410 82.00 ca37718 3 U-B---- 33 1006e3 500 4 0.80 ca37750 4 U-B---- 34 1008d7 500 5 1.00 ca37788 5 U---C-L 35 100acb 500 1 0.20 ca377c0 6 F------ 0 100cbf 500 0 0.00 6 active, 6 total
Отлично, не правда ли? Но что ЭТО????
C:\tmp>onstat -d Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:09:12 -- 33664 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 0x5 3 1 ND 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 5413 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 0 PD- 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
Пространство workdbs, в котором находится наша демонстрационная база, недоступно! Не удивительно - сохраненная копия журнала 32 и та, которую надо было подложить, немного, но отличаются. Сервер не смог согласовать данные, о чем и написал в журнал сообщений:
16:27:28 Physical Restore of rootdbs, blobdbs, sbspace, workdbs started. 16:27:30 Checkpoint Completed: duration was 0 seconds. 16:27:30 Checkpoint loguniq 32, logpos 0x196850 16:27:30 Maximum server connections 0 16:27:30 Checkpoint Completed: duration was 0 seconds. 16:27:30 Checkpoint loguniq 32, logpos 0x196850 16:27:30 Maximum server connections 0 16:27:31 Checkpoint Completed: duration was 0 seconds. 16:27:31 Checkpoint loguniq 32, logpos 0x196850 16:27:31 Maximum server connections 0 16:27:31 Checkpoint Completed: duration was 0 seconds. 16:27:31 Checkpoint loguniq 32, logpos 0x196850 16:27:31 Maximum server connections 0 16:27:31 Physical Restore of rootdbs, blobdbs, sbspace, workdbs Completed. 16:27:31 Checkpoint Completed: duration was 0 seconds. 16:27:31 Checkpoint loguniq 32, logpos 0x196850 16:27:31 Maximum server connections 0 16:27:57 Logical Recovery Started. 16:27:57 10 recovery worker threads will be started. 16:27:57 Dynamically allocated new virtual shared memory segment (size 8192KB) 16:27:57 Dynamically allocated new virtual shared memory segment (size 8192KB) 16:27:57 Checkpoint Completed: duration was 0 seconds. 16:27:57 Checkpoint loguniq 32, logpos 0x196850 16:27:57 Maximum server connections 0 16:27:57 Start Logical Recovery - Start Log 32, End Log ? 16:27:57 Starting Log Position - 32 0x196850 16:27:57 Clearing the physical and logical logs has started 16:27:58 Cleared 12 MB of the physical and logical logs in 1 seconds 16:29:39 Checkpoint Completed: duration was 0 seconds. 16:29:39 Checkpoint loguniq 32, logpos 0x197018 16:29:39 Maximum server connections 0 16:29:39 Checkpoint Completed: duration was 0 seconds. 16:29:39 Checkpoint loguniq 32, logpos 0x198018 16:29:39 Maximum server connections 0 16:30:00 Checkpoint Completed: duration was 0 seconds. 16:30:00 Checkpoint loguniq 33, logpos 0x1044 16:30:00 Maximum server connections 0 16:30:00 Rollforward of log record failed. iserrno = 0 16:30:00 Log Record: log = 33, pos = 0x21b4, type = OLDRSAM:CHALLOC(51), trans = 8 16:30:00 Rollforward of log record failed. iserrno = 0 16:30:00 Log Record: log = 33, pos = 0x2040, type = OLDRSAM:BLDCL(32), trans = 8 16:30:01 Ignoring the ONDBSPACEDOWN option during logical recovery. Dynamic Server will NOT BLOCK at the next checkpoint 16:30:01 Assert Failed: Chunk 3 is being taken OFFLINE. 16:30:01 Informix Dynamic Server Version 9.30.TC2 16:30:01 Who: Session(11, informix@creator, 0, 0) Thread(32, xchg_2.0, 0, 1) File: rsmirror.c Line: 1855 16:30:01 Results: DBspace workdbs is disabled. 16:30:01 Action: Restore DBspace workdbs 16:30:01 stack trace for pid 1036 written to C:\tmp\af.4089268 16:30:01 See Also: C:\tmp\af.4089268 16:30:03 Releasing server from system block 16:30:14 Chunk 3 is being taken OFFLINE. 16:30:14 Chunk 3 is being taken OFFLINE. 16:30:14 Rollforward of log record failed. iserrno = 172 16:30:14 Log Record: log = 33, pos = 0x21b4, type = OLDRSAM:CHALLOC(51), trans = 8 16:30:14 Ignoring the ONDBSPACEDOWN option during logical recovery. Dynamic Server will NOT BLOCK at the next checkpoint 16:30:14 Assert Failed: Chunk 3 is being taken OFFLINE. 16:30:14 Informix Dynamic Server Version 9.30.TC2 16:30:14 Who: Session(11, informix@creator, 0, 0) Thread(28, xchg_1.6, 0, 1) File: rsmirror.c Line: 1855 16:30:15 Results: DBspace workdbs is disabled. 16:30:15 Action: Restore DBspace workdbs 16:30:15 stack trace for pid 1036 written to C:\tmp\af.4049268 16:30:15 See Also: C:\tmp\af.4049268 16:30:28 Chunk 3 is being taken OFFLINE. 16:30:28 Chunk 3 is being taken OFFLINE. 16:30:28 Rollforward of log record failed. iserrno = 172 16:30:28 Log Record: log = 33, pos = 0x2040, type = OLDRSAM:BLDCL(32), trans = 8 16:30:28 Checkpoint Completed: duration was 0 seconds. 16:30:28 Checkpoint loguniq 33, logpos 0x2850 16:30:28 Maximum server connections 0 16:30:29 Checkpoint Completed: duration was 0 seconds. 16:30:29 Checkpoint loguniq 34, logpos 0x1018 16:30:29 Maximum server connections 0 16:30:36 Logical Recovery has reached the transaction cleanup phase. 16:30:36 Logical Recovery Complete. 11 Committed, 0 Rolled Back, 0 Open, 0 Bad Locks 16:30:36 Logical Recovery Complete. 16:30:37 Quiescent Mode 16:30:37 Logical Log 34 Complete. 16:30:37 Checkpoint Completed: duration was 0 seconds. 16:30:37 Checkpoint loguniq 35, logpos 0x18 16:30:37 Maximum server connections 0 16:30:51 On-Line Mode
Там же написано, что делать: восстанавливать чанк workdbs! У нас сервер в режиме On-Line, так что, давайте попрактикуемся в теплом (при работающем сервере) восстановлении отдельного пространства (архив уровня 0 у нас на месте):
C:\tmp>dir archive* Том в устройстве C имеет метку MAIN Серийный номер тома: D0A3-4245 Содержимое папки C:\tmp 19.01.2005 13:51 17 842 176 archive 19.01.2005 13:51 17 842 176 archive.0 19.01.2005 14:13 262 144 archive.1 ... C:\tmp>ontape -r -D workdbs Please mount tape 1 on c:\tmp\archive and press Return to continue ... Archive Tape Information Tape type: Archive Backup Tape Online version: Informix Dynamic Server Version 9.30.TC2 Archive date: Wed Jan 19 13:50:53 2005 User id: openxs Terminal id: CREATOR Archive level: 0 Tape device: c:\tmp\archive Tape blocksize (in k): 16 Tape size (in k): 100000 Tape number in series: 1 Continue restore? (y/n)y Spaces to restore:1 [workdbs ] Restore a level 1 archive (y/n) y Ready for level 1 tape Please mount tape 1 on c:\tmp\archive and press Return to continue ...
В соседнем окне выполняем:
C:\tmp>copy /y archive.1 archive Скопировано файлов: 1.
Потом жмем на Enter в окне, из которого выполнена команда ontape, и получаем:
Archive Tape Information Tape type: Archive Backup Tape Online version: Informix Dynamic Server Version 9.30.TC2 Archive date: Wed Jan 19 14:13:11 2005 User id: openxs Terminal id: CREATOR Archive level: 1 Tape device: c:\tmp\archive Tape blocksize (in k): 16 Tape size (in k): 100000 Tape number in series: 1
Так и только ТАК! Подходящей копии журнала 32 у нас нет (мы только что убедились в этом, поэтому используем инкрементный архив (к сачстью, он есть!), чтобы восстанволение по журналам начать с нормальной копии журнала 33. Продолжаем:
Restore a level 2 archive (y/n) n Do you want to restore log tapes? (y/n)y Roll forward should start with log number 33 Please mount tape 1 on c:\tmp\log and press Return to continue ...
В соседнем окне подкладываем копию журнала 33 и жмем Enter в окне восстановления:
C:\tmp>copy /y log.33 log Скопировано файлов: 1.
Мы же хотим восстановить как можно ближе к моменту сбоя? Вот и продолжаем дальше:
Do you want to restore another log tape? (y/n)y Please mount tape 2 on c:\tmp\log and press Return to continue ...
В соседнем окне подкладываем копию журнала 34 и жмем Enter в окне восстановления:
C:\tmp>copy /y log.34 log Скопировано файлов: 1.
И завершаем процесс восстановления:
Do you want to restore another log tape? (y/n)n Program over. C:\tmp>onstat - Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:15:31 -- 33664 Kbytes C:\tmp>onstat -d Informix Dynamic Server Version 9.30.TC2 -- On-Line -- Up 00:15:34 -- 33664 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 5413 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 24247 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
Те, кто не верит в свое счастье, могут проверить, что таблицы state нет. Это и есть момент времени t2!
Итоги
Мы рассмотрели несколько различных процедур восстановления сервера при наличии необходимых архивов и резервных копий журналов, созданных с помощью ontape. Было показано, как восстановить данные на любой из описанных в предыдущем выпуске моментов времени, t0, t1 и t2, при условии, что разрушены были только некоторые чанки Informix.
Как видите, процедуры восстановления достаточно просты, хотя и требуют существенного вмешательства администратора - именно вы занимаетесь копированием файлов ("вставкой лент") в нужном порядке и определяете процедуру восстановления. Именно вы можете сделать ошибку в планировании и реализации процедур резервного копирования и восстановления, и только вы можете ее исправить. Помните, что сапер и администратор в процессе восстановления сервера, обычно, ошибается только один раз! К счастью, администратор может легко потренироваться на резервном сервере или домашнем компьютере, что я и рекомендую проделать.
Мы также увидели явное ограничение утилиты ontape - восстановить сервер можно "с точностью" до одного логического журнала. Журнал либо восстанавливается полностью, либо не восстанавливается вообще. Вот почему на производственных серверах размер одного журнала редко превосходит пару мегабайт. Чем меньше журнал, тем меньше изменений будет потеряно в случае сбоя и тем "ближе" к требуемому моменту времени можно будет выполнить восстановление!
Документация:
1.Informix Backup and Restore Guide, Version 8.31/9.3 (G251-0481-00).
Архив рассылки
Все вышедшие выпуски рассылки можно найти на сайте рассылки. Там же реализована возможность поиска материалов по ключевым словам (с помощью Google)
В следующем выпуске
Мы рассмотрим усовершенствованный вариант сценария alarm.bat, проблемы, которые могут возникнуть при практическом применении описанной методики резервного копирования и восстановления с помощью ontape, а также способы их решения. Я по-прежнему с удовольствием отвечу на все вопросы по резервному копированию с помощью ontape, которые вы зададите мне до следующего выпуска.
С наилучшими пожеланиями,
В.К.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.db.informix |
Отписаться |
В избранное | ||