powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Методы исследования записей в БД
6 сообщений из 6, страница 1 из 1
Методы исследования записей в БД
    #38815627
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех.

Столкнулся с такой проблемой. Сервер FB 2.5.3 Classic 64bit на Linux; на нём крутится ряд баз. Число одновременных коннектов около 100; интенсивность записи в базы невысокая; общий объём баз порядка 40Мб. Сегодня по одной из баз появилась непонятная проблема - исчезло порядка 50 записей в одной из таблиц. Восстановление из утреннего бэкапа с перезабивкой сегодняшних данных решило вопрос. Однако мне непонятно, что могло послужить причиной проблемы: клиент у этой базы единственный, и он работает через мою софтину. Клиент божится, что ничего лишнего не нажимал, и у меня нет оснований ему не доверять - это человек аккуратный и осторожный. Логирование действий пользователя я не предусматривал.

Предварительно, перед восстановлением из бэкапа, я сделал свежий бэкап и заодно скопировал сам fdb-файл объёмом чуть больше 2Мб. Есть ли какой-то инструментарий и дока для низкоуровневого ковыряния этого файла? Я хотел бы посмотреть, если это возможно, какая транзакция и какой запрос могли похерить эти данные, чтобы определиться с причиной - глюк сервера, клиентского ПО или юзера.
...
Рейтинг: 0 / 0
Методы исследования записей в БД
    #38815780
SergiyCher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любезный,

1) Верить словам юзверей - ошибочный путь.
2) Записи из таблиц может удалить системный админ баз, например случайно.
3) Логировать действия - нужно обязательно, или хотя бы SQL команды которые шлют серваку.

тулза есть - IBSurgeon, но она платная.

Удачи
...
Рейтинг: 0 / 0
Методы исследования записей в БД
    #38815847
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезный,

Постулат номер ноль при разработке практически любой базы данных - первичные данные не удаляются никогда. Если надо, заводится поле типа deleted или status в нем при удалении выставляется соответствующий флаг; соответственно к выборкам добавляется условие and deleted = 0.

И постулат номер ноль при работе с людьми - все лгут. Ну и иногда добросовестно ошибаются. В том числе разработчики и администраторы. Так что логирование нужно обязательно.

По инструментарию и доке - а оно точно настолько нужно? Если вы никогда не ковыряли FB настолько глубоко, то с наскоку за один день все равно ничего не раскопаете. Я бы лучше этот день потратил на доработку базы данных и/или клиентского софта. Тем более, что запрос все равно не раскопаете, да и абстрактный номер транзакции, в которой были удалены данные, сам по себе тоже ничего не даст.
...
Рейтинг: 0 / 0
Методы исследования записей в БД
    #38815917
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйЕсть ли какой-то инструментарий и дока для низкоуровневого ковыряния этого файла?
IBUndelete, IBSurgeonViewer.
но если уже "мусор убрался", ничего ты не увидишь.
...
Рейтинг: 0 / 0
Методы исследования записей в БД
    #38816173
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, особенно за наводку на инструменты.

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

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

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

авторно если уже "мусор убрался", ничего ты не увидишь.
Это понятно. По gstat этой базы, который я снимал дня за четыре до проблемы, до 20 тысяч транзакций было ещё далеко, а дефолтные параметры сборки мусора я не менял. Буду исследовать fdb.
...
Рейтинг: 0 / 0
Методы исследования записей в БД
    #38816388
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйПро "не доверять юзеру" - это я уже слышал, но это тот случай, когда программа очень необходима юзеру, и умышленные действия с его стороны исключены.
Осталось исключить неумышленные, а также любые возможности "сделать бяку плохому дяде" для всех окружающих вашего юзера.

ЛюбезныйТеоретически нельзя исключить, что софтиной мог быть отправлен запрос (или даже несколько) на удаление, но чтобы выловить причину, нужно хотя бы примерно прикинуть его текст

ЛюбезныйАбстрактный номер транзакции, как мне кажется, мог бы помочь определить точно, какие именно записи похерены этой транзакцией, да и сколько вообще было транзакций при пропадании записей. Ну и соответственно можно будет предполагать текст запроса.
На что разработчик не пойдет, только чтобы усложнить себе жизнь не делать логирование.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Методы исследования записей в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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