Недавно я допустил ошибку: все таблицы в моей базе данных oracle были отброшены (запущена команда drop из инструмента SQL Developer) в последовательности всех транзакций, не зная, что я удалял таблицы не в той базе данных. Каждый раз, когда я отбрасывал набор таблиц, я совершал операции. К тому времени, когда я понял, что я отбросил таблицы не в той БД, я слишком поздно откатился, так как откатывалась только последняя операция. Я также поискал в Интернете и обнаружил, что SavePoints является разрешением, но у меня не было настроенных точек сохранения. У меня были резервные копии всех таблиц, сделанные за 2 дня до этого, поэтому я запускал скрипты оттуда и вносил потерянные изменения за последние 2 дня. Есть ли другой способ вернуть состояние моей БД. Однако я взял за правило создавать точки сохранения при выполнении таких операций. Но я все еще в замешательстве. Тот, кто не знает о точках сохранения, потеряет все данные.
Как откатить все коммиты в Oracle DB
Ответы (1)
Операторы DDL, такие как drop
, выполняют неявную фиксацию, поэтому вы не можете rollback
отменить удаление таблицы. Точка сохранения также не поможет вам, поскольку она позволяет вам вернуться только к более ранней точке текущей транзакции.
Если вы просто сбросили таблицу и при условии, что вы не отключили корзину, вы можете просто выполнить flashback drop
flashback table <<table name>> to before drop
Если у вас есть более сложный сценарий, который выполняет больше, чем просто удаление таблиц, вы можете установить точка восстановления перед запуском скрипта. Затем вы можете вернуть всю базу данных в эту точку восстановления, если что-то пойдет не так.
create restore point <<your restore point name>>
<<run your script>>
flashback database to restore point <<your restore point name>>
person
Justin Cave
schedule
04.08.2020
Большое спасибо, Джастин. Я пробовал ретроспективу. Может быть какая-то причина, по которой флэшбэк не работает?
- person KnockingHeads; 04.08.2020
@Ashish - Какую команду вы пробовали?
flashback table
? Или flashback drop
? Что значит не работает? Вы получили ошибку? Если да, то в чем была ошибка?
- person Justin Cave; 04.08.2020
@Ashish Flashback должен быть включен в вашей базе данных. Мы не включаем это из-за дополнительных накладных расходов.
- person Brian Leach; 05.08.2020
@BrianLeach - Flashback - это широкий термин для обозначения ряда различных функций, которые управляются множеством различных настроек. Вы должны включить журналы ретроспективного просмотра, чтобы иметь возможность делать
flashback database
. Для включения flashback table
ничего делать не нужно. Вы можете отключить корзину, это помешает работе flashback table
. Существуют также ретроспективные запросы, которые используют undo
, а не ретроспективные журналы, поэтому они настроены по-другому.
- person Justin Cave; 05.08.2020
drop
неявно зафиксировать. Вы смотрели воспоминания? - person Alex Poole   schedule 04.08.2020