アーカイブログモードで作成したバックアップを使ってリカバリしてみます。
データフィアルの破損をバックアップからリカバリする想定です。
リカバリ対象が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>