|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Информикс: Informix Dynamic Server 2000 Version 9.21.UC5 Предистория: 1) Нужно было сделать UPDATE на очень большой таблице, он приводил к завершению транзакции LONG TRANSACTION ABORTED 2) Установил LTXHWM 100, LTXEHWM 100, запустил запрос. Информикс подвис на час, признаков жизни не подавал никаких. 3) Остановил информикс onmode -ky Теперь после запуска (oninit -s) информакс пишет: 18:38:24 Logical Recovery Started. 18:38:24 5 recovery worker threads will be started. 18:38:25 Fast Recovery Switching to Log 2697 18:38:26 Fast Recovery Switching to Log 2698 18:38:27 Fast Recovery Switching to Log 2699 18:38:28 Fast Recovery Switching to Log 2700 18:38:29 Fast Recovery Switching to Log 2701 18:38:33 Waiting for Next Logical Log File to be Freed после чего виснет В статусе выдает -- Fast Recovery (CKPT REQ) -- Up 00:06:33 -- 157696 Kbytes Blocked:CKPT Пытаюсь выполнить команду ontape -a на /dev/null оканчивается ошибкой: Performing automatic backup of logical logs. Logbackup failed - Log backup to device '/dev/null' not allowed Пытаюсь выполнить команду не на /dev/null бэкап начинается, но зависает... Какие идеи что можно сделать? Можно ли как-то не начинать Logical Recovery? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 19:06 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Читать документацию надо, уважаемый. Именно для ваших случаев и придуманы LTXHWM и LTXEHWM - чтобы транзакции было место откатиться. Это вы сами придумали - их в 100 выставить ? Или добрые люди посоветовали ? Впрочем, это уже неважно, а важно то, что сейчас вы сидите в глубокой ж., в которую загнали себя сами : все логи забиты, места для отката нет, более того - нет места для записи о начале бэкапа (который вам, к слову сказать, все равно не поможет). Поскольку в 9.21 нет возможности динамически добавлять логи, то вам либо а) восстанавливаться из архива либо б) звонить в саппорт, у них есть утилита для обрезания логов (при этом таблица ваша и, не исключено, другие, останутся в наполовину апдейтнутом состоянии). В таком вот аксепте ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 19:22 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Бэкап слишком старый.. Его восстанавливать смысла особого нет, а саппорта вообще нет, может скажите что это за утилита такая и где ее можно найти? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 19:31 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
alander1) Нужно было сделать UPDATE на очень большой таблице, он приводил к завершению транзакции LONG TRANSACTION ABORTED 2) Установил LTXHWM 100, LTXEHWM 100, запустил запрос. Информикс подвис на час, признаков жизни не подавал никаких. Это же надо было такое придумать! Налицо полное непонимание транзакционных механизмов и принципов журнализации. Кроме самого правильного "разбить update на небольшие части" можно было сделать несколько вариантов, каждый из которых был бы не так страшен последствиями: - добавить (на время или навсегда) большое кол-во логжурналов и большого размера - на время работы выключить журнализацию БД (поддержку транзакций). Утилитку саппорта, даже если бы ее и удалось где то стырить, заюзать не удастся - там даже время работы ограничено несколькими часами и генерится для каждого инстанса по его купленной лицензии :) Есть вариант - засесть срочно за доки по структуре страниц IDS, разобраться с двоичными страницами логжурналов, ручками на винте поправить ("освободить") несколько журналов, точнее обрезать ту самую длинную транзакцию, которая хочет откатиться при старте сервера и, если повезет поднять сервер, срочно слить с него все, что можно. После этого переинициализировать сервак. Но работа эта "не для слабонервных" и довольно трудоемкая, особенно если нет понимания внутренней работы сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 20:21 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
alanderБэкап слишком старый.. Его восстанавливать смысла особого нет, а саппорта вообще нет, может скажите что это за утилита такая и где ее можно найти? Утилита называется onzero. Взять ее негде - это внутренняя утилита саппорта, password-protected, password changed daily, после использования удаляется с компьютера пользователя. Вместо нее можно использовать любой дисковый редактор или dd. Что надо сделать, если терять вам больше нечего - обнулить 4 байта после последнего чекпойнта (длина записи о чекпойнте - 36 байт в 9.4) 1. oncheck -pr , найти строки Logical log unique identifier 26 Logical log position at Ckpt 0xd018 (Page 13, byte 24) ... Log file number 2 Unique identifier 26 Log contains last checkpoint: Page 13, byte 24 Log file flags 0x3 Log file in use & Current log file Physical location 1:1263 2. onlog -n 26 ... a018 36 CKPOINT 1 26 0 0 b018 36 CKPOINT 1 26 0 0 c018 36 CKPOINT 1 26 0 0 d018 36 CKPOINT 1 26 0 0 3. надо обнулить 4 байта по адресу (0xdo18 + 36) в первом чанке После этого информикс при старте будет думать, что никаких записей в логическом логе больше нет. Disclaimer : Do on your own risk, претензии по поводу порчи данных не принимаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 20:26 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Пардон, соврал : обнулять надо не по адресу (0xd018 + 36), а по адресу physical location лога + сдвиг в логе, т.е. (1263 *4k) + (0xd018 + 36) В таком вот аксепте ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2006, 20:29 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Всем спасибо, информикс запустил. Без редактора диска не обошлось, по поводу обрезания логов не все так просто. Для того чтобы обрезать лог журнал после чекпойнта нужно не удалять после него запись, а изменить длину страницы по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + (8-12)byte. Кстати длина чекпойнта не строго определена, а зависит от количества транзакций в момент чекпойнта, минимальная длина - 32байта. Длина чекпойнта прописана по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + адрес чекпойнта - (адрес чекпойнта div 4k)*4k, 1-4 байт. Более того, само по себе обрезание лога ни к чему не приводит, сам по себе чекпойнт нужно изменять (на чекпойнт без транзакций) Далее для того, чтобы информикс понял, что кроме измененного чекпойнта ничего нет нужно прописать адрес чекпойнта - несколько байт после таблицы лог журналов (в самом начале rootdbs). Адрес состоит из указания лог жунала + адреса в лог журнале. Вот такой этот информикс. PS: на самом деле я не думал, что откат транзакции требует журналирования - в этом и было мое заблуждение ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 12:34 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
alander... PS: на самом деле я не думал, что откат транзакции требует журналирования - в этом и было мое заблуждениеЗаблуждений у вас много. Что вы бы делали интересно если бы раид контроллер сошел с ума и вкатал бы в диски всякой фигни, или если бы лопнула батарея или пожар? В общем от банальных ошибок в ПО самой субд раид и серверная не спасут ни в коем разе, и от глупого программера/админа прихлопнувшего всю таблицу разом. ЗЫЖ я работал в оргранизации в которой серверная выдерживала пожар снаружи и падение с 3-го этажа и обладала внутренней системой пожаротушения, и представляю сколько это стоит, по моему бекап дешевле. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 12:48 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Бэкапа небыло только для одной базы из 10, делаются они dbexport-ом. Оставили не закрытый коннекшн к базе и все... Отследить не смог. И что уж говорить, когда это далеко не основной сервер.. Все знать нельзя, иногда приходится опираться на логику при принятии решений, на мой взгляд откат не должен использовать логические журналы, увы это не так. Зато теперь знаю что нужно менять если вдруг запорятся логические журналы (операция по отчистке минут на 20) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 13:36 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Все знать нельзя конечно. Удивительно почему вы меняете значения параметров о которых имеете отдаленное представление. alander... Зато теперь знаю что нужно менять если вдруг запорятся логические журналы (операция по отчистке минут на 20)После чистки вам предстоит сделать массу открытий по инконсистентонсти в данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 13:50 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Журавлев ДенисПосле чистки вам предстоит сделать массу открытий по инконсистентонсти в данных. Это понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 14:06 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
alanderВсем спасибо, информикс запустил. Без редактора диска не обошлось, по поводу обрезания логов не все так просто. Для того чтобы обрезать лог журнал после чекпойнта нужно не удалять после него запись, а изменить длину страницы по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + (8-12)byte. Кстати длина чекпойнта не строго определена, а зависит от количества транзакций в момент чекпойнта, минимальная длина - 32байта. Длина чекпойнта прописана по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + адрес чекпойнта - (адрес чекпойнта div 4k)*4k, 1-4 байт. Более того, само по себе обрезание лога ни к чему не приводит, сам по себе чекпойнт нужно изменять (на чекпойнт без транзакций) Далее для того, чтобы информикс понял, что кроме измененного чекпойнта ничего нет нужно прописать адрес чекпойнта - несколько байт после таблицы лог журналов (в самом начале rootdbs). Адрес состоит из указания лог жунала + адреса в лог журнале. Вот такой этот информикс. PS: на самом деле я не думал, что откат транзакции требует журналирования - в этом и было мое заблуждение Че-то вы такое накрутили... какую длину страницы вы меняли ? длина страницы определяется платформой, 4К для win и aix, 2k для всех остальных. И в reserved pages лазить совершенно не надо. Все, что требовалось - поменять запись о чекпойнте на формат "без открытых транзакций" (это вы верно обнаружили) и обнулить остатки страницы. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2006, 20:44 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
Давно хотел проверить вышеприведенный алгоритм, и вот вчера полетела тестовая виндовая машина с 9.4 информиксом с данными которые очень не хотелось восстанавливать вручную. Ситуация усугубилась наличием включенных fuzzy chekpoints и полным отсутствием всяческих бэкапов, которые к тому же направлялись в nul. После выполнения команд oncheck -pr и onlog обнаружилось, что после сбоя в файле логических журналов исчезла запись о последнем чекпоинте. Поэтому схема действий была такова: 1. сначала был найден вообще последний чекпоинт, вернее его адрес. 2. этот адрес был прописан в зарезервированных страницах. 3. по вышеприведенному алгоритму "onzero" последний чекпоинт был изменен на формат "без открытых транзакций". При старте информикс очень сильно ругался, но в онлайн все-таки перешел, что позволило сделать dbexport и спасти важные данные. To Выбегалло: огромное спасибо за алгоритм:) С уважением, Виктор ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2008, 08:30 |
|
Не запускается информикс после останова
|
|||
---|---|---|---|
#18+
victor16, Когда-то что-то похожее писал на Pyton - как домашнее задание: --------------------------------------------------- import sys, string, binascii ## Time stamp of checkpoint 0x16bb17 ## Time of checkpoint 11/14/2002 17:55:55 ## Logical log unique identifier 155 ## Logical log position at Ckpt 0x5018 (Page 5, byte 24) ## Log file number 5 ## Unique identifier 155 ## Log contains last checkpoint: Page 5, byte 24 ## Log file flags 0x3 Log file in use ## & Current log file ## Physical location 0x100acb ## Log size 500 (p) ## Number pages used 6 ## Date/Time file filled - ## Time stamp - Time_stamp = []; Time_chkpt = []; Log_unid = []; Log_pos = []; d_pr = 'C:\\informix\\support\\oncheck_pr.txt' f_pr = open( d_pr, 'rb' ) str = f_pr.readline() while str: str = str[:-2] if ( string.find( str, "Time stamp of checkpoint" ) != -1 ) : Time_stamp = string.split( str ) if ( string.find( str, "Time of checkpoint" ) != -1 ) : Time_chkpt = string.split( str ) if ( string.find( str, "Logical log unique identifier" ) != -1 ) : Log_unid = string.split( str ) if ( string.find( str, "Logical log position at Ckpt" ) != -1 ) : Log_pos = string.split( str ) if ( string.find( str, "Log file number" ) != -1 ) : Log_number = []; Log_number = string.split( str ) str = f_pr.readline() str = str[:-2] if ( string.find( str, "Unique identifier" ) != -1 ) : Unique_id = []; Unique_id = string.split( str ) if Log_unid[4] == Unique_id[2] : break str = f_pr.readline() f_pr.close() print "\n Time stamp of checkpoint .... -> " + Time_stamp[4] print "\n Time of checkpoint .......... -> " + Time_chkpt[3] + " " + Time_chkpt[4] print "\n Log file number ............. -> " + Log_number[3] print "\n Logical log unique identifier -> " + Log_unid[4] print "\n Logical log position at Ckpt -> " + Log_pos[5] ## ## DBspace Usage Report: rootdbs Owner: informix Created: 10/11/2002 ## Chunk Pathname Size Used Free ## 1 C:\informix\chunks\rootchk 12800 5607 7193 ## Description Offset Size ## ------------------------------------------------------------- -------- -------- ## ....................... ## LOGICAL LOG: Log file 5 763 500 ## ....................... d_pe = 'C:\\informix\\support\\oncheck_pe.txt' f_pe = open( d_pe, 'rb' ) str = f_pe.readline() while str: str = str[:-2] if ( string.find( str, "DBspace Usage" ) != -1 ) : DBspace = []; DBspace = string.split( str ) if ( string.find( str, "Chunk Pathname" ) != -1 ) : str = f_pe.readline() str = str[:-2] Chunk = []; Chunk = string.split( str ) if ( string.find( str, "LOGICAL LOG:" ) != -1 ) : Logs = []; Logs = string.split( str ) if Logs[4] != Log_number[3] : str = f_pe.readline() continue if Logs[4] == Log_number[3] : break str = f_pe.readline() f_pe.close() print "\n DBspace Usage ............... -> " + DBspace[3] print "\n Chunk Pathname .............. -> " + Chunk[1] print "\n Logical Log number .......... -> " + Logs[4] print "\n Logical Log Offset (Pages) .. -> " + Logs[5] ## Size page for Unix -> 2k = 2 * 1024 ## for Win -> 4k = 4 * 1024 ## Offset_decimal_win = 4 * 1024 * string.atoi( Logs[5] ) + string.atoi( Log_pos[5][2:],16 ) print "\n Chunk offset CKPOINT: \n Decimal -> %i \n Hex -> %X" %(Offset_decimal_win, Offset_decimal_win) ## ## addr len type xid id link ## 8018 32 CKPOINT 1 155 0 0 ## 20000000 9b004200 10000000 01000000 .....B. ........ ## 00000000 42bb1600 00000000 00000000 ....B... ........ ## addr len type xid id link ## f018 56 CKPOINT 1 155 0 1 ## begin xid id addr user ## 155 7 155 d070 unknown ## 38000000 9b004200 10000000 01000000 8.....B. ........ ## 00000000 dbbb1600 00000000 01000000 ........ ........ ## 9b000000 9b000000 70d00000 07000000 ........ p....... ## 01000000 03440800 .....D.. ## len: 32 --> 20000000 ## 9b004200 --> 9b = id 155 ## 004200 = CKPOINT ## ## C:\informix>onlog -n 158 -l | find "CKPOINT" ## addr len type xid id link ## 18 32 CKPOINT 0 155 0 0 ## 2018 56 CKPOINT 1 158 0 1 ## 3018 56 CKPOINT 1 158 0 1 ## Records=[]; offset = Offset_decimal_win f = open( Chunk[1], 'rb+' ) f.seek( offset, 0 ) ch = binascii.a2b_hex( '20' ) ## f.write( ch ) ch = binascii.a2b_hex( '9b') offset = Offset_decimal_win f.seek( offset+4, 0 ) ## f.write( ch ) ch = binascii.a2b_hex( '00' ) offset = Offset_decimal_win f.seek( offset+28, 0 ) ## f.write( ch ) ## f.seek( offset, 0 ) ## f.write( ch ) ## for i in range (32,64) : ## f.seek( i, 1 ) ## f.write( ch ) ## print f.tell() ## Records = f.read( 32 ) ## ## print f.tell() ## ## for i in range(0,31): ## print binascii.b2a_hex(Records[i]) ## f.close() exit ------------------------------------------- С уважением, Вадим. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2013, 23:21 |
|
|
start [/forum/topic.php?fid=44&msg=33511988&tid=1607066]: |
0ms |
get settings: |
25ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
321ms |
get tp. blocked users: |
1ms |
others: | 326ms |
total: | 753ms |
0 / 0 |