Friday, February 12, 2016

Примеры резервного копирования и восстановления БД Oracle с помощью RMAN

Резервное копирование и восстановление БД Oracle в примерах Сегодня мы посмотрим простые примеры резервного копированияи восстановления из резервной копии  БД Oracle с помощью Recovery Manager.

Все действия производились на Oracle Database 11.2.0.4. под управлением ОС MS Win 8.1. База данных создана и сконфигурирована с помощью мастера Database Creation Assistant (dbca), все параметры настроены по умолчанию.

Для того, чтобы чтобы иметь возможность сделать резервную копию, из которой можно восстановить БД в консистентном состоянии, требуется, чтобы БД была в archivelog режиме. Проверим:

c:\>set ORACLE_SID=orcl

c:\>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 10 13:31:00 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

Видим, что логи транзакций не архивируются. Переведем БД в archivelog режим:


SQL> show parameter log_archive_dest_1

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      LOCATION=c:\data\orcl\arclog\
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup mount;
ORACLE instance started.

Total System Global Area  784998400 bytes
Fixed Size                  2285344 bytes
Variable Size             272629984 bytes
Database Buffers          503316480 bytes
Redo Buffers                6766592 bytes
Database mounted.
SQL>
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64
bit Production

Перед тем, как делать первую резервную копию, давайте немного настроим окружение RMAN, по умолчанию вот такие настройки:

C:\Windows\system32>rman

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Feb 12 10:48:27 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect target /

connected to target database: ORCL (DBID=1425880597)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'C:\ORACLE\DBHOME_1\DATABASE\SNCFORCL.ORA'; # default

RMAN>

Вот что настроим:

RMAN> configure controlfile autobackup format for device type disk to 'd:\backup\orcl\cf_%F.bak';

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'd:\backup\orcl\cf_%F.bak';
new RMAN configuration parameters are successfully stored

RMAN> configure controlfile autobackup on;

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

RMAN>


Рекомендуется включать автоматическое резервирование контрольного файла, что и делается второй командой . А первой командой настраивается формат файла резервной копии, переменная %F подставляет в имя DBID, дату, и  "repeatable generated name".

Также, настроим канал типа диск для того, чтобы Oracle складывай файлы наборов в определенное нами место с определенным именем:

RMAN> configure channel device type disk format 'd:\backup\orcl\FULL_%d_%T_%U.bak';

new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT   'd:\backup\orcl\FULL_%d_%T_%U.bak';
new RMAN configuration parameters are successfully stored

RMAN>

Переменныая подстановки %d ставит в имя файла набора имя БД, переменная %T текущую дату, переменная %U нгенерирует уникальный идентификатор.

Резервная копия БД Oracle, созданая с помощью RMAN - это есть копия файлов данных, контрольного файла, архивов логов транзакций и серверного файла параметров. Давайте попробуем сделать резервную копию:

RMAN> backup database;

Starting backup at 12.02.16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=C:\DATA\ORCL\SYSAUX01.DBF
input datafile file number=00001 name=C:\DATA\ORCL\SYSTEM01.DBF
input datafile file number=00005 name=C:\DATA\ORCL\EXAMPLE01.DBF
input datafile file number=00006 name=C:\DATA\ORCL\USERS02.DBF
input datafile file number=00003 name=C:\DATA\ORCL\UNDOTBS01.DBF
input datafile file number=00004 name=C:\DATA\ORCL\USERS01.DBF
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5NQTNVQQ_1_1.BAK tag=TAG20160212T105002 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:26
Finished backup at 12.02.16

Starting Control File and SPFILE Autobackup at 12.02.16
piece handle=D:\BACKUP\ORCL\CF_C-1425880597-20160212-03.BAK comment=NONE
Finished Control File and SPFILE Autobackup at 12.02.16

Как мы видим, Oracle автоматически выделила канал типа диск, сделала резервную копию файлов данных в одном наборе и резервную копию контрольного файла и серверного файла параметров в другом. Второй набор создался  потому, что у нас настроено автоматическое резервирование контрольного файла.

Но счастья пока еще нет. Потому, что мы зарезервировали неконсистентное состояние файлов данных. Для того, чтобы привести его к консистентному состоянию при восстановлении нам понадобятся заархивированные логи транзакций. Как минимум, логи тех транзакций, которые произошли за время резервного копирования. Давайте выполним резервное копирование, включая архивы логов транзакций:

RMAN> backup database plus archivelog;


Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=4 RECID=197 STAMP=903548437
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5PQTNVS0_1_1.BAK tag=TAG20160212T105040 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=1 RECID=198 STAMP=903573935
input archived log thread=1 sequence=2 RECID=199 STAMP=903607229
input archived log thread=1 sequence=3 RECID=200 STAMP=903609328
input archived log thread=1 sequence=4 RECID=201 STAMP=903609379
input archived log thread=1 sequence=5 RECID=202 STAMP=903609409
input archived log thread=1 sequence=6 RECID=203 STAMP=903610239
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5QQTNVS1_1_1.BAK tag=TAG20160212T105040 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 12.02.16

Starting backup at 12.02.16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=C:\DATA\ORCL\SYSAUX01.DBF
input datafile file number=00001 name=C:\DATA\ORCL\SYSTEM01.DBF
input datafile file number=00005 name=C:\DATA\ORCL\EXAMPLE01.DBF
input datafile file number=00006 name=C:\DATA\ORCL\USERS02.DBF
input datafile file number=00003 name=C:\DATA\ORCL\UNDOTBS01.DBF
input datafile file number=00004 name=C:\DATA\ORCL\USERS01.DBF
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5RQTNVS4_1_1.BAK tag=TAG20160212T105044 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
Finished backup at 12.02.16

Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=7 RECID=204 STAMP=903610269
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5SQTNVSU_1_1.BAK tag=TAG20160212T105109 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 12.02.16

Starting Control File and SPFILE Autobackup at 12.02.16
piece handle=D:\BACKUP\ORCL\CF_C-1425880597-20160212-04.BAK comment=NONE
Finished Control File and SPFILE Autobackup at 12.02.16

RMAN>


Как видим из лога операции, создано четыра набора резервных копий - набор с архлогами, заархивированнми до резервного копирования файлов данных, набор резервных копий файлов данных, набор c архлогами, заархивированных во время и сразу после резервного копирования данных, и набор с автоматической резервной копией контрольного файла и серверного файла параметров.
Теперь у нас есть полный набор для восстановления базы данных из резервной копии.

Давайте, посмотрим наши резервные копии:

RMAN> list backup;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
165     Full    1.54G      DISK        00:00:22     12.02.16
        BP Key: 198   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105002
        Piece Name: D:\BACKUP\ORCL\FULL_ORCL_20160212_5NQTNVQQ_1_1.BAK
  List of Datafiles in backup set 165
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 4174163    12.02.16 C:\DATA\ORCL\SYSTEM01.DBF
  2       Full 4174163    12.02.16 C:\DATA\ORCL\SYSAUX01.DBF
  3       Full 4174163    12.02.16 C:\DATA\ORCL\UNDOTBS01.DBF
  4       Full 4174163    12.02.16 C:\DATA\ORCL\USERS01.DBF
  5       Full 4174163    12.02.16 C:\DATA\ORCL\EXAMPLE01.DBF
  6       Full 4174163    12.02.16 C:\DATA\ORCL\USERS02.DBF

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
166     Full    9.55M      DISK        00:00:00     12.02.16
        BP Key: 199   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105028
        Piece Name: D:\BACKUP\ORCL\CF_C-1425880597-20160212-03.BAK
  SPFILE Included: Modification time: 11.02.16
  SPFILE db_unique_name: ORCL
  Control File Included: Ckp SCN: 4174177      Ckp time: 12.02.16

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
168     77.02M     DISK        00:00:01     12.02.16
        BP Key: 201   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105040
        Piece Name: D:\BACKUP\ORCL\FULL_ORCL_20160212_5QQTNVS1_1_1.BAK

  List of Archived Logs in backup set 168
  Thrd Seq     Low SCN    Low Time Next SCN   Next Time
  ---- ------- ---------- -------- ---------- ---------
  1    1       4140496    11.02.16 4156814    12.02.16
  1    2       4156814    12.02.16 4172291    12.02.16
  1    3       4172291    12.02.16 4173613    12.02.16
  1    4       4173613    12.02.16 4173670    12.02.16
  1    5       4173670    12.02.16 4173690    12.02.16
  1    6       4173690    12.02.16 4174193    12.02.16

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
169     Full    1.54G      DISK        00:00:21     12.02.16
        BP Key: 202   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105044
        Piece Name: D:\BACKUP\ORCL\FULL_ORCL_20160212_5RQTNVS4_1_1.BAK
  List of Datafiles in backup set 169
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 4174200    12.02.16 C:\DATA\ORCL\SYSTEM01.DBF
  2       Full 4174200    12.02.16 C:\DATA\ORCL\SYSAUX01.DBF
  3       Full 4174200    12.02.16 C:\DATA\ORCL\UNDOTBS01.DBF
  4       Full 4174200    12.02.16 C:\DATA\ORCL\USERS01.DBF
  5       Full 4174200    12.02.16 C:\DATA\ORCL\EXAMPLE01.DBF
  6       Full 4174200    12.02.16 C:\DATA\ORCL\USERS02.DBF

BS Key  Size       Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
170     2.00K      DISK        00:00:00     12.02.16
        BP Key: 203   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105109
        Piece Name: D:\BACKUP\ORCL\FULL_ORCL_20160212_5SQTNVSU_1_1.BAK

  List of Archived Logs in backup set 170
  Thrd Seq     Low SCN    Low Time Next SCN   Next Time
  ---- ------- ---------- -------- ---------- ---------
  1    7       4174193    12.02.16 4174213    12.02.16

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
171     Full    9.55M      DISK        00:00:00     12.02.16
        BP Key: 204   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105111
        Piece Name: D:\BACKUP\ORCL\CF_C-1425880597-20160212-04.BAK
  SPFILE Included: Modification time: 11.02.16
  SPFILE db_unique_name: ORCL
  Control File Included: Ckp SCN: 4174222      Ckp time: 12.02.16


Мы видим достаточно подробную информацию о наших резервных копиях. Откуда же RMAN получил эту информацию? Информация обо всех резервных копиях (и не только) сохраняется в репозиторий резервных копий. По умолчанию он хранится в контрольном файле, можно его хранить и в базе данных, но об этом в другой раз.

Давайте дадим еще пару команд на просмотр данных из репозитория:


RMAN> list backup summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
165     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105002
166     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105028
168     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105040
169     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105044
170     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105109
171     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105111

RMAN> list backupset 169;


List of Backup Sets
===================


BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
169     Full    1.54G      DISK        00:00:21     12.02.16
        BP Key: 202   Status: AVAILABLE  Compressed: NO  Tag: TAG20160212T105044
        Piece Name: D:\BACKUP\ORCL\FULL_ORCL_20160212_5RQTNVS4_1_1.BAK
  List of Datafiles in backup set 169
  File LV Type Ckp SCN    Ckp Time Name
  ---- -- ---- ---------- -------- ----
  1       Full 4174200    12.02.16 C:\DATA\ORCL\SYSTEM01.DBF
  2       Full 4174200    12.02.16 C:\DATA\ORCL\SYSAUX01.DBF
  3       Full 4174200    12.02.16 C:\DATA\ORCL\UNDOTBS01.DBF
  4       Full 4174200    12.02.16 C:\DATA\ORCL\USERS01.DBF
  5       Full 4174200    12.02.16 C:\DATA\ORCL\EXAMPLE01.DBF
  6       Full 4174200    12.02.16 C:\DATA\ORCL\USERS02.DBF


А еще посмотрим, какие у нас есть архивы логов:


RMAN> list archivelog all;

List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================

Key     Thrd Seq     S Low Time
------- ---- ------- - --------
198     1    1       A 11.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000001_0903548447.0001

199     1    2       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000002_0903548447.0001

200     1    3       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000003_0903548447.0001

201     1    4       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000004_0903548447.0001

202     1    5       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000005_0903548447.0001

203     1    6       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000006_0903548447.0001

204     1    7       A 12.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000007_0903548447.0001

А это уже непорядок. Мы архлоги уже зарезервировали, а они все еще занимают место на диске. Давайте выполним резервное копирование БД с удалением зарезервированных архлогов:

RMAN> backup database plus archivelog delete input;


Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=1 RECID=198 STAMP=903573935
input archived log thread=1 sequence=2 RECID=199 STAMP=903607229
input archived log thread=1 sequence=3 RECID=200 STAMP=903609328
input archived log thread=1 sequence=4 RECID=201 STAMP=903609379
input archived log thread=1 sequence=5 RECID=202 STAMP=903609409
input archived log thread=1 sequence=6 RECID=203 STAMP=903610239
input archived log thread=1 sequence=7 RECID=204 STAMP=903610269
input archived log thread=1 sequence=8 RECID=205 STAMP=903610354
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5UQTNVVJ_1_1.BAK tag=TAG20160212T105235 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
channel ORA_DISK_1: deleting archived log(s)
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000001_0903548447.0001 RECID=198 STAMP=903573935
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000002_0903548447.0001 RECID=199 STAMP=903607229
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000003_0903548447.0001 RECID=200 STAMP=903609328
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000004_0903548447.0001 RECID=201 STAMP=903609379
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000005_0903548447.0001 RECID=202 STAMP=903609409
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000006_0903548447.0001 RECID=203 STAMP=903610239
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000007_0903548447.0001 RECID=204 STAMP=903610269
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000008_0903548447.0001 RECID=205 STAMP=903610354
Finished backup at 12.02.16

Starting backup at 12.02.16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=C:\DATA\ORCL\SYSAUX01.DBF
input datafile file number=00001 name=C:\DATA\ORCL\SYSTEM01.DBF
input datafile file number=00005 name=C:\DATA\ORCL\EXAMPLE01.DBF
input datafile file number=00006 name=C:\DATA\ORCL\USERS02.DBF
input datafile file number=00003 name=C:\DATA\ORCL\UNDOTBS01.DBF
input datafile file number=00004 name=C:\DATA\ORCL\USERS01.DBF
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5VQTNVVM_1_1.BAK tag=TAG20160212T105238 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
Finished backup at 12.02.16

Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=9 RECID=206 STAMP=903610384
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_60QTO00G_1_1.BAK tag=TAG20160212T105304 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000009_0903548447.0001 RECID=206 STAMP=903610384
Finished backup at 12.02.16

Starting Control File and SPFILE Autobackup at 12.02.16
piece handle=D:\BACKUP\ORCL\CF_C-1425880597-20160212-05.BAK comment=NONE
Finished Control File and SPFILE Autobackup at 12.02.16

RMAN>


Конечно же, наборы резервных копий должны быть скопированы на хранение еще хотя бы на один более надежный носитель, хотябы на файл-сервер с защищеным хранилищем. Или в облако, на ленту ( БД Oracle можно резервировать напрямую на ленточный носитель), скопировать средством резервного копирования, еще как нибудь, но эти копии обязаны быть, чем больше - тем лучше.

Ну вот и подошло время выполнить восстановление. Что нужно для восстановления бд Oracle?
1) Достаточный набор файлов резервных копий, минимум, - копии файлов данных, архлогов за время резервного копирования, копия контрольного файла и копия серверного файла параметров. Это у нас есть.
2) Ресурсы, куда будет восстанавливаться БД - сервер и носитель(дисковая система).
3) ОБЯЗАТЕЛЬНО бумага с примерно таким названием "план восстановления работоспособности базы данных orcl", где описывается последовательность действий администратора на любой из видимых случаев (например, утеря носителя БД. Или файла БД. Или группы файлов. Или еще что нибудь). На все возможные случаи. Этот документ делается заранее и хранится в доступном месте.

Мы будем имитировать неполное восстановление БД при полной утере сервера БД и носителя, например, при затоплении. Восстановление неполное потому, что мы потеряли часть транзакций в онлайн-логах и, возможно, в незабекапленых архивах логов. Я подготовил маленький псевдо-план неполного восстановления БД на новом сервере следующего  содержания:

1) Подготовить Сервер БД.(установить ОС, установить и настроить ПО Oracle)
2) Подготовить носитель БД (создать массив, разбить и отформатировать раздел), создать каталоги для БД.
3) Создать каталоги (куда делали резервные копии) и скопировать туда резервные копии, нминимум - начиная от последней копии файлов данных и всё, что после неё. (в принципе, можно восстановить из произвольного каталога фс, но тут не будем рассматривать)
4) Создать файл параметров
5) Создать и запустить экземпляр БД в nomount режиме
6) Восстановить контрольный файл и смонтировать БД
7) Восстановить серверный файл параметров
8) Остановить экземпляр
9) Скопировать контрольный файл в расположение согласно согласно параметрам в SPFILE
10) Запустить экземпляр в mount режиме
11) Выполнить восстановление (restore) файлов данных БД
12) Выполнить повтор транзакций (recover)  из архивов логов
13) Открыть БД.

Нормальный план должен быть развернутым, содержать команды, время выполнения, описание требующихся ресурсов.

Итак, приступим.

1)  2) 3)
Первые три пункта я тут не буду показывать, я их сымитирую - остановлю и удалю экземпляр, удалю все файлы БД, включая SPFILE


RMAN> exit


Recovery Manager complete.

C:\Windows\system32>oradim -delete -sid orcl
Instance deleted.

C:\Windows\system32>del c:\oracle\dbhome_1\database\SPFILEORCL.ORA

C:\Windows\system32>del c:\DATA\orcl\arclog\*
c:\DATA\orcl\arclog\*, Are you sure (Y/N)? y

C:\Windows\system32>del c:\DATA\orcl\*
c:\DATA\orcl\*, Are you sure (Y/N)? y

4) в каталоге %ORACLE_HOME%\database создаю файл initorcl.ora содержащий одну строчку "DB_NAME"=orcl

5) Создаю и запускаю экземпляр:


C:\Windows\system32>oradim -new -sid orcl
Instance created.

c:\>set ORACLE_SID=orcl

C:\Windows\system32>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Feb 12 10:55:40 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup nomount
ORACLE instance started.

Total System Global Area  238034944 bytes
Fixed Size                  2280008 bytes
Variable Size             180356536 bytes
Database Buffers           50331648 bytes
Redo Buffers                5066752 bytes
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

6) Восстанавливаtv контрольный файл. Поскольку, каталог рез копий во внешней БД  мы не используем, наш каталог как раз в восстанавливаемом файле, то мы сами себе каталог, и помним (видим в логах), в каком файле у нас последняя рез копия контрольного файла.


C:\Windows\system32>rman

Recovery Manager: Release 11.2.0.4.0 - Production on Fri Feb 12 10:55:56 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN> restore controlfile from 'D:\BACKUP\ORCL\CF_C-1425880597-20160212-06.BAK';

RMAN> connect target /

connected to target database: ORCL (not mounted)
using target database control file instead of recovery catalog

RMAN> restore controlfile from 'D:\BACKUP\ORCL\CF_C-1425880597-20160212-06.BAK';

Starting restore at 12.02.16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=249 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=C:\ORACLE\DBHOME_1\DATABASE\CTL1ORCL.ORA
Finished restore at 12.02.16

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1



Теперь RMAN видит каталог:

RMAN> list backup summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
165     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105002
166     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105028
167     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105040
168     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105040
169     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105044
170     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105109
171     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105111
172     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105235
173     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105238
174     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105304
175     B  F  A DISK        12.02.16        1       1       NO         TAG20160212T105305
176     B  A  A DISK        12.02.16        1       1       NO         TAG20160212T105332

7) восстанавливаем SPFILE. Поскольку RMAN теперь видит каталог, то он сам восстановит последний зарезервированный spfile:

RMAN> restore spfile from autobackup;
Starting restore at 12.02.16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=249 device type=DISK

channel ORA_DISK_1: looking for AUTOBACKUP on day: 20160212
channel ORA_DISK_1: AUTOBACKUP found: d:\backup\orcl\cf_c-1425880597-20160212-06.bak
channel ORA_DISK_1: restoring spfile from AUTOBACKUP d:\backup\orcl\cf_c-1425880597-20160212-06.bak
channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete
Finished restore at 12.02.16


8) Останавливаем экземпляр


RMAN> shutdown

database dismounted
Oracle instance shut down


9) Тут можно немного решил схитрить, и поступить следующим образом. Можно это и в план включить в сл раз.

RMAN> startup mount

connected to target database (not started)
Oracle instance started
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 02/12/2016 10:59:22
ORA-00205: error in identifying control file, check alert log for more info

RMAN> restore controlfile from 'D:\BACKUP\ORCL\CF_C-1425880597-20160212-06.BAK';

Starting restore at 12.02.16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=191 device type=DISK

channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
output file name=C:\DATA\ORCL\CONTROL01.CTL
output file name=D:\FRA\ORCL\CONTROL02.CTL
Finished restore at 12.02.16


Мы  стартанули экземпляр в mount, но смонтироваться БД не смогла потому, что в расположении, указаном в spfile, контрольного файла нет. И тогда, вместо того, чтобы его копировать вручную, можно восстановить его из рез. копии.

10)  Монтируем БД.

RMAN> alter database mount;

database mounted
released channel: ORA_DISK_1


11) Восстанавливаем файлы данных.

RMAN> restore database;

Starting restore at 12.02.16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to C:\DATA\ORCL\SYSTEM01.DBF
channel ORA_DISK_1: restoring datafile 00002 to C:\DATA\ORCL\SYSAUX01.DBF
channel ORA_DISK_1: restoring datafile 00003 to C:\DATA\ORCL\UNDOTBS01.DBF
channel ORA_DISK_1: restoring datafile 00004 to C:\DATA\ORCL\USERS01.DBF
channel ORA_DISK_1: restoring datafile 00005 to C:\DATA\ORCL\EXAMPLE01.DBF
channel ORA_DISK_1: restoring datafile 00006 to C:\DATA\ORCL\USERS02.DBF
channel ORA_DISK_1: reading from backup piece D:\BACKUP\ORCL\FULL_ORCL_20160212_5VQTNVVM_1_1.BAK
channel ORA_DISK_1: piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_5VQTNVVM_1_1.BAK tag=TAG20160212T
105238
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
Finished restore at 12.02.16


12) Накатываем транзакции. Этот шаг завершитс с ошибкой, для неполного восстановления это нормально, потому, что на каком файле останавливается цепочка имеющихся логов транзакций Oracle не знает:

RMAN> recover database;

Starting recover at 12.02.16
using channel ORA_DISK_1

starting media recovery

channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=9
channel ORA_DISK_1: reading from backup piece D:\BACKUP\ORCL\FULL_ORCL_20160212_60QTO00G_1_1.BAK
channel ORA_DISK_1: piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_60QTO00G_1_1.BAK tag=TAG20160212T
105304
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000009_0903548447.0001 thread=1 sequence=9
channel ORA_DISK_1: starting archived log restore to default destination
channel ORA_DISK_1: restoring archived log
archived log thread=1 sequence=10
channel ORA_DISK_1: reading from backup piece D:\BACKUP\ORCL\FULL_ORCL_20160212_62QTO01C_1_1.BAK
channel ORA_DISK_1: piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_62QTO01C_1_1.BAK tag=TAG20160212T
105332
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000010_0903548447.0001 thread=1 sequence=10
unable to find archived log
archived log thread=1 sequence=11
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 02/12/2016 11:01:59
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 11 and startin
g SCN of 4174353


13) Все, БД можно открывать, но с опцией RESETLOGS.

RMAN> alter database open resetlogs;

database opened


Вот мы и восстановили нашу БД на "НОВЫЙ" сервер. Администратор БД должен регулярно выполнять проверку различных сценариев восстановления баз данных, которые он написал в рамках своих обязанностей.

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

Спасибо за внимание.

PS.

Первым делом после восстановления БД следует произвести резервную копию новой инкарнации нашей БД.
Но прежде, чем делать это, нужно сверить архивлоги и удалить из каталога отсутствующие:

RMAN> crosscheck archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK
validation failed for archived log
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000004_0903546461.0001 RECID=197 STAMP=903548437
validation succeeded for archived log
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000009_0903548447.0001 RECID=208 STAMP=903610916
validation succeeded for archived log
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000010_0903548447.0001 RECID=209 STAMP=903610918
validation succeeded for archived log
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000001_0903610930.0001 RECID=210 STAMP=903610956
Crosschecked 4 objects


RMAN> delete expired archivelog all;

released channel: ORA_DISK_1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=63 device type=DISK
List of Archived Log Copies for database with db_unique_name ORCL
=====================================================================

Key     Thrd Seq     S Low Time
------- ---- ------- - --------
197     1    4       X 11.02.16
        Name: C:\DATA\ORCL\ARCLOG\ARC0000000004_0903546461.0001


Do you really want to delete the above objects (enter YES or NO)? yes
deleted archived log
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000004_0903546461.0001 RECID=197 STAMP=903548437
Deleted 1 EXPIRED objects


RMAN> backup database plus archivelog delete input;


Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=9 RECID=208 STAMP=903610916
input archived log thread=1 sequence=10 RECID=209 STAMP=903610918
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_66QTO0JH_1_1.BAK tag=TAG20160212T110313 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000009_0903548447.0001 RECID=208 STAMP=903610916
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000010_0903548447.0001 RECID=209 STAMP=903610918
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=1 RECID=210 STAMP=903610956
input archived log thread=1 sequence=2 RECID=211 STAMP=903610993
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_67QTO0JI_1_1.BAK tag=TAG20160212T110313 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000001_0903610930.0001 RECID=210 STAMP=903610956
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000002_0903610930.0001 RECID=211 STAMP=903610993
Finished backup at 12.02.16

Starting backup at 12.02.16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=C:\DATA\ORCL\SYSAUX01.DBF
input datafile file number=00001 name=C:\DATA\ORCL\SYSTEM01.DBF
input datafile file number=00005 name=C:\DATA\ORCL\EXAMPLE01.DBF
input datafile file number=00006 name=C:\DATA\ORCL\USERS02.DBF
input datafile file number=00003 name=C:\DATA\ORCL\UNDOTBS01.DBF
input datafile file number=00004 name=C:\DATA\ORCL\USERS01.DBF
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_68QTO0JK_1_1.BAK tag=TAG20160212T110315 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
Finished backup at 12.02.16

Starting backup at 12.02.16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=3 RECID=212 STAMP=903611021
channel ORA_DISK_1: starting piece 1 at 12.02.16
channel ORA_DISK_1: finished piece 1 at 12.02.16
piece handle=D:\BACKUP\ORCL\FULL_ORCL_20160212_69QTO0KD_1_1.BAK tag=TAG20160212T110341 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
channel ORA_DISK_1: deleting archived log(s)
archived log file name=C:\DATA\ORCL\ARCLOG\ARC0000000003_0903610930.0001 RECID=212 STAMP=903611021
Finished backup at 12.02.16

Starting Control File and SPFILE Autobackup at 12.02.16
piece handle=D:\BACKUP\ORCL\CF_C-1425880597-20160212-08.BAK comment=NONE
Finished Control File and SPFILE Autobackup at 12.02.16

RMAN> exit


Recovery Manager complete.

No comments :

Post a Comment