Oracle Database でユーザ管理、つまり rman を使わないでデータファイル障害から完全リカバリする手順のまとめ。
リカバリ方法の種類
リカバリ手順
0. リカバリが必要なデータファイルを確認する
$ sqlplus / as sysdba SQL> startup mount SQL> set linesize 200 col df# format 999 col df_name format a50 col tbsp_name format a7 col status format a7 col error format a20 col change# format 99999999 select r.file# as df#, d.name as df_name, t.name as tbsp_name, d.status, r.error, r.change#, r.time from v$recover_file r, v$datafile d, v$tablespace t where t.ts# = d.ts# and d.file# = r.file#; DF# DF_NAME TBSP_NA STATUS ERROR CHANGE# TIME ---- -------------------------------------------------- ------- ------- -------------------- --------- ---------- 1 /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM SYSTEM FILE NOT FOUND 0 2 /u01/app/oracle/oradata/orcl/undotbs01.dbf UNDOTBS ONLINE FILE NOT FOUND 0
1. クローズデータベースのリカバリ
- 起動している場合はインスタンスを停止する。
SQL> shutdown immediate
- リカバリが必要なデータファイルをリストアする。
$ cp /u01/app/oracle/oradata/orcl.org/system01.dbf /u01/app/oracle/oradata/orcl/ $ cp /u01/app/oracle/oradata/orcl.org/undotbs01.dbf /u01/app/oracle/oradata/orcl/
- データベースをマウントする。
$ sqlplus / as sysdba
SQL> startup mount
- 全てのデータファイルをオンラインにする。
- NORMALモードでオフラインにされたオフライン表領域、読取り専用表領域に属するデータファイル以外を全てオンラインにする。
$ sqlplus -s / as sysdba <<EOF set pagesize 0 set head off set feed off spool onlineall.sql select 'alter database datafile '''||name||''' online;' from v\$datafile; spool off EOF $ sqlplus / as sysdba SQL> @onlineall
- データベースをリカバリする。
SQL> set autorecovery on SQL> recover database
- データベースをオープンする。
SQL> alter database open;
2.1. オープンデータベースのリカバリ(障害発覚時にインスタンスは起動)
- 破損したデータファイルをオフラインにする。
$ sqlplus / as sysdba SQL> alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' offline;
- データファイルがオフラインになっていることを確認する。
SQL> set linesize 200 SQL> col name for a60 SQL> select name,status from v$datafile; NAME STATUS ------------------------------------------------------------ ------- /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE /u01/app/oracle/oradata/orcl/user01.dbf RECOVER
- リカバリが必要なデータファイルをリストアする。
$ cp /u01/app/oracle/oradata/orcl.org/user01.dbf /u01/app/oracle/oradata/orcl/
- リストアしたデータファイルをリカバリする。
$ sqlplus / as sysdba SQL> set autorecovery on SQL> recover datafile '/u01/app/oracle/oradata/orcl/user01.dbf';
- データファイルをオンラインに戻す。
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' online;
- データファイルがオンラインになっていることを確認する。
SQL> set linesize 200 SQL> col name for a60 SQL> select name,status from v$datafile; NAME STATUS ------------------------------------------------------------ ------- /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE /u01/app/oracle/oradata/orcl/user01.dbf ONLINE
2.2. オープンデータベースのリカバリ(障害発覚時にインスタンスは停止)
- データベースをマウントする。
$ sqlplus / as sysdba
SQL> startup mount
- 破損したデータファイルををオフラインにする。
$ sqlplus / as sysdba SQL> alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' offline;
- データファイルがオフラインになっていることを確認する。
SQL> set linesize 200 SQL> col name for a60 SQL> select name,status from v$datafile; NAME STATUS ------------------------------------------------------------ ------- /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE /u01/app/oracle/oradata/orcl/user01.dbf RECOVER
- データベースをオープンする。
SQL> alter database open;
- リカバリが必要なデータファイルをリストアする。
$ cp /u01/app/oracle/oradata/orcl.org/user01.dbf /u01/app/oracle/oradata/orcl/
- リストアしたデータファイルをリカバリする。
$ sqlplus / as sysdba SQL> set autorecovery on SQL> recover datafile '/u01/app/oracle/oradata/orcl/user01.dbf';
「Specify log: {
- データファイルをオンラインに戻す。
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/user01.dbf' online;
- データファイルがオンラインになっていることを確認する。
SQL> set linesize 200 SQL> col name for a60 SQL> select name,status from v$datafile; NAME STATUS ------------------------------------------------------------ ------- /u01/app/oracle/oradata/orcl/system01.dbf SYSTEM /u01/app/oracle/oradata/orcl/undotbs01.dbf ONLINE /u01/app/oracle/oradata/orcl/sysaux01.dbf ONLINE /u01/app/oracle/oradata/orcl/user01.dbf ONLINE