powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не запускается информикс после останова
14 сообщений из 14, страница 1 из 1
Не запускается информикс после останова
    #33508454
alander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Информикс: 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?
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33508479
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать документацию надо, уважаемый. Именно для ваших случаев и придуманы LTXHWM и LTXEHWM - чтобы транзакции было место откатиться. Это вы сами придумали - их в 100 выставить ? Или добрые люди посоветовали ?
Впрочем, это уже неважно, а важно то, что сейчас вы сидите в глубокой ж., в которую загнали себя сами : все логи забиты, места для отката нет, более того - нет места для записи о начале бэкапа (который вам, к слову сказать, все равно не поможет). Поскольку в 9.21 нет возможности динамически добавлять логи, то вам либо а) восстанавливаться из архива либо б) звонить в саппорт, у них есть утилита для обрезания логов (при этом таблица ваша и, не исключено, другие, останутся в наполовину апдейтнутом состоянии).

В таком вот аксепте
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33508492
alander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бэкап слишком старый.. Его восстанавливать смысла особого нет, а саппорта вообще нет, может скажите что это за утилита такая и где ее можно найти?
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33508558
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alander1) Нужно было сделать UPDATE на очень большой таблице, он приводил к завершению транзакции LONG TRANSACTION ABORTED
2) Установил LTXHWM 100, LTXEHWM 100, запустил запрос. Информикс подвис на час, признаков жизни не подавал никаких.

Это же надо было такое придумать! Налицо полное непонимание транзакционных механизмов и принципов журнализации.
Кроме самого правильного "разбить update на небольшие части" можно было сделать несколько вариантов, каждый из которых был бы не так страшен последствиями:
- добавить (на время или навсегда) большое кол-во логжурналов и большого размера
- на время работы выключить журнализацию БД (поддержку транзакций).

Утилитку саппорта, даже если бы ее и удалось где то стырить, заюзать не удастся - там даже время работы ограничено несколькими часами и генерится для каждого инстанса по его купленной лицензии :)

Есть вариант - засесть срочно за доки по структуре страниц IDS, разобраться с двоичными страницами логжурналов, ручками на винте поправить ("освободить") несколько журналов, точнее обрезать ту самую длинную транзакцию, которая хочет откатиться при старте сервера и, если повезет поднять сервер, срочно слить с него все, что можно. После этого переинициализировать сервак.
Но работа эта "не для слабонервных" и довольно трудоемкая, особенно если нет понимания внутренней работы сервера.
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33508562
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, претензии по поводу порчи данных не принимаются.
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33508566
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, соврал : обнулять надо не по адресу (0xd018 + 36), а по адресу physical location лога + сдвиг в логе, т.е.
(1263 *4k) + (0xd018 + 36)

В таком вот аксепте
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33510538
alander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, информикс запустил. Без редактора диска не обошлось, по поводу обрезания логов не все так просто. Для того чтобы обрезать лог журнал после чекпойнта нужно не удалять после него запись, а изменить длину страницы по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + (8-12)byte.

Кстати длина чекпойнта не строго определена, а зависит от количества транзакций в момент чекпойнта, минимальная длина - 32байта. Длина чекпойнта прописана по адресу (физический адрес * 2k) + (адрес чекпойнта div 4k)*2k + адрес чекпойнта - (адрес чекпойнта div 4k)*4k, 1-4 байт.

Более того, само по себе обрезание лога ни к чему не приводит, сам по себе чекпойнт нужно изменять (на чекпойнт без транзакций)

Далее для того, чтобы информикс понял, что кроме измененного чекпойнта ничего нет нужно прописать адрес чекпойнта - несколько байт после таблицы лог журналов (в самом начале rootdbs). Адрес состоит из указания лог жунала + адреса в лог журнале.

Вот такой этот информикс.

PS: на самом деле я не думал, что откат транзакции требует журналирования - в этом и было мое заблуждение
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33510593
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alander...
PS: на самом деле я не думал, что откат транзакции требует журналирования - в этом и было мое заблуждениеЗаблуждений у вас много. Что вы бы делали интересно если бы раид контроллер сошел с ума и вкатал бы в диски всякой фигни, или если бы лопнула батарея или пожар?
В общем от банальных ошибок в ПО самой субд раид и серверная не спасут ни в коем разе, и от глупого программера/админа прихлопнувшего всю таблицу разом.

ЗЫЖ я работал в оргранизации в которой серверная выдерживала пожар снаружи и падение с 3-го этажа и обладала внутренней системой пожаротушения, и представляю сколько это стоит, по моему бекап дешевле.
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33510788
alander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бэкапа небыло только для одной базы из 10, делаются они dbexport-ом. Оставили не закрытый коннекшн к базе и все... Отследить не смог. И что уж говорить, когда это далеко не основной сервер.. Все знать нельзя, иногда приходится опираться на логику при принятии решений, на мой взгляд откат не должен использовать логические журналы, увы это не так. Зато теперь знаю что нужно менять если вдруг запорятся логические журналы (операция по отчистке минут на 20)
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33510835
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все знать нельзя конечно. Удивительно почему вы меняете значения параметров о которых имеете отдаленное представление.

alander... Зато теперь знаю что нужно менять если вдруг запорятся логические журналы (операция по отчистке минут на 20)После чистки вам предстоит сделать массу открытий по инконсистентонсти в данных.
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33510879
alander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисПосле чистки вам предстоит сделать массу открытий по инконсистентонсти в данных.
Это понятно
...
Рейтинг: 0 / 0
Не запускается информикс после останова
    #33511988
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 лазить совершенно не надо. Все, что требовалось - поменять запись о чекпойнте на формат "без открытых транзакций" (это вы верно обнаружили) и обнулить остатки страницы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Не запускается информикс после останова
    #35275968
victor16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Давно хотел проверить вышеприведенный алгоритм, и вот вчера
полетела тестовая виндовая машина с 9.4 информиксом с данными
которые очень не хотелось восстанавливать вручную. Ситуация
усугубилась наличием включенных fuzzy chekpoints и полным
отсутствием всяческих бэкапов, которые к тому же направлялись в nul.
После выполнения команд oncheck -pr и onlog обнаружилось, что
после сбоя в файле логических журналов исчезла запись о последнем чекпоинте.
Поэтому схема действий была такова:
1. сначала был найден вообще последний чекпоинт, вернее его адрес.
2. этот адрес был прописан в зарезервированных страницах.
3. по вышеприведенному алгоритму "onzero" последний чекпоинт был изменен
на формат "без открытых транзакций".
При старте информикс очень сильно ругался, но в онлайн все-таки перешел,
что позволило сделать dbexport и спасти важные данные.

To Выбегалло: огромное спасибо за алгоритм:)

С уважением,
Виктор
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Не запускается информикс после останова
    #38188839
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
-------------------------------------------
С уважением,
Вадим.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Не запускается информикс после останова
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]