Oracleデータベースのリカバリのやり方
『機能で学ぶ Oracle Database 入門』に、 リカバリの基本的な手順が載っていたので、それをメモしておく。
p238からの手順の記録である。
1) アーカイブログの出力先の確認
sysでログインしたのち、以下のコマンドで調べることができる。
SQL> show parameter db_recovery_file_dest
NAME TYPE VALUE
-------------------------- ----------------- -----------------------------------------
db_recovery_file_dest string C:\oraclexe\app\oracle\fast_recovery_area
db_recovery_file_dest_size big integer 10G
あるいは
SQL> select name from v$recovery_file_dest
NAME
-----------------------------------------
C:\oraclexe\app\oracle\fast_recovery_area
これは、本のp.238のやり方では確認できなかった。 参考にしたのは、以下。
2) データベースを停止して、データファイルのコピーを別の場所に保存する
データファイルの場所は、以下のコマンドで確認できる。
SQL> select ts.name, df.name from v$tablespace ts, v$datafile df where ts.ts#=df.ts#;
NAME NAME
-------------------- ----------------------------------------------
SYSTEM C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSTEM.DBF
SYSAUX C:\ORACLEXE\APP\ORACLE\ORADATA\XE\SYSAUX.DBF
UNDOTBS1 C:\ORACLEXE\APP\ORACLE\ORADATA\XE\UNDOTBS1.DBF
NAME NAME
-------------------- ----------------------------------------------
USERS C:\ORACLEXE\APP\ORACLE\ORADATA\XE\USERS.DBF
sysユーザーで、
SQL> shutdown immediate
システムが停止したら、
上のデータファイルを別の場所にコピーする。
3) データの追加・削除のコマンドを実行する。
一般ユーザーでログインして、テーブルを作成する。
SQL> create table test (
2 col_a varchar2(3)
3 );
以下のような PL/SQL を実行する。
begin
for i in 1..100000 loop
insert into test values('ABC');
update test set col_a='DEF';
delete test;
commit;
end loop;
end;
/
こののち、先ほどコピーしておいたので、元の場所のファイルを4つほど削除する。
つまり、データファイルをコピー(バックアップ)したのち、データベースに変更を加えたのである。
この変更は、アーカイブログファイルに記録されている。
このファイルはもちろん、バックアップしていない。
4) データベースを起動する。
SQL> startup mount
マウント自体は無事におこなわれるはずである。
SQL> alter database open;
データベースをオープンしようとすると、エラーが起こって、起動できない。
5) エラーを確認する
以下のコマンドでの出力を見てみる。
SQL> select ts.name, df.name, r.*
2 from v$recover_file r, v$datafile df, v$tablespace ts
3 where r.file# = df.file#
4 and df.ts# = ts.ts#;
FILE NOT FOUND という表示がされるはずである。
また、以下のコマンドでも確認できる。
SQL> select tablespace_name, name, error from v$datafile_header;
6) コピーしておいたデータファイルを元の場所に戻す
さきほどの4つのファイルを、元あった場所にコピーする。
しかし、そのあとにおこなった作業がある。
7) データベースを停止すうる時点までのデータ操作をログから適用する
現在、停止していることが必要である。
SQL> shutdown immediate
a) まず、マウント状態にする.
SQL> startup mount
b) 自動実行モードにする
SQL> set autorecovery on
c) リカバリを実行する
SQL> recover database
いろいろとメッセージが出るが、 最終的に以下のメッセージが出れば成功である。
ログが適用されました。 メディア・リカバリが完了しました。
8) データファイルが正常かを確認する
4) のところで行なったコマンドを再度実行して、復旧されたことを確認する。
SQL> select ts.name, df.name, r.*
2 from v$recover_file r, v$datafile df, v$tablespace ts
3 where r.file# = df.file#
4 and df.ts# = ts.ts#;
SQL> select tablespace_name, name, error from v$datafile_header;
参考
- 『機能で学ぶ Oracle Database 入門』p237
一志達也・著 翔泳社 2011年9月8日 初版第1刷
カテゴリー: memo, OracleDB
タグ: oracle, オラクル, リカバリ
カウント: 226