2-10. Восстановление повреждённого файла данных из копии- отображения.

Если один из файлов данных повреждён, то вместо того, чтобы немедленно восстанавливать файл из резервной копии, можно временно использовать копию-отображения файла из флэш- области восстановления.

Рассмотрим данную ситуацию на примере. Для начала повредим (удалим) файл данных EXAMPLE01.DBF, переведя его в автономный режим, без физического удаления:

SQL> alter database datafile '/u02/oradata/orcl/example01.dbf' offline drop;

Database altered.

Затем, удалим его физически с помощью команды операционной системы.

[oracle@alfa orcl]$ pwd
/u02/oradata/orcl
[oracle@alfa orcl]$ rm example01.dbf

Проверка файлов базы данных

Восстановление начнём с проверки списка файлов:

RMAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /u02/oradata/orcl/system01.dbf
2    140      UNDOTBS1             ***     /u02/oradata/orcl/undotbs01.dbf
3    240      SYSAUX               ***     /u02/oradata/orcl/sysaux01.dbf
4    28       USERS                ***     /u02/oradata/orcl/users01.dbf
5    0        EXAMPLE              ***     /u02/oradata/orcl/example01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /u02/oradata/orcl/temp01.dbf

Как видим, размер файла EXAMPLE01.DBF равен нолю. Будем считать, что он у нас повреждён.

Проверка на существование копии-отображения повреждённого файла.

Проверяем наличие копии-отображения для нашего повреждённого файла:

RMAN> list copy of datafile 5;

List of Datafile Copies
Key     File S Completion Time Ckp SCN    Ckp Time        Name
------- ---- - --------------- ---------- --------------- ----
35      5    A 30-MAR-11       553896     30-MAR-11       
/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4ozj5c_.dbf

Перевод повреждённого файла в offline режим.

Если повреждённый файл находится в оперативном режиме, то необходимо перевести его в автономный режим:

RMAN> sql 'alter database datafile 5 offline';

sql statement: alter database datafile 5 offline

Переключение повреждённого файла к последней копии-отображения.

После того как файл перевёлся в автономный режим, нужно сигнализировать базе данных, чтобы она использовала вместо повреждённого файла данных файл копии-отображения из флэш-области восстановления:

RMAN> switch datafile 5 to copy;
datafile 5 switched to datafile copy 
"/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4ozj5c_.dbf" 

Восстановление копии.

Переключение состоялось. Теперь, остаётся только привести копию-отображения файла в состояние согласованное с текущим состоянием базы данных:

RMAN> recover datafile 5;

Starting recover at 30-MAR-11
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:02

Finished recover at 30-MAR-11

Перевод повреждённого файла в online режим.

После того как файл восстановлен, его необходимо перевести в оперативный режим работы.

RMAN> sql 'alter database datafile 5 online';

sql statement: alter database datafile 5 online

Проверяем файлы данных:

RMAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /u02/oradata/orcl/system01.dbf
2    140      UNDOTBS1             ***     /u02/oradata/orcl/undotbs01.dbf
3    240      SYSAUX               ***     /u02/oradata/orcl/sysaux01.dbf
4    28       USERS                ***     /u02/oradata/orcl/users01.dbf
5    100      EXAMPLE              ***     
/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4ozj5c_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /u02/oradata/orcl/temp01.dbf

Как видно из листинга, база данных теперь использует вместо отсутствующего файла example01.dbf файл o1_mf_example_6s4ozj5c_.dbf из флэш-области восстановления, и у нас есть время для того чтобы спокойно восстановить оригинальный файл данных.

2-11. Переключение назад из флэш-области восстановления.

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

Проверка файлов базы данных

Обратное переключение начнём с проверки списка файлов:

RMAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /u02/oradata/orcl/system01.dbf
2    140      UNDOTBS1             ***     /u02/oradata/orcl/undotbs01.dbf
3    240      SYSAUX               ***     /u02/oradata/orcl/sysaux01.dbf
4    28       USERS                ***     /u02/oradata/orcl/users01.dbf
5    100      EXAMPLE              ***     
/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4ozj5c_.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /u02/oradata/orcl/temp01.dbf

Как видно, файл данных 5 находится в флэш-области восстановления. Необходимо перенести его в оригинальное местоположение.

Создание копии-отображения

Для начала создаём копию-отображения файла 5 в оринальном местоположении. Правда, надо не забыть предварительно, удалить старый повреждённый файл по этому пути:

RMAN> backup as copy datafile 5 format='/u02/oradata/orcl/example01.dbf';

Starting backup at 30-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile fno=00005 
name=/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4ozj5c_.dbf
output filename=/u02/oradata/orcl/example01.dbf tag=TAG20110330T022059 recid=38 
stamp=747109266
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
Finished backup at 30-MAR-11

Перевод файла в offline режим.

Перед переключением необходимо перевести текущий файл данных 5 в автономный режим:

RMAN> sql 'alter database datafile 5 offline';

sql statement: alter database datafile 5 offline

Переключение файла данных к копии-отображения.

Теперь нам остаётся только переключить текущий файл данных 5 из флэш-области восстановления к файлу копии-отображения, созданному в оригинальном местоположении:

RMAN> switch datafile 5 to copy;

datafile 5 switched to datafile copy "/u02/oradata/orcl/example01.dbf"

Восстановление копии.

После переключения необходимо привести копию-отображения в состояние согласованное с текущим состоянием базы данных:

RMAN> recover datafile 5;

Starting recover at 30-MAR-11
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:03

Finished recover at 30-MAR-11

Перевод файла в online режим.

После того как файл восстановлен, переводим его в оперативный режим работы.

RMAN> sql 'alter database datafile 5 online';

sql statement: alter database datafile 5 online

Проверка файлов базы данных

Проверяем файлы данных:

RMAN> report schema;

Report of database schema

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    480      SYSTEM               ***     /u02/oradata/orcl/system01.dbf
2    140      UNDOTBS1             ***     /u02/oradata/orcl/undotbs01.dbf
3    240      SYSAUX               ***     /u02/oradata/orcl/sysaux01.dbf
4    28       USERS                ***     /u02/oradata/orcl/users01.dbf
5    100      EXAMPLE              ***     /u02/oradata/orcl/example01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace           Maxsize(MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1    20       TEMP                 32767       /u02/oradata/orcl/temp01.dbf

Файл данных 5 вернулся в своё оригинальное местоположение.

Создание копии-отображения

В заключение перечисленных выше действий необходимо создать новую копию отображения файла в флэш-области восстановления, для будущего использования в случае отказов:

RMAN> backup as copy datafile 5;

Starting backup at 30-MAR-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile fno=00005 name=/u02/oradata/orcl/example01.dbf
output 
filename=/u01/app/oracle/flash_recovery_area/ORCL/datafile/o1_mf_example_6s4q423w_.dbf 
tag=TAG20110330T022609 recid=40 stamp=747109572
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 30-MAR-11

2-12. Резервное копирование FRA на магнитную ленту

Так как, дисковое пространство, в котором находиться флэш-область восстановления так же подвержено сбоям, как и другое любое пространство, имеет смысл сделать резервную копию всех файлов флэш-области восстановления на магнитную ленту. В этом случае, не надо копировать на ленту каждый файл области по отдельности, так как всё это можно сделать с помощью единственной команды backup recovery area. Чтобы эта команда заработала, предварительно должен быть сконфигурирован канал sbt накопителя на магнитной ленте. В связи с тем, что накопитель у нас отсутствует, мы будем эмулировать этот канал.

Эмуляция канала SBT

Чтобы произвести эмуляцию накопителя на магнитной ленте, нам понадобиться библиотека интерфейса SBT для конкретной платформы. Имеется много вариантов этих библиотек от различных программных продуктов резервного копирования. Мы возьмём файл библиотеки libobk.so продукта Veritas NetBackup для Linux и поместим его в каталог /u01/app/oracle/product/10.2.0/db1/lib. После этого, сконфигурируем канал sbt, выполнив следующую команду:

RMAN> configure channel device type 'sbt_tape' parms 'SBT_LIBRARY=oracle.disksbt 
ENV=(BACKUP_DIR=/u01/app/oracle/admin/orcl/backup)';

using target database control file instead of recovery catalog
new RMAN configuration parameters:
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS  'SBT_LIBRARY=oracle.disksbt 
ENV=(BACKUP_DIR=/u01/app/oracle/admin/orcl/backup)';
new RMAN configuration parameters are successfully stored

В качестве места назначения резервных копий в канале, у нас будет выступать специально созданный нами каталог /u01/app/oracle/admin/orcl/backup. Именно туда будут отправляться копии файлов флэш-области.

Копирование флэш-области восстановления

Выполним резервное копирование FGA:

RMAN> backup recovery area;

Starting backup at 14-APR-11
released channel: ORA_DISK_1
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: sid=150 devtype=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API
specification does not match any archive log in the recovery catalog
specification does not match any datafile copy in the repository
input backupset count=100 stamp=748452179 creation_time=14-APR-11
channel ORA_SBT_TAPE_1: starting piece 1 at 14-APR-11
channel ORA_SBT_TAPE_1: backup piece 
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_04_14/o1_mf_nnndf_TAG20110414T152
259_6tfp8o08_.bkp
piece handle=34m9ouaj_1_2 comment=API Version 2.0,MMS Version 8.1.3.0
channel ORA_SBT_TAPE_1: finished piece 1 at 14-APR-11
channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:36
input backupset count=101 stamp=748452225 creation_time=14-APR-11
channel ORA_SBT_TAPE_1: starting piece 1 at 14-APR-11
channel ORA_SBT_TAPE_1: backup piece 
/u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_04_14/o1_mf_ncsnf_TAG20110414T152
259_6tfpb2kj_.bkp
piece handle=35m9ouc1_1_2 comment=API Version 2.0,MMS Version 8.1.3.0
channel ORA_SBT_TAPE_1: finished piece 1 at 14-APR-11
channel ORA_SBT_TAPE_1: backup set complete, elapsed time: 00:00:01
Finished backup at 14-APR-11

Резервные копии файлов флэш-области восстановления были скопированы в ранее созданный нами каталог /u01/app/oracle/admin/orcl/backup. Проверим, так ли это:

[oracle@alfa backup]$ pwd
/u01/app/oracle/admin/orcl/backup
[oracle@alfa backup]$ ls
34m9ouaj_1_2  35m9ouc1_1_2  Oracle_Disk_SBT_Catalog

Резервные копии присутствуют. Вывести их список можно с помощью следующей команды RMAN:

RMAN> list backup device type sbt_tape;

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

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
48      Full    586.28M    SBT_TAPE    00:00:43     14-APR-11      
        BP Key: 55   Status: AVAILABLE  Compressed: NO  Tag: TAG20110414T152259
        Handle: 34m9ouaj_1_2   Media: 
  List of Datafiles in backup set 48
  File LV Type Ckp SCN    Ckp Time  Name
  ---- -- ---- ---------- --------- ----
  1       Full 567952     14-APR-11 /u02/oradata/orcl/system01.dbf
  2       Full 567952     14-APR-11 /u02/oradata/orcl/undotbs01.dbf
  3       Full 567952     14-APR-11 /u02/oradata/orcl/sysaux01.dbf
  4       Full 567952     14-APR-11 /u02/oradata/orcl/users01.dbf
  5       Full 567952     14-APR-11 /u02/oradata/orcl/example01.dbf

BS Key  Type LV Size       Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
49      Full    6.80M      SBT_TAPE    00:00:01     14-APR-11      
        BP Key: 56   Status: AVAILABLE  Compressed: NO  Tag: TAG20110414T152259
        Handle: 35m9ouc1_1_2   Media: 
  Control File Included: Ckp SCN: 567971       Ckp time: 14-APR-11
  SPFILE Included: Modification time: 13-APR-11

Если потребуется в дальнейшем удалить резервные копии флэш-области, то сделать это можно с помощью обычной команды RMAN delete:

RMAN> delete backup device type sbt_tape;
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: sid=140 devtype=SBT_TAPE
channel ORA_SBT_TAPE_1: WARNING: Oracle Test Disk API

List of Backup Pieces
BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
------- ------- --- --- ----------- ----------- ----------
55      48      1   2   AVAILABLE   SBT_TAPE    34m9ouaj_1_2
56      49      1   2   AVAILABLE   SBT_TAPE    35m9ouc1_1_2

Do you really want to delete the above objects (enter YES or NO)? Y
deleted backup piece
backup piece handle=34m9ouaj_1_2 recid=55 stamp=748452258
deleted backup piece
backup piece handle=35m9ouc1_1_2 recid=56 stamp=748452295
Deleted 2 objects