Модели восстановления в Oracle
Oracle управляет изменениями содержания и структуры таким образом, чтобы гарантировать восстановление базы данных по состоянию на последнюю подтвержденную транзакцию после любого сбоя. На последнюю подтвержденную транзакцию означает, что, после того, как управление вернулось к пользователю после выполнения выражения COMMIT, Oracle гарантирует, что подтвержденные данные записаны на диск в любой форме и могут быть восстановлены. Одиночная точка сбоя означает, что любой одиночный файл или процесс может дать сбой без потери всего содержания любой подтвержденной транзакции. Если файл данных потерян или поврежден, содержание журналов redo гарантирует восстановление информации. Если файл управления повреждается, другие файлы управления гарантируют сохранность информации. Процесс может быть прерван, но закрепленные данные потерять невозможно.
Для восстановления после сбоя, Oracle выполняет следущие три шага:
- Считывает файл init.ora, чтобы определить имена и расположение файлов управления
- Считывает файлы управления, чтобы определить целостность каждого их них и определить физическую файловую структуру базы данных
- Открывает каждый файл данных, упомянутый в файле управления, чтобы определить, отвечает ли текущее состояние файла последним подтвержденным изменениям или необходимо его восстановление
- Последовательно открывает каждый файл журнала redo и, при необходимости, применяет найденную там информацию к каждому файлу данных, чтобы вернуть каждый файл в то состояние, при котором он содержит все подтвержденные транзакции
Если файл управления базой данных утрачен, база данных восстанавливается с помощью замены потерянного файла управления копией текущего файла управления.
Если в базе данных потерян один или несколько файлов, база данных восстанавливается, следующим образом: вначале потерянные файлы заменяются архивными копиями, затем используются журналы redo (активные или архивные), чтобы привести восстановленные копии в текущее состояние. Если архивные копии восстанавливаются в другое место, необходимо использовать команду ALTER DATABASE > RENAME FILE, чтобы указать в Oracle место расположения восстановленных файлов.
Если в базе данных потерян активный текущий журнал redo, экземпляр базы данных останавливается при попытке подтверждения других транзакций. Данные не будут потеряны, но последняя транзакция не будет подтверждена и ее придется повторить после восстановления базы данных. Однако текущий активный журнал redo необходимо заменить, затем немедленно выполнить архивацию базы данных.
Если в базе данных потеряны архивные журналы redo, экземпляр базы данных продолжает работать, поскольку не имеет информации о потере. Однако возможность восстановления базы данных в случае сбоя второго носителя или потери файла может снизиться. Если потеряны архивные файлы журналов redo, необходимо создать свежую резервную копию архива.