Firebird DB считывает удаленный регистр после фиксации

#transactions #firebird #firebird2.5

#транзакции #firebird #firebird2.5

Вопрос:

У меня есть база данных firebird 2.5, и мне было интересно, есть ли способ откатить транзакцию, которая была зафиксирована. На самом деле, я спрашиваю, может ли кто-нибудь, кто мог получить доступ к файлу базы данных firebird, прочитать данные, которые были удалены в предыдущей совершенной транзакции.
У меня есть процесс (хранимая процедура), который удаляет некоторые регистры и фиксирует. Могут ли эти регистры быть восстановлены для кого-то, кто может получить доступ к файлу базы данных?

Ответ №1:

Простого способа восстановить / откатить зафиксированные транзакции не существует, однако Firebird использует MVCC (управление параллелизмом нескольких версий). Удаление (или обновление) записи добавит новую версию записи и создаст дельта-версию записи для предыдущего состояния записи.

Когда ни одна транзакция не «заинтересована» в старой версии записи, она становится пригодной для сборки мусора (что может выполняться совместно, когда другая транзакция посещает запись или в фоновом режиме). Однако нет никакой гарантии, когда произойдет эта сборка мусора.

Итак, если запись удалена, но еще не была собрана для мусора (либо потому, что все еще существуют транзакции, заинтересованные в ней, либо потому, что сборщик мусора еще не посетил запись), то люди с достаточными навыками и знаниями внутренней структуры Firebird все еще могут восстановить запись. Обратите внимание, что даже если версия записи была собрана из мусора, сами данные будут находиться на диске до тех пор, пока они не будут перезаписаны другой версией записи.

Смотрите также Firebird для эксперта по базам данных: Эпизод 4 — OAT, OIT amp; Sweep

Комментарии:

1. Спасибо за ваш ответ. Я прочитал этот эпизод 4 несколько дней назад, и я думаю, что это было нелегко прочитать, но, возможно, это будет возможно, как вы сказали. Если я запускаю сборку мусора после операции удаления, проблема по-прежнему сохраняется. Я мог бы сделать это только для транзакции, которую я действительно хочу сделать невосстановимой.

2. @briast Возможно, полезно узнать, зачем вам это нужно знать: вам нужно восстановить данные или вы хотите быть уверены, что удаленная запись восстановлению не подлежит?

3. Привет. Я хочу быть уверен, что удаленная запись не подлежит восстановлению.

4. Единственный способ действительно убедиться в этом — выполнить резервное копирование и восстановление после удаления. Однако я бы сказал, что ваше требование о том, что вы хотите, чтобы он был невосстановимым, довольно подозрительно.

5. Подозреваете? Это требование исходит от моего клиента. Это то, чего он хочет. 🙂