SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » Firebird, HQbird, InterBase » FB 3.0.7 повреждение БД
FB 3.0.7 повреждение БД [сообщение #3326] Tue, 10 October 2023 18:01 Переход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
Приветствую, коллеги!

Разбирал тут неприятный инцидент с повреждением БД.
Один из наших программистов ковырял метаданные, в частности создал табличку SKLAD_MAG_PAL_MEST,
потом происходит "нечто", в логах сервера нашел один сегфолт относящийся к файрберду примерно на указанный день,
чистоту в "железных" логах на предмет рэйда или ЕСС памяти.
В результате получили несогласованность в базе, есть запись в rdb$relations, но нет в RDB$RELATION_FIELDS

запрос
select RDB$RELATION_NAME from rdb$relations where RDB$RELATION_NAME = 'SKLAD_MAG_PAL_MEST'
отдает пустоту

запрос
select RDB$RELATION_NAME from rdb$relations where RDB$RELATION_NAME || '' = 'SKLAD_MAG_PAL_MEST' || ''
отдает 1 запись

Из видимых повреждений явно битый индекс как минимум на одной из системных табличек.

GBAK добросовестно создает gbk, а вот рестор уже обламывается.
Причем судя по вербозе создания gbk оно еще двадцать с лишим тысяч записей загоняет по этой табличке, т.е. gbak данных в проблемной табличке каким-то хитрым способом таки наковырял.
хотя "select * from SKLAD_MAG_PAL_MEST" шлет лесом.

gfix меня ни чем не порадовал и не уведомил. не умею пользоваться? может есть "хитрый" набор ключей?

Собственно пролечил сие безобразие велев gbak-у пропустить проблемную табличку "-SKIP_D SKLAD_MAG_PAL_MEST", потом врукопашную выкинул из gbk два упоминания таблички в секции метаданных, после чего оно разресторилось и проблема ушла.

Вопрос: Как избежать? скорее риторический. Да, я знаю, ковырять метаданные под нагрузкой в три сотни коннектов так себе занятие.

А вот вопрос:
Есть ли менее зубодробильный метод лечения, кроме как руками ковырять файл gbk в 185 гиг?
волне себе интересен.

Оригинальный gdb есть, но он гад 372 гиг и содержит кучу коммерческой инфы, разбором полетов я занялся когда прошло уже несколько дней после инцидента, никаких следов процессов файрберда не осталось.
Участники "врут как очевидцы", как мне кажется запустили апдейт метаданных в nowait транзакции, оно "зависло", взяли и грохнули процесс классика и тут "Остапа понесло".
Если есть версии как оно еще могло так покорежиться, было бы тоже интересно.
Могу ли я чем-то помочь разработчикам?
Re: FB 3.0.7 повреждение БД [сообщение #3327 является ответом на сообщение #3326] Tue, 10 October 2023 18:08 Переход к предыдущему сообщениюПереход к следующему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 294
Зарегистрирован: June 2022
Senior Member
При создании таблицы через запуск скрипта CREATE... похренилась бд?
Re: FB 3.0.7 повреждение БД [сообщение #3329 является ответом на сообщение #3327] Tue, 10 October 2023 18:14 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
Судя по тому, что гбак нашел нехилую охапку записей, одним крейт дело не ограничилось. Как-то же записи возникли.
Re: FB 3.0.7 повреждение БД [сообщение #3330 является ответом на сообщение #3326] Tue, 10 October 2023 18:34 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP писал(а) Tue, 10 October 2023 18:01
В результате получили несогласованность в базе, есть запись в rdb$relations, но нет в RDB$RELATION_FIELDS

запрос
select RDB$RELATION_NAME from rdb$relations where RDB$RELATION_NAME = 'SKLAD_MAG_PAL_MEST'
отдает пустоту

запрос
select RDB$RELATION_NAME from rdb$relations where RDB$RELATION_NAME || '' = 'SKLAD_MAG_PAL_MEST' || ''
отдает 1 запись

Из видимых повреждений явно битый индекс как минимум на одной из системных табличек.
На rdb$relations ? Индекс починили ?
Re: FB 3.0.7 повреждение БД [сообщение #3331 является ответом на сообщение #3326] Tue, 10 October 2023 18:36 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP писал(а) Tue, 10 October 2023 18:01
GBAK добросовестно создает gbk, а вот рестор уже обламывается.
Причем судя по вербозе создания gbk оно еще двадцать с лишим тысяч записей загоняет по этой табличке, т.е. gbak данных в проблемной табличке каким-то хитрым способом таки наковырял.
хотя "select * from SKLAD_MAG_PAL_MEST" шлет лесом.
Как именно обламывается рестор ?
Re: FB 3.0.7 повреждение БД [сообщение #3332 является ответом на сообщение #3331] Tue, 10 October 2023 19:10 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
На rdb$relations ? Индекс починили ?

"отрезанием головы" т.е. циклом Б/Р.
Есть какой-то путь починить системный индекс по-другому?

последняя фраза в вербозе рестора вот такая:
gbak:committing metadata

и оно просто больше ничего не говорит. Ресторить данные не пытается.
Re: FB 3.0.7 повреждение БД [сообщение #3333 является ответом на сообщение #3332] Tue, 10 October 2023 19:19 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP
На rdb$relations ? Индекс починили ?

"отрезанием головы" т.е. циклом Б/Р.
Есть какой-то путь починить системный индекс по-другому?
ALTER INDEX <name> ACTIVE

IP
последняя фраза в вербозе рестора вот такая:
gbak:committing metadata

и оно просто больше ничего не говорит. Ресторить данные не пытается.
Процессор или диск загружен ? Сколько ждали ?
Коммит метаданных может занять существенное время.

Если осталась "поломанная" БД, то можно для проверки сделать бекап только метаданных (-b -m) и попробовать его отресторить.
Re: FB 3.0.7 повреждение БД [сообщение #3348 является ответом на сообщение #3333] Wed, 11 October 2023 18:51 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
>ALTER INDEX <name> ACTIVE
У меня засело, что в тройке все доступы к системным таблицам подрезаны на корню, в принципе можно попробовать на копии.
Я попробую поиграться с активацией индексов, о результатах отпишусь.

>Процессор или диск загружен ? Сколько ждали ?
>Коммит метаданных может занять существенное время.
Оно просто завершает работу. Если база в неповрежденном состоянии пролетает это место без запинки.

>Если осталась "поломанная" БД, то можно для проверки сделать бекап только метаданных (-b -m) и попробовать его отресторить.
База осталась. С бэкапа только метаданных я и начинал(-b -g -m -v), пока методом "научного тыка" не отрезал "ненужные" упоминания о таблице рестор не шел.
Наличие данных в gbk файле не меняло точку останова рестора.

Судя по вербозе и ковырянии редактором в самом файле бэкапа в бэкап попало упоминание о таблице, но не попало упоминания ни об одном поле таблицы, "заголовок есть - полей нет".
Не должен бы gbak на этапе бэкапа ругнуться хотя бы варнингом на подобное безобразие?
СтОит идти с подобным фичреквестом в треккер?

Сильно помог бы ключик типа SKIP_META аналог SKIP_D, только чтоб он еще и создание указанных таблиц пропускал, а не только заполнение данными.

Re: FB 3.0.7 повреждение БД [сообщение #3383 является ответом на сообщение #3333] Thu, 12 October 2023 19:08 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
hvlad писал(а) Tue, 10 October 2023 19:19
IP
На rdb$relations ? Индекс починили ?

"отрезанием головы" т.е. циклом Б/Р.
Есть какой-то путь починить системный индекс по-другому?
ALTER INDEX <name> ACTIVE
Видимо неспроста у меня осталось в голове, что системные таблички подрезаны для ковыряния.

Облом:
типичная системная табличка

CREATE TABLE RDB$RELATIONS (
   RDB$VIEW_BLR              BLOB SUB_TYPE 2 SEGMENT SIZE 80,
   RDB$VIEW_SOURCE           BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UNICODE_FSS,
   RDB$DESCRIPTION           BLOB SUB_TYPE 1 SEGMENT SIZE 80 CHARACTER SET UNICODE_FSS,
   RDB$RELATION_ID           SMALLINT,
   RDB$SYSTEM_FLAG           SMALLINT,
   RDB$DBKEY_LENGTH          SMALLINT,
   RDB$FORMAT                SMALLINT,
   RDB$FIELD_ID              SMALLINT,
   RDB$RELATION_NAME         CHAR(31) CHARACTER SET UNICODE_FSS,
   RDB$SECURITY_CLASS        CHAR(31) CHARACTER SET UNICODE_FSS,
   RDB$EXTERNAL_FILE         VARCHAR(255) CHARACTER SET NONE,
   RDB$RUNTIME               BLOB SUB_TYPE 5 SEGMENT SIZE 80,
   RDB$EXTERNAL_DESCRIPTION  BLOB SUB_TYPE 8 SEGMENT SIZE 80,
   RDB$OWNER_NAME            CHAR(31) CHARACTER SET UNICODE_FSS,
   RDB$DEFAULT_CLASS         CHAR(31) CHARACTER SET UNICODE_FSS,
   RDB$FLAGS                 SMALLINT,
   RDB$RELATION_TYPE         SMALLINT
);



/*********************************************************** *******************/
/***                           Unique constraints                           ***/
/*********************************************************** *******************/

ALTER TABLE RDB$RELATIONS ADD CONSTRAINT RDB$INDEX_0 UNIQUE (RDB$RELATION_NAME);


/*********************************************************** *******************/
/***                                Indices                                 ***/
/*********************************************************** *******************/

CREATE INDEX RDB$INDEX_1 ON RDB$RELATIONS (RDB$RELATION_ID);


даю команду под SYSDBA
alter index rdb$index_0 active
или
alter index rdb$index_0 inactive

получаю ответ
This operation is not defined for system tables.
unsuccessful metadata update.
ALTER INDEX RDB$INDEX_0 failed.
no permission for ALTER access to TABLE RDB$RELATIONS.
------------------------------------------------------
SQLCODE: -607
SQLSTATE: 28000
GDSCODE: 335544351
Re: FB 3.0.7 повреждение БД [сообщение #3384 является ответом на сообщение #3383] Thu, 12 October 2023 20:59 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
Значит тебе - не судьба, а мне - склероз Sad
Re: FB 3.0.7 повреждение БД [сообщение #3386 является ответом на сообщение #3384] Fri, 13 October 2023 11:29 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
Ладно, хрен с ней, с судьбой.

Влад, как думаешь удастся выжать из ситуации что-то полезное?

Вот есть база после контузии, явно есть повреждения.
В транспортный формат загоняется без ошибок, рестор гарантированно обламывается.

Не должен бы gbak на этапе -b как-то ругнуться?
Не должен бы gfix как-то отдетектить проблему и сказать "индекс такой-то кирдык" или еще что-то там кирдык?

готов потестировать  или тикет оформить, если есть смысл.
Re: FB 3.0.7 повреждение БД [сообщение #3387 является ответом на сообщение #3386] Fri, 13 October 2023 11:42 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP писал(а) Fri, 13 October 2023 11:29
Ладно, хрен с ней, с судьбой.

Влад, как думаешь удастся выжать из ситуации что-то полезное?

Вот есть база после контузии, явно есть повреждения.
В транспортный формат загоняется без ошибок, рестор гарантированно обламывается.

Не должен бы gbak на этапе -b как-то ругнуться?
Не должен бы gfix как-то отдетектить проблему и сказать "индекс такой-то кирдык" или еще что-то там кирдык?

готов потестировать  или тикет оформить, если есть смысл.
gbak не может и не должен делать какие-то продвинутые проверки, это работа gfix.
Если там действительно битый системный индекс, то gfix должен был сказать об этом.

Как ты запускал gfix ?
Я понимаю, что проверить БД под 400ГБ не очень весёлое занятие, но проверить отдельно только системную таблицу
не получится. Онлайн валидация умеет отдельные таблицы, но не системные.
Re: FB 3.0.7 повреждение БД [сообщение #3391 является ответом на сообщение #3387] Fri, 13 October 2023 13:08 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
На днях погоняю gfix  в неторопливой обстановке, о результатах отпишусь. Допускаю, мог быть косяк в моих прошлых изысканиях. Smile

>gbak не может и не должен делать какие-то продвинутые проверки, это работа gfix.
gbak -b пишет данные о заголовке таблицы, потом он обязан записать данные как минимум об одной колонке таблицы, если ни одной колонки не обнаружилось, то чем не повод что-то написать в stderr?
Re: FB 3.0.7 повреждение БД [сообщение #3392 является ответом на сообщение #3391] Fri, 13 October 2023 13:12 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP
На днях погоняю gfix  в неторопливой обстановке, о результатах отпишусь. Допускаю, мог быть косяк в моих прошлых изысканиях. Smile
На всякий - gfix -v -full

IP
>gbak не может и не должен делать какие-то продвинутые проверки, это работа gfix.
gbak -b пишет данные о заголовке таблицы, потом он обязан записать данные как минимум об одной колонке таблицы, если ни одной колонки не обнаружилось, то чем не повод что-то написать в stderr?
А ты уверен, что там именно таблица без полей ?
Я не вижу в твоих запросах поиск полей.
Ну а список таблиц gbak читает натуралом, насколько я помню, так что битый индекс ему в этом не помеха.
Re: FB 3.0.7 повреждение БД [сообщение #3421 является ответом на сообщение #3386] Mon, 16 October 2023 15:40 Переход к предыдущему сообщениюПереход к следующему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 91
Зарегистрирован: June 2022
Member
IP писал(а) Fri, 13 October 2023 11:29

Не должен бы gbak на этапе -b как-то ругнуться?
Не должен бы gfix как-то отдетектить проблему и сказать "индекс такой-то кирдык" или еще что-то там кирдык?
готов потестировать  или тикет оформить, если есть смысл.
гбак только читает данные, он ничего не проверяет. Раз данные читаются, значит всё ок. Не читаются - сообщает о проблеме.
gfix пишет подробности в firebird.log. см. туда.

p.s. "молния" может ударить в любую часть базы. Поэтому повредиться может что угодно - сист. таблицы, данные, индексы, и т.д.
Поэтому надо регулярно делать бэкапы, и nbackup тоже, а еще лучше - онлайн асинхронная репликация.
Чинить базы такого размера смысла мало - дорого и долго.
Re: FB 3.0.7 повреждение БД [сообщение #3423 является ответом на сообщение #3392] Tue, 17 October 2023 15:27 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
hvlad писал(а) Fri, 13 October 2023 13:12
На всякий - gfix -v -full
Спасибо. Пока только "расчистил поляну" и слил туда искомые 4 сотни гиг. Результата пока нет.

hvlad писал(а) Fri, 13 October 2023 13:12

А ты уверен, что там именно таблица без полей ?
Я не вижу в твоих запросах поиск полей.
Ну а список таблиц gbak читает натуралом, насколько я помню, так что битый индекс ему в этом не помеха.
Да, в вербозе и в гбк файле именно таблица без полей.
Запросы найду истории.
Натурал, да. Вот как он (gbak) достал данные, для меня пока загадка.
Re: FB 3.0.7 повреждение БД [сообщение #3424 является ответом на сообщение #3423] Tue, 17 October 2023 16:01 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время не в онлайне  shavluk
Сообщений: 67
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
Глупая мысль. А что если добавить в эту пустую таблицу поле, а потом уже удалить как непустую?
Re: FB 3.0.7 повреждение БД [сообщение #3425 является ответом на сообщение #3421] Tue, 17 October 2023 16:15 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
kdv писал(а) Mon, 16 October 2023 15:40
IP писал(а) Fri, 13 October 2023 11:29

Не должен бы gbak на этапе -b как-то ругнуться?
Не должен бы gfix как-то отдетектить проблему и сказать "индекс такой-то кирдык" или еще что-то там кирдык?
готов потестировать  или тикет оформить, если есть смысл.
гбак только читает данные, он ничего не проверяет. Раз данные читаются, значит всё ок. Не читаются - сообщает о проблеме.
gfix пишет подробности в firebird.log. см. туда.
гбак читает заголовок таблицы, ОК. пишет об этом в вербоза файл. Дальше обязан идти список полей, а его нет. Ну хоть бы варнинг какой...
Логи еще раз прогоню и проверю.

kdv писал(а) Mon, 16 October 2023 15:40
p.s. "молния" может ударить в любую часть базы. Поэтому повредиться может что угодно - сист. таблицы, данные, индексы, и т.д.
Поэтому надо регулярно делать бэкапы, и nbackup тоже, а еще лучше - онлайн асинхронная репликация.
Чинить базы такого размера смысла мало - дорого и долго.
Никто и не говорит, что молнию надо отменить указом верховного генералиссимуса. Smile
Да, был настроен револьверный бэкап через скрипты gbak + ротация.
Да, был лог репликатора и его можно было накатить.
Но к тому моменту как я вышел из отпуска ситуация уже была запущена, логи просто так не накатывались, т.к. насочиняли еще метаданных, и накат занимал дохрена времени.
Да первое, что сделал, это заскриптовал nbakup и запихнул в крон. Да только база после нбэкапа ровно та же постраничная копия исходной поврежденной, а нбэкапной копии "до того" не было.

Пока еще "чешем репу"  на предмет регламента в подобном случае. в принципе есть пара железяк, на которые гоним реплики,
но они для формирования длинных отчетов и всякой аналитической фигни, базы там немного отличаются, и как выяснилось, просто так их местами не поменять.
В угоду скорости часть данных не нужных для аналитики не попадает в репликацию.
Пока мысли в сторону: выровнять базы, до состояния пригодного для переключения, подрихтовать блок подключения у клиента, чтоб он не "сошел с ума", от потери "главного сервера", а аккуратно подключился к резервной ноде и т.д. и т.п.
Надо изначально делать фаиловер, но как всегда, срочно всякие кнопочки-отчеты-сверки, а серьезных отказов несколько лет на было, вот и расслабились. Smile

Пока пролечили базу, выписали парочку более скоростных u2 ssd-шек, подрезали от ставших ненужными данных, чтоб время на регламент требовалось меньше. Поставили в план "думы о кластере".
Re: FB 3.0.7 повреждение БД [сообщение #3426 является ответом на сообщение #3424] Tue, 17 October 2023 16:21 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
shavluk писал(а) Tue, 17 October 2023 16:01
Глупая мысль. А что если добавить в эту пустую таблицу поле, а потом уже удалить как непустую?
Запросы к проблемной таблице отскакивали на препарировании. Пробовали и создавать новую под тем же именем. Попробую после гфикса, может и получится чего.
Re: FB 3.0.7 повреждение БД [сообщение #3427 является ответом на сообщение #3426] Wed, 18 October 2023 01:19 Переход к предыдущему сообщениюПереход к следующему сообщению
SD в настоящее время не в онлайне  SD
Сообщений: 345
Зарегистрирован: August 2022
Senior Member
Хммм... "Мы не можем ждать сутки пока пройдёт нормальное восстановление, поэтому неделю будем маяться проктостоматологией." Греф одобряет.
Re: FB 3.0.7 повреждение БД [сообщение #3428 является ответом на сообщение #3427] Wed, 18 October 2023 13:19 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
SD писал(а) Wed, 18 October 2023 01:19
Хммм... "Мы не можем ждать сутки пока пройдёт нормальное восстановление, поэтому неделю будем маяться проктостоматологией." Греф одобряет.
Нормальное восстановление уже не шло задуманным путем, слишком поздно кинулись. Над тем чтобы "кинуться вовремя" сейчас и думаем.
Вариантов было несколько:
1. Брать валидный бэкап и на него накатить лог репликатора, оказалось, что в логе не все и лог уже гигантского размера, да еще и не накатывается штатно. Как всегда, к моменту тушения пожара штатный огнетушитель оказался неработоспособен, выше Диме я это расписал.
2. Взять валидную базу болванку и на нее накатить данные тем же экспертом/скриптом/переливкой через клиента. ОЧЕНЬ долго, точно не сутки, после суток молотильни база хорошо, если на четверть сформировалась. Да, экспертовкая переливалка тупо сыпалась с "аут оф мемери" и кирдык минут через 15 после начала работы.
3. Лечить то, что есть.

По факту уже сходили путем номер 3, он оказался быстрее чем 2. А мысли о том, чтобы работал номер 1. Для этого надо и программные средства и организационные. Надо как-то пораньше диагностировать проблему, надо уметь штатно переключиться на резерв и не про%#%ть последние актуальные данные.

Вот ради диагностики и пристаю к Владу. Smile
А если бы еще чем-то штатным пролечить... но это уж совсем мечты. Rolling Eyes
Re: FB 3.0.7 повреждение БД [сообщение #3429 является ответом на сообщение #3428] Wed, 18 October 2023 16:35 Переход к предыдущему сообщениюПереход к следующему сообщению
Старый Плюшев в настоящее время не в онлайне  Старый Плюшев
Сообщений: 95
Зарегистрирован: August 2022
Географическое положение: Ленинград
Member
IP писал(а) Wed, 18 October 2023 13:19

2. Взять валидную базу болванку и на нее накатить данные тем же экспертом/скриптом/переливкой через клиента. ОЧЕНЬ долго, точно не сутки, после суток молотильни база хорошо, если на четверть сформировалась.
Индексы на приёмнике отключали? Если лить с неактивными, а потом активизировать, получается гораздо быстрее.
Re: FB 3.0.7 повреждение БД [сообщение #3474 является ответом на сообщение #3429] Sun, 22 October 2023 13:20 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
Старый Плюшев писал(а) Wed, 18 October 2023 16:35
IP писал(а) Wed, 18 October 2023 13:19

2. Взять валидную базу болванку и на нее накатить данные тем же экспертом/скриптом/переливкой через клиента. ОЧЕНЬ долго, точно не сутки, после суток молотильни база хорошо, если на четверть сформировалась.
Индексы на приёмнике отключали? Если лить с неактивными, а потом активизировать, получается гораздо быстрее.
Нет. Если бы приперло, то да, попробовали бы и так и эдак. Вообще основной мыслью было набросать свой заливальщик в дюжину-другую тредов, чтоб лили в параллель. Пока забросил это дело.
Re: FB 3.0.7 повреждение БД [сообщение #3475 является ответом на сообщение #3392] Sun, 22 October 2023 13:36 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
hvlad писал(а) Fri, 13 October 2023 13:12
IP
На днях погоняю gfix  в неторопливой обстановке, о результатах отпишусь. Допускаю, мог быть косяк в моих прошлых изысканиях. Smile
На всякий - gfix -v -full

IP
>gbak не может и не должен делать какие-то продвинутые проверки, это работа gfix.
gbak -b пишет данные о заголовке таблицы, потом он обязан записать данные как минимум об одной колонке таблицы, если ни одной колонки не обнаружилось, то чем не повод что-то написать в stderr?
А ты уверен, что там именно таблица без полей ?
Я не вижу в твоих запросах поиск полей.
Ну а список таблиц gbak читает натуралом, насколько я помню, так что битый индекс ему в этом не помеха.
Таки да, правда Ваша, с -full  рапортует об ошибках

/opt/firebird/bin/gfix /ibdata/Orskl.gdb -v -full
Summary of validation errors
Number of index page errors : 2
Number of pointer page warnings : 1

в логе дословно следующее:
Rodion<>Sun Oct 22 09:44:53 2023
<------>Database: /ibdata/Orskl.gdb
<------>Validation started


Rodion<>Sun Oct 22 09:45:00 2023
<------>Database: /ibdata/Orskl.gdb
<------>Warning: Pointer page 16 {sequence 0} bits {0x04 swept} are not consistent with data page 651 {sequence 19} state {0x00 } in table RDB$RELATIONS (6)


Rodion<>Sun Oct 22 09:45:00 2023
<------>Database: /ibdata/Orskl.gdb
<------>Error: Index 1 is corrupt {missing entries for record 18357} in table RDB$RELATIONS (6)


Rodion<>Sun Oct 22 09:45:00 2023
<------>Database: /ibdata/Orskl.gdb
<------>Error: Index 2 is corrupt {missing entries for record 18357} in table RDB$RELATIONS (6)


Rodion<>Sun Oct 22 10:10:10 2023
<------>Database: /ibdata/Orskl.gdb
<------>Validation finished: 2 errors, 1 warnings, 1 fixed

Потом пробовал применить -mend
[root@Rodion bin]# /opt/firebird/bin/gfix /ibdata/Orskl.gdb -mend
Summary of validation errors
Number of index page errors : 2

его часть лога:
Rodion<>Sun Oct 22 10:47:37 2023
<------>Database: /ibdata/Orskl.gdb
<------>Validation started


Rodion<>Sun Oct 22 10:47:39 2023
<------>Database: /ibdata/Orskl.gdb
<------>Error: Index 1 is corrupt {missing entries for record 18357} in table RDB$RELATIONS (6)


Rodion<>Sun Oct 22 10:47:39 2023
<------>Database: /ibdata/Orskl.gdb
<------>Error: Index 2 is corrupt {missing entries for record 18357} in table RDB$RELATIONS (6)


Rodion<>Sun Oct 22 11:06:25 2023
<------>Database: /ibdata/Orskl.gdb
<------>Validation finished: 2 errors, 0 warnings, 0 fixed

Вот только гбак от этого лучше работать ни разу не стал, вербоза ниже, поскипал неинтересное, делал только -m метаданные:
gbak:readied database /ibdata/Orskl.gdb for backup
gbak:creating file /ibdata/Orskl-10.gbk
gbak:starting transaction
gbak:database /ibdata/Orskl.gdb has a page size of 16384 bytes.
gbak:writing domains
--skip--
gbak:    writing table SPAG_CENNIK
gbak:         writing column MAG_ID
gbak:         writing column SPAG
gbak:         writing column TIMEP
gbak:         writing column KODM
gbak:         writing column LOGIN
gbak:    writing table SKLAD_MAG_PAL_MEST
gbak:    writing table OBRT_SPAG_HOZ
gbak:         writing column SPAG
gbak:         writing column TIMEP
gbak:         writing column PR_NDS
gbak:         writing column LOGIN
--skip--
gbak:writing referential constraints
gbak:writing check constraints
gbak:writing SQL roles
gbak:writing names mapping
gbak:closing file, committing, and finishing. 54753280 bytes written

В конце бодренькая концовка.
В самом gbk суть тоже, только менее читаемое. Таблица есть, полей нет.

gfix говорит только про побитый индекс, про контуженную табличку ни полслова.
Re: FB 3.0.7 повреждение БД [сообщение #3476 является ответом на сообщение #3475] Sun, 22 October 2023 14:29 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
IP
Таки да, правда Ваша, с -full рапортует об ошибках
Показать скрытый текст
Вот только гбак от этого лучше работать ни разу не стал
...
gfix говорит только про побитый индекс, про контуженную табличку ни полслова.
Итого - битые индексы на RDB$RELATIONS, т.е. при чтении этой таблицы с использованием битого индекса некоторые
записи будут пропущены.
Это объясняет "таблицу без полей" и без данных - запись о самой таблице есть т.к. RDB$RELATIONS читалась натуралом,
а вот более сложные запросы её уже не видят.
Далее, missing entries gfix не чинит, и честно об этом сообщает (0 fixed), поэтому ожидать от него чудес не стоило.

Почему это произошло: не могу сказать с уверенностью, возможно кто-то пытался таблицу дропнуть и обломался - откат DDL
внутри у движка не на 100% надёжен, там могут быть проблемы. Если кто-то воспроизведёт - сможем починить.

Что можно сделать с нашей стороны: придумать лазейку для безопасной перестройки индексов системных таблиц,
научить gfix (валидацию) восстанавливать missing entries, добавить в gbak проверку наличия полей в таблице.

PS 3.0.7 давно пора обновить
Re: FB 3.0.7 повреждение БД [сообщение #3478 является ответом на сообщение #3476] Mon, 23 October 2023 11:08 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
hvlad писал(а) Sun, 22 October 2023 14:29
Почему это произошло: не могу сказать с уверенностью, возможно кто-то пытался таблицу дропнуть и обломался - откат DDL
внутри у движка не на 100% надёжен, там могут быть проблемы. Если кто-то воспроизведёт - сможем починить.

Что можно сделать с нашей стороны: придумать лазейку для безопасной перестройки индексов системных таблиц,
научить gfix (валидацию) восстанавливать missing entries, добавить в gbak проверку наличия полей в таблице.

PS 3.0.7 давно пора обновить
Я тоже склоняюсь к тому, что пытались дропнуть ПК или ФК. Разные коннекты закешировали метаданые на разных этапах, потом автор попытался откатить часть своего творения и привет. Как гарантированно воспроизвести пока не знаю.

Может в каком-нибудь определенном режиме шатдауна разрешить слегка "потрогать за интересные места" системные таблички? Как вариант...
Уже есть оказавшийся полезным ключик -SKIP_D для gbak, может его аналог, выше я рассуждал про это.

Про обновление знаю, но в районе 3.0.9-3.0.10 и 4.0.0 напоролся на регресс, на одном из запросов оптимизатор стал "сходить с ума", как назло им "пропитан весь клиент", конструируемый динамически запрос поиска товарной позиции по куче параметров.
Надо протестировать 3.0.11 и 4.0.2 и либо перейти, либо писать тесткейз трекеру.
Re: FB 3.0.7 повреждение БД [сообщение #3488 является ответом на сообщение #3478] Mon, 23 October 2023 18:02 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 105
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
С кочки зрения банальной логики, для перестроения повреждённого индекса достаточно разрешить alter index ИМЯ active и для индексов системных объектов.
Возможно (не факт), что был бы полезен второй комплект запросов к системным таблицам, для которого будет выключено использование индексов.
Re: FB 3.0.7 повреждение БД [сообщение #3494 является ответом на сообщение #3488] Tue, 24 October 2023 13:04 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
basid писал(а) Mon, 23 October 2023 18:02
С кочки зрения банальной логики, для перестроения повреждённого индекса достаточно разрешить alter index ИМЯ active и для индексов системных объектов.
+8!
голосую ЗА.
Re: FB 3.0.7 повреждение БД [сообщение #3500 является ответом на сообщение #3494] Tue, 24 October 2023 13:39 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время не в онлайне  hvlad
Сообщений: 314
Зарегистрирован: August 2022
Senior Member
МП писал(а) Tue, 24 October 2023 13:04
basid писал(а) Mon, 23 October 2023 18:02
С кочки зрения банальной логики, для перестроения повреждённого индекса достаточно разрешить alter index ИМЯ active и для индексов системных объектов.
+8!
голосую ЗА.
Голосуйте в трекере, не тут
Re: FB 3.0.7 повреждение БД [сообщение #3501 является ответом на сообщение #3500] Tue, 24 October 2023 13:47 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
hvlad
. Голосуйте в трекере, не тут
сперва тут.
а то вдруг пошлёшь лесом.
а тут не страшно.
леса нет.
Re: FB 3.0.7 повреждение БД [сообщение #3536 является ответом на сообщение #3488] Thu, 26 October 2023 12:10 Переход к предыдущему сообщениюПереход к следующему сообщению
IP в настоящее время не в онлайне  IP
Сообщений: 25
Зарегистрирован: January 2023
Junior Member
basid писал(а) Mon, 23 October 2023 18:02
С кочки зрения банальной логики, для перестроения повреждённого индекса достаточно разрешить alter index ИМЯ active и для индексов системных объектов.
А будет ли этого достаточно для получения ресторабельного gbk? А не прибьет ли это базу окончательно? А то наголосуем на свою голову. Shocked
Re: FB 3.0.7 повреждение БД [сообщение #3575 является ответом на сообщение #3536] Sat, 28 October 2023 16:30 Переход к предыдущему сообщению
kdv в настоящее время не в онлайне  kdv
Сообщений: 91
Зарегистрирован: June 2022
Member
индекс это индекс, ничего более.
Предыдущая тема: Быстродействие UDR
Следующая тема: Миграция 2.5.9 -> 3.0.11
Переход к форуму:
  


Текущее время: Sun Apr 28 18:55:50 GMT+3 2024

Общее время, затраченное на создание страницы: 0.01139 секунд