ksaitoの日記

日々試したことの覚え書き

アーカイブログモードのリカバリ

アーカイブログモードで作成したバックアップを使ってリカバリしてみます。
データフィアルの破損をバックアップからリカバリする想定です。
リカバリ対象がSYSTEM表領域の場合には、インスタンスを停止する必要があります。
その他の表領域の場合には、インスタンスを動かしたままリカバリすることができます。

データファイルを破損させる

SYSAUX表領域とUSERS表領域のデータファイルを削除します。

root@ubuntu:/u01/app/oracle/oradata/XE# ls -l
合計 1202524
-rw-r----- 1 oracle dba   9748480 2012-02-28 23:12 control.dbf
-rw-r----- 1 oracle dba 692068352 2012-02-28 22:54 sysaux.dbf
-rw-r----- 1 oracle dba 377495552 2012-02-28 22:54 system.dbf
-rw-r----- 1 oracle dba  20979712 2012-02-28 22:54 temp.dbf
-rw-r----- 1 oracle dba  26222592 2012-02-28 22:54 undotbs1.dbf
-rw-r----- 1 oracle dba 104865792 2012-02-28 22:54 users.dbf
root@ubuntu:/u01/app/oracle/oradata/XE# rm sysaux.dbf users.dbf 
root@ubuntu:/u01/app/oracle/oradata/XE# ls -l
合計 424264
-rw-r----- 1 oracle dba   9748480 2012-02-28 23:12 control.dbf
-rw-r----- 1 oracle dba 377495552 2012-02-28 22:54 system.dbf
-rw-r----- 1 oracle dba  20979712 2012-02-28 22:54 temp.dbf
-rw-r----- 1 oracle dba  26222592 2012-02-28 22:54 undotbs1.dbf
root@ubuntu:/u01/app/oracle/oradata/XE#

該当するデータファイルにアクセスが発生するとalert.logにエラーが出力されます。

Tue Feb 28 23:14:42 2012
Errors in file /u01/app/oracle/diag/rdbms/xe/XE/trace/XE_m000_6156.trc:
ORA-01116: error in opening database file 2
ORA-01110: data file 2: '/u01/app/oracle/oradata/XE/sysaux.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

テーブルスペースのオフライン

インスタンスは、停止せずに該当するテーブルスペースをオフラインにします。

SQL> alter tablespace users offline immediate;

表領域が変更されました。

SQL> alter tablespace sysaux offline immediate;

表領域が変更されました。

SQL> 
>||
** リカバリ
バックアップから破損したデータファイルをコピーします。
>||
root@ubuntu:/u01/app/oracle/oradata/XE# (cd /; tar xfz /home/oracle/sql/onlinebackup-datafile.20120223.tar.gz u01/app/oracle/oradata/XE/sysaux.dbf)
root@ubuntu:/u01/app/oracle/oradata/XE# (cd /; tar xfz /home/oracle/sql/onlinebackup-datafile.20120223.tar.gz u01/app/oracle/oradata/XE/users.dbf);
root@ubuntu:/u01/app/oracle/oradata/XE# ls -l
合計 1192284
-rw-r----- 1 oracle dba   9748480 2012-02-28 23:23 control.dbf
-rw-r----- 1 oracle dba 681582592 2012-02-23 21:30 sysaux.dbf
-rw-r----- 1 oracle dba 377495552 2012-02-28 23:15 system.dbf
-rw-r----- 1 oracle dba  20979712 2012-02-28 23:14 temp.dbf
-rw-r----- 1 oracle dba  26222592 2012-02-28 23:15 undotbs1.dbf
-rw-r----- 1 oracle dba 104865792 2012-02-23 21:30 users.dbf
root@ubuntu:/u01/app/oracle/oradata/XE# 

リカバリします。

SQL> set autorecovery on
SQL> recover tablespace users;
メディア・リカバリが完了しました。
SQL> recover tablespace sysaux;
メディア・リカバリが完了しました。
SQL> 

動的ビューで、リカバリを確認します。

SQL> select * from v$recover_file;

レコードが選択されませんでした。

SQL> select * from v$datafile_header where ERROR is not null;

レコードが選択されませんでした。

SQL> 

テーブルスペースをオンラインにする

オフラインにしたテーブルスペースをオンラインに切り替えてリカバリ完了です。

SQL> select tablespace_name, status from user_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         OFFLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          OFFLINE

SQL> alter tablespace users online;

表領域が変更されました。

SQL> alter tablespace sysaux online;

表領域が変更されました。

SQL> select tablespace_name, status from user_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE

SQL>