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

Начало » Использование СУБД » Firebird, HQbird, InterBase » Проверялка базы
Проверялка базы [сообщение #5480] Tue, 24 September 2024 17:21 Переход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 72
Зарегистрирован: July 2022
Member
Приветствую знатоков и разработчиков!

WI-V3.0.8.33535 Firebird 3.0 (Windows/Intel/i386), ODS 12.0

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

Попробовал isc_action_svc_validate. Но! Она выдает большой объем текстовой информации, а мне нужен ответ - Да или Нет. Как понимаю - решение в анализе выводимой информации, поиска слов типа "ERROR" или что-то в этом роде.

Вопрос: на какие слова завязаться?

И, как пример, вот у меня эта проверялка выдает:

16:32:42.46 Warning: Pointer page 807 {sequence 0} bits {0x05 full, swept} are not consistent with data page 6869 {sequence 373} state {0x01 full} 
Вроде-бы безобидно, но на клиенте это превращается в невозможность прочитать блоб:

Error Message:
----------------------------------------
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
BLOB not found.
-------------------------------------------------------------------------------------------------------------------
SQLCODE: -901
SQLSTATE: HY000
GDSCODE: 335544382
Re: Проверялка базы [сообщение #5493 является ответом на сообщение #5480] Wed, 25 September 2024 12:30 Переход к предыдущему сообщениюПереход к следующему сообщению
sashaua01 в настоящее время не в онлайне  sashaua01
Сообщений: 26
Зарегистрирован: July 2022
Junior Member
может не совсем то что Вам надо. У нас есть такой велосипед.
Микросервис на пайтоне + фласк который имеет ендпоинт /heath , внутри этот ендпоин делает простой селект в базе (select max(id) from customers) и если все ок возвращает код 200, эсли что-то пошло не так возвращает код 500.
В системе мониторинга есть синтетический тест https://dba.vltava.local/heath и если ответ  <> 200 будет аларм.
Примитивный тест жива база или нет.   

[Обновления: Wed, 25 September 2024 12:31]

Известить модератора

Re: Проверялка базы [сообщение #5494 является ответом на сообщение #5493] Wed, 25 September 2024 12:58 Переход к предыдущему сообщениюПереход к следующему сообщению
sg729 в настоящее время не в онлайне  sg729
Сообщений: 52
Зарегистрирован: June 2022
Member
gfix -v -full database.fdb  не устраивает?
Re: Проверялка базы [сообщение #5496 является ответом на сообщение #5480] Wed, 25 September 2024 13:51 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 351
Зарегистрирован: August 2022
Senior Member
ggreggory писал(а) Tue, 24 September 2024 17:21

И, как пример, вот у меня эта проверялка выдает:

16:32:42.46 Warning: Pointer page 807 {sequence 0} bits {0x05 full, swept} are not consistent with data page 6869 {sequence 373} state {0x01 full} 
Вроде-бы безобидно, но на клиенте это превращается в невозможность прочитать блоб:

Error Message:
----------------------------------------
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
BLOB not found.
-------------------------------------------------------------------------------------------------------------------
Абсолютно высосанный из пальца вывод о связи одного с другим.


PS 3.0.8 ? Серьёзно ?
Re: Проверялка базы [сообщение #5498 является ответом на сообщение #5493] Wed, 25 September 2024 16:24 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 72
Зарегистрирован: July 2022
Member
sashaua01 писал(а) Wed, 25 September 2024 12:30
может не совсем то что Вам надо. У нас есть такой велосипед.
Микросервис на пайтоне + фласк который имеет ендпоинт /heath , внутри этот ендпоин делает простой селект в базе (select max(id) from customers) и если все ок возвращает код 200, эсли что-то пошло не так возвращает код 500.
В системе мониторинга есть синтетический тест https://dba.vltava.local/heath и если ответ  <> 200 будет аларм.
Примитивный тест жива база или нет.   
Конкретно на примере этой базы "select max(id) from table" работает, а "select max(octet_length(blob_field)) from table" уже нет. Вот поэтому и ищу более продвинутый вариант.

sg729 писал(а) Wed, 25 September 2024 12:58
gfix -v -full database.fdb  не устраивает?
Хотелось бы без монопольного доступа.
Re: Проверялка базы [сообщение #5499 является ответом на сообщение #5496] Wed, 25 September 2024 17:00 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 72
Зарегистрирован: July 2022
Member
hvlad писал(а) Wed, 25 September 2024 13:51
Абсолютно высосанный из пальца вывод о связи одного с другим.
Хорошо. Но все-таки, на какие слова завязаться?

hvlad писал(а) Wed, 25 September 2024 13:51

PS 3.0.8 ? Серьёзно ?
По работе 3.0.8 вроде как все устраивает. Все порчи баз связываем с отключением электричества или баловством с кнопкой Power юзерами. К сожалению, замена сервера для нас крайне крайне затратная и длительная процедура.

Re: Проверялка базы [сообщение #5500 является ответом на сообщение #5499] Wed, 25 September 2024 17:44 Переход к предыдущему сообщениюПереход к следующему сообщению
hvlad в настоящее время в онлайне  hvlad
Сообщений: 351
Зарегистрирован: August 2022
Senior Member
ggreggory
Но все-таки, на какие слова завязаться?
Если речь об онлайн-валидации, то можно искать "Error:"

ggreggory
По работе 3.0.8 вроде как все устраивает. Все порчи баз связываем с отключением электричества или баловством с кнопкой Power юзерами. К сожалению, замена сервера для нас крайне крайне затратная и длительная процедура.
Апгрейд минорной версии сервера FB делается за 1 мин простоя, было бы желание:
Re: Проверялка базы [сообщение #5501 является ответом на сообщение #5500] Thu, 26 September 2024 12:01 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 72
Зарегистрирован: July 2022
Member
hvlad писал(а) Wed, 25 September 2024 17:44
ggreggory
Но все-таки, на какие слова завязаться?
Если речь об онлайн-валидации, то можно искать "Error:"
Ок, спасибо!

hvlad писал(а) Wed, 25 September 2024 17:44
ggreggory
По работе 3.0.8 вроде как все устраивает. Все порчи баз связываем с отключением электричества или баловством с кнопкой Power юзерами. К сожалению, замена сервера для нас крайне крайне затратная и длительная процедура.
Апгрейд минорной версии сервера FB делается за 1 мин простоя, было бы желание:
Ок, подумаем над этим!
Re: Проверялка базы [сообщение #5502 является ответом на сообщение #5501] Thu, 26 September 2024 14:35 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 877
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
раньше вродь gfix отдавал errorlevel на выходе.
вряд ли что-то в этом плане менялось.
Re: Проверялка базы [сообщение #5503 является ответом на сообщение #5502] Thu, 26 September 2024 20:52 Переход к предыдущему сообщениюПереход к следующему сообщению
ggreggory в настоящее время не в онлайне  ggreggory
Сообщений: 72
Зарегистрирован: July 2022
Member
Возникли вопросы. Допустим есть база, резервная копия которой с помощью GBAK корректно сохраняется (без ошибок).

Могут ли в этой базе данных при этом оставаться ошибки, которые GBAK не замечает (не выдает ошибки)? Ну, например, испорченные индексы.

И если да, могут, то другой вопрос: может ли онлайн-валидация часть из этих ошибок найти?
Re: Проверялка базы [сообщение #5504 является ответом на сообщение #5503] Fri, 27 September 2024 00:30 Переход к предыдущему сообщениюПереход к следующему сообщению
shavluk в настоящее время в онлайне  shavluk
Сообщений: 80
Зарегистрирован: June 2022
Географическое положение: Одеса
Member
GBAK не обнаружит нарушение уникальности индекса, и при восстановлении будет ошибка
Re: Проверялка базы [сообщение #5505 является ответом на сообщение #5504] Fri, 27 September 2024 07:54 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 150
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
Не пытайтесь решать нерешаемое.

gbak:ERROR: Error while parsing procedure ...
gbak:ERROR: action cancelled by trigger ...
gbak:ERROR: attempt to store duplicate value ...
Это всё ошибки восстановления из успешно сделанного бэкапа базы.
Первая строчка - некорректная правка метаданных. Может возникнуть для PSQL-кода, который уже давно и никем не используется. В исходной базе - плевать, но восстановиться из бэкапа - невозможно.
Вторая строчка - не хватило места для временных файлов на этапе активации индексов. Вообще ничего не говорит о "здоровье" исходной базы.
Третье - дубли в первичном/уникальном индексе, которые надо отдельно искать. А потом - решать, что делать с найденным.
Дубли, в общем и целом, могут и не влиять на работу приложения. Но возможны ньюансы.
А ещё есть всякие "приколы" с повреждениями отдельных записей/блобов.
Или, например разная видимость "по индексу" и "натуралом". Причём в обоих вариантах расхождения.

database file appears corrupt ...
internal Firebird consistency check ...
Это уже разновсяческие варианты физических повреждений, включая разную экзотику, которую сложно обнаружить "в дикой природе".
А ещё есть предупреждения, которые сами по себе некритичны, но которые указывают на какие-то другие проблемы.

Приведённое для примера, надо сказать, далеко не всё, с чем можно столкнуться.
А ещё есть уже исправленные ошибки "всякой древности" вроде "вашей" 3.0.8.

И вот вы, такой д'Артаньян, собираетесь решать - повреждена ли ваша база. Оперативно и онлайн.
Если СУБД Firebird работает с файлом базы, то база, в целом, исправна. Но могут быть не в порядке данные в этой вашей базе.

Хотите уверенности в завтрашнем дне?
Регулярно проверяйте метаданные - быстро и страхует от некоторых сюрпризов.
Регулярно проверяйте восстановимость бэкапов.
Регулярно (но реже) проверяйте физическую целостность на копии файла базы.
Две последние проверки не заменяют одна другую - они про разное.

P.S.
Совсем забыл - не забывайте "почитывать" firebird.log и системные журналы Smile

[Обновления: Fri, 27 September 2024 08:00]

Известить модератора

Re: Проверялка базы [сообщение #5506 является ответом на сообщение #5505] Fri, 27 September 2024 09:49 Переход к предыдущему сообщениюПереход к следующему сообщению
sg729 в настоящее время не в онлайне  sg729
Сообщений: 52
Зарегистрирован: June 2022
Member
Чуть подробнее, пожалуйста...

basid писал(а) Fri, 27 September 2024 07:54

Регулярно проверяйте метаданные - быстро и страхует от некоторых сюрпризов.
Как? Каким инструментом?

basid писал(а) Fri, 27 September 2024 07:54

Регулярно (но реже) проверяйте физическую целостность на копии файла базы.
Как? Каким инструментом?
Re: Проверялка базы [сообщение #5507 является ответом на сообщение #5506] Fri, 27 September 2024 15:41 Переход к предыдущему сообщениюПереход к следующему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 150
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member

  1. gbak -se ... -m -b -g источник stdout | gbak ... -m -c stdin приёмник
  2. gfix -v ... копия
Как создавать корректную файловую копию базы рассказывать?
Re: Проверялка базы [сообщение #5508 является ответом на сообщение #5507] Fri, 27 September 2024 15:49 Переход к предыдущему сообщениюПереход к следующему сообщению
sg729 в настоящее время не в онлайне  sg729
Сообщений: 52
Зарегистрирован: June 2022
Member
basid писал(а) Fri, 27 September 2024 15:41



  1. gbak -se ... -m -b -g источник stdout | gbak ... -m -c stdin приёмник
  2. gfix -v ... копия
Понятно, спасибо!

basid писал(а) Fri, 27 September 2024 15:41

Как создавать корректную файловую копию базы рассказывать?
Нет -)

Re: Проверялка базы [сообщение #5515 является ответом на сообщение #5507] Mon, 30 September 2024 07:23 Переход к предыдущему сообщениюПереход к следующему сообщению
fraks в настоящее время не в онлайне  fraks
Сообщений: 132
Зарегистрирован: June 2022
Географическое положение: Новосибирск
Senior Member
basid писал(а) Fri, 27 September 2024 19:41


  1. gbak -se ... -m -b -g источник stdout | gbak ... -m -c stdin приёмник
  2. gfix -v ... копия
Как-то это похоже на "Вредные советы" Остера.

п.1 - это бэкап и рестор базы, без сохранения файла бэкапа.
Во-первых, рестор - это длительная ресурсоемкая операция, на рабочих базах может занимать часы а то и сутки, рекомендовать такое как панацею...
Во-вторых, в данном примере не вижу что бы кто-то ловил вывод в котором могут быть сообщения об ошибках.
В-третьих, смысл проверять свежетресторенную базу заметно меньше чем ту что работает, и части ошибок в отресторенной может и не быть, а возможно что база которая смогла отресториться, пройдет тест без ошибок. Тут я не уверен, но как минимум про такой вариант нужно подумать.
В четвертых. Если рестор не прошел то это не значит что восстановить ничего нельзя. Но при передаче через пайп промежуточного файла не остается, и повторно ресторить неоткуда. А делать опять бэкап, как тут показано - может не получиться, по причине того что база при очередной попытке может быть уже нечитабельной, если к примеру диск посыпался.

Ну и по проверке.
Бэкап должен быть. Точка. Свежий. И если подходить к проверке базы вышеупомянутым образом, т.е. gfix -v по отресторенной базе, нужно взять последний из сделанных и сохраненных бэкапов, с него отресториться и проверяться, а не разносить эти две операции по разным кустам. Легко может выйти что проверку таким образом прошли, но в результате ничего не сохранили, или сохранили отресторенную базу. В принципе, бэкапиться таким образорм тоже можно, и даже есть некоторые плюсы, но может быть крайне накладно по ресурсам. Процессор, ввод-вывод, место на диске.

P.S.
Че-то я несколько прогнал, не обратил внимания на ключик -m.
Извиняюсь.

[Обновления: Mon, 30 September 2024 07:28]

Известить модератора

Re: Проверялка базы [сообщение #5516 является ответом на сообщение #5515] Mon, 30 September 2024 09:55 Переход к предыдущему сообщению
basid в настоящее время не в онлайне  basid
Сообщений: 150
Зарегистрирован: June 2022
Географическое положение: Asia/Irkutsk
Senior Member
Также обращаю внимание, что gfix -v работает (должен работать) на файловой копии исходной базы, а не на базе, восстановленной из бэкапа.
И, да: восстановление базы из бэкапа - процесс длительный. Но бэкап, не проверенный на восстановимость - полезен крайне условно: очень плохо, когда неизвестно ни сколько времени потребует восстановление из такого бэкапа, ни сколько ресурсов для этого понадобится.

P.S.
Если "нет лишнего" на "рабочем сервере", то, немного поднапрягшись, можно сделать отдельный бэкап сервер, где никого не будет напрягать ни время восстановление, ни количество одновременно восстанавливаемых баз. Когда бэкапы делаются раз в сутки, а восстанавливаются - дольше суток.
Предыдущая тема: Missing security context required
Следующая тема: Buffers
Переход к форуму:
  


Текущее время: Tue Oct 22 20:55:15 GMT+3 2024

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