SQL Plus: Создание и выполнение сценариев - Восстановление базы данных (команда RECOVER)
ОГЛАВЛЕНИЕ
Восстановление базы данных (команда RECOVER)
Если база данных работала в режиме ARCHIVELOG, после сбоя носителя ее можно полностью или частично восстановить. Для этого в SQL*Plus предлагается команда RECOVER, имеющая следующий, весьма объемный, синтаксис:
- <команда RECOVER> ::=
- RECOVER <режим восстановления> [<степень параллелизма>]
- <режим восстановления> ::=
- <общее восстановление> / <управляемое восстановление> / END BACKUP
- <общее восстановление> ::=
- [AUTOMATIC] [FROM <местонахождение>] <команда восстановления>
- <команда восстановления> ::=
- <вид восстановления> [TEST ALLOW <целое число> CORRUPTION]
/ CONTINUE [DEFAULT]
/ CANCEL - <вид восстановления> ::=
- <полное восстановление>
/ <частичное восстановление>
/ LOGFILE <имя файла> - <полное восстановление> ::=
- [STANDBY] DATABASE { <уровень восстановления >} <уровень восстановления> UNTIL <точка восстановления>
/ USING BACKUP CONTROLFILE - <точка восстановления> ::=
- CANCEL / TIME <дата> / CHANGE <целое число>
- <частичное восстановление> ::=
- <табличные пространства или файлы данных>
/ STANDBY <табличные пространства или файлы данных>
UNTIL [CONSISTENT] [WITH] CONTROLFILE - <табличные пространства или файлы данных> ::=
- TABLESPACE <табличное пространство>{, <табличное пространство>}
/ DATAFILE <файл данных>{, <файл данных>} - <управляемое восстановление> ::=
- MANAGED STANDBY DATABASE <опция управляемого восстановления>
- <опция управляемого восстановления> ::=
- NODELAY
/ [TIMEOUT] <целое число>
/ CANCEL [IMMEDIATE] [NOWAIT]
/ DISCONNECT [FROM SESSION] [FINISH [NOWAIT]] - <степень параллелизма> ::=
- PARALLEL [<целое число>] / NOPARALLEL
Опции команды RECOVER кратко описаны в табл. 20.
Таблица 20. Опции команды RECOVER.
Опция | Назначение |
AUTOMATIC | Автоматически генерирует имя архивного файла журнала повторного выполнения, необходимого для продолжения операции восстановления. Для этого используются значения параметров конфигурации LOG_ARCHIVE_DEST и LOG_ARCHIVE_FORMAT (или соответствующие стандартные значения). Если файл с таким именем не найден, SQL*Plus запрашивает имя файла, выводя автоматически сгенерированное в качестве подсказки. Имя запрашивается также, если не указана ни опция AUTOMATIC, ни опция LOGFILE. Если заранее известно, что архивирование выполнялось в файл с нестандартным именем, имеет смысл сразу указать опцию LOGFILE. |
FROM <местонахождение> | Задает местонахождение архивных файлов журнала повторного выполнения. По умолчанию используется значение параметра инициализации LOG_ARCHIVE_DEST. Можно также задать местонахождение архивных файлов с помощью команды SQL*Plus SET LOGSOURCE. |
LOGFILE | Продолжает восстановление носителей, применяя указанный файл журнала повторного выполнения. При восстановлении в интерактивном режиме (AUTORECOVERY OFF), запрашивает новое имя файла, если указанный файл журнала не найден. |
TEST ALLOW <целое число> CORRUPTION | В случае повреждения файла журнала указывает, при скольких поврежденных блоках еще можно продолжать восстановление. В ходе обычного восстановления это значение не должно быть более 1. |
CONTINUE | Продолжает восстановление нескольких экземпляров после прерывания для отключения восстановления одного из них. |
CONTINUE DEFAULT | Продолжает восстановление, используя автоматически сгенерированное имя архивного файла журнала повторного выполнения, если оно не указано явно. Аналогично опции AUTOMATIC, но не запрашивает альтернативное имя файла, если файл не найден. |
CANCEL | Прерывает восстановление, ведущееся до CANCEL (см. опцию UNTIL CANCEL). |
STANDBY DATABASE | Восстанавливает резервную базу данных, используя управляющий файл и архивные файлы журнала повторного выполнения основной базы данных. Резервная база данных должна быть смонтирована, но не открыта. |
DATABASE | Восстанавливает всю базу данных в целом. |
UNTIL CANCEL | Задает неполное восстановление, до прерывания администратором. Необходимо указать или подтвердить автоматически сгенерированные имена файлов журналов повторного выполнения. Восстановление завершится, если указать CANCEL вместо очередного имени файла. |
UNTIL TIME | Задает неполное восстановление до момента времени. Момент времени указывается в одиночных кавычках по формату 'YYYY-MM-DD:HH24:MI:SS'. |
UNTIL CHANGE | Задает неполное восстановление до указанного по номеру изменения (SCN), не включая его. |
USING BACKUP CONTROLFILE | Указывает, что вместо текущего управляющего файла должна использоваться его резервная копия. |
TABLESPACE | Восстанавливает указанные табличные пространства текущей базы данных (до 16). |
DATAFILE | Восстанавливает любое количество указанных файлов данных. |
STANDBY TABLESPACE | Реконструирует потерянное или поврежденное табличное пространство на резервной базе данных, используя архивные файлы журнала повторного выполнения и управляющий файл основной базы данных. |
STANDBY DATAFILE | Реконструирует потерянный или поврежденный файл данных на резервной базе данных, используя архивные файлы журнала повторного выполнения и управляющий файл основной базы данных. |
UNTIL CONSISTENT WITH CONTROLFILE | Указывает, что восстановление старого табличного пространства или файла данных использует текущий управляющий файл резервной базы данных. |
MANAGED STANDBY DATABASE | Задает режим устойчивого восстановления резервной базы данных. В этом режиме предполагается, что резервная база данных является активным компонентом. В таком режиме можно восстанавливать только носители. |
NODELAY | Немедленно применяет отложенный архивный журнал к резервной базе данных, независимо от установки параметра DELAY в параметре инициализации LOG_ARCHIVE_DEST_n в основной базе данных. |
TIMEOUT | Задает период ожидания (в минутах) для операции устойчивого восстановления. Если за это время не станет доступным архивный журнал повторного выполнения, процесс восстановления завершается с ошибкой. Если эта конструкция не указана, резервная база данных остается в состоянии ожидания восстановления, пока не будет повторно выполнена команда RECOVER с конструкцией CANCEL или пока не произойдет остановка или сбой экземпляра. |
CANCEL | При управляемом восстановлении конструкция CANCEL прерывает восстановление резервной базы данных после применения текущего архивного файла повторного выполнения. Приглашение SQL*Plus снова появится после остановки процесса восстановления. |
CANCEL IMMEDIATE | Прерывает управляемое восстановление резервной базы данных после применения текущего архивного файла повторного выполнения или после прочтения следующего, в зависимости от того, какое событие произойдет раньше. Приглашение SQL*Plus снова появится после остановки процесса восстановления. Команду RECOVER CANCEL IMMEDIATE нельзя выполнять из того же сеанса, из которого была выполнена команда RECOVER MANAGED STANDBY DATABASE. |
CANCEL NOWAIT | Прерывает управляемое восстановление резервной базы данных после прочтения следующего файла журнала повторного выполнения и выдает приглашение SQL*Plus. |
DISCONNECT FROM SESSION | Указывает, что в ходе управляемого восстановления архивные файлы повторного выполнения должны применяться отдельным фоновым процессом, не блокирующим текущий сеанс. |
FINISH | Немедленно восстанавливает резервные файлы текущего журнала повторного выполнения резервной базы данных. Используется при сбое основной базы данных. |
NOWAIT | Возвращает управление немедленно, не дожидаясь завершения процесса восстановления. |
Для выполнения команды RECOVER необходимо обладать ролью SYSDBA и подключиться через выделенный серверный процесс.
Чтобы можно было выполнить восстановление носителей для всей базы данных в целом (для всех табличных пространств), база данных должна быть смонтирована, но закрыта, а все требующие восстановления табличные пространства должны быть включены (online). Для восстановления же отдельного табличного пространства база данных должна быть смонтирована и открыта, а само табличное пространство отключено. Для восстановления файла данных, база данных может оставаться открытой и смонтированной, а поврежденные файлы - отключены (если только они не входят в табличное пространство SYSTEM).
Рассмотрим простой пример остановки, запуска и восстановления носителя из SQL*Plus:
SQL> connect system/manager as sysdba
Соединено.
SQL> shutdown
База данных закрыта.
База данных размонтирована.
Экземпляр ORACLE завершен.
SQL> startup mount
Экземпляр ORACLE запущен.
Total System Global Area 152581388 bytes
Fixed Size 70924 bytes
Variable Size 78741504 bytes
Database Buffers 73691136 bytes
Redo Buffers 77824 bytes
База данных смонтирована.
SQL> recover database until time '2001-12-09:00:00:00'
Восстановление носителя завершено.
SQL> alter database open;