[Oracle] Recovery Managerで指定時刻までのリストアを行う | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

データベースでの作業中に誤ってデータやオブジェクトを削除してしまったとき、データベースをある時点まで戻せたらいいなと思うことがあります。

Recovery Managerで継続的にバックアップを取っていれば、そんなことも比較的簡単にできてしまいます。

データベースを指定した時点の状態に戻すことを「不完全リカバリ」といいますが、以下にRecovery Managerを使って指定時刻までのリストアを行う手順を解説します。

ただし、ここで解説するのは、データベース自体は正常に稼働しており、かつ現行の制御ファイルが利用でき、かつRecovery Managerで取ったバックアップセットが揃っている場合の手順なので、このような状況にない場合は、マニュアルを参考に状況に応じたリストア&リカバリを行わなければなりません。

1.データベースの停止
sqlplusからデータベースをシャットダウンします。

SQL> shutdown immediate;
データベースがクローズされました。
データベースがアンマウントされました。
ORACLEインスタンスがシャットダウンされました。

2.データベースのマウント
シャットダウンが完了したら、続いてデータベースをマウントモードで起動します。

SQL> startup mount;
ORACLEインスタンスが起動しました。

Total System Global Area  277946200 bytes
Fixed Size                   454488 bytes
Variable Size             134217728 bytes
Database Buffers          142606336 bytes
Redo Buffers                 667648 bytes
データベースがマウントされました。
SQL>

3.グローバリゼーションサポートの環境変数の設定
コマンドプロンプトからSETコマンドでグローバリゼーションサポートの環境変数を設定します。

C:\> SET NLS_LANG=japanese_japan.JA16SJISTILDE

C:\> SET NLS_DATE_FORMAT=YYYY/MM/DD HH24:MI:SS

4.データベースのリストア&リカバリ
3.のコマンドプロンプトからRecovery Managerを起動し、指定時刻までのリストアを行います。

※この時、SET UNTIL TIME ~で、いつの時点に戻したいかを設定します。
 (ここでは2004年10月27日15時10分の時点に戻すよう設定しています。)

※日付の書式は、3.でNLS_DATE_FORMATで指定した形式に従います。

C:\> RMAN TARGET 'SYS/change_on_install@ORCL AS SYSDBA'

Recovery Manager: Release 9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

ターゲット・データベース: ORCL (データベースID=1067138301)に接続されました

RMAN> run {
2> SET UNTIL TIME '2004/10/27 15:10:00';
3> RESTORE DATABASE;
4> RECOVER DATABASE;
5> }

実行コマンド: SET until clause
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています

restoreが開始されました(開始場所: 2004/10/27 16:18:58)

チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: sid=13 devtype=DISK
チャネルORA_DISK_1: データ・ファイル・バックアップ・セットのリストアを開始しています。
チャネルORA_DISK_1: バックアップ・セットからリストアするデータ・ファイルを指定しています
データ・ファイル00001をE:\ORACLE\ORADATA\ORCL\SYSTEM01.DBFへリストア
データ・ファイル00002をE:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBFへリストア
データ・ファイル00003をE:\ORACLE\ORADATA\ORCL\DRSYS01.DBFへリストア
データ・ファイル00004をE:\ORACLE\ORADATA\ORCL\INDX01.DBFへリストア
データ・ファイル00005をE:\ORACLE\ORADATA\ORCL\TOOLS01.DBFへリストア
データ・ファイル00006をE:\ORACLE\ORADATA\ORCL\USERS01.DBFへリストア
データ・ファイル00007をE:\ORACLE\ORADATA\ORCL\XDB01.DBFへリストア
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
ピース・ハンドル=E:\ORACLE\BACKUP\ORCL_DBF_0MG3E2ST_1_1_20041025.BAK 
タグ=TAG20041025T125245 パラメータ=NULL
チャネルORA_DISK_1: リストアが完了しました
restoreが完了しました(完了場所: 2004/10/27 16:21:07)

recoverが開始されました(開始場所: 2004/10/27 16:21:07)
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: 増分データ・ファイル・バックアップ・セットのリストア開始
チャネルORA_DISK_1: バックアップ・セットからリストアするデータ・ファイルを指定しています
データ・ファイル00001のリストア先: E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
データ・ファイル00002のリストア先: E:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
データ・ファイル00003のリストア先: E:\ORACLE\ORADATA\ORCL\DRSYS01.DBF
データ・ファイル00004のリストア先: E:\ORACLE\ORADATA\ORCL\INDX01.DBF
データ・ファイル00005のリストア先: E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF
データ・ファイル00006のリストア先: E:\ORACLE\ORADATA\ORCL\USERS01.DBF
データ・ファイル00007のリストア先: E:\ORACLE\ORADATA\ORCL\XDB01.DBF
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
ピース・ハンドル=E:\ORACLE\BACKUP\ORCL_DBF_0QG3GM4C_1_1_20041026.BAK 
タグ=TAG20041026T123312 パラメータ=NULL
チャネルORA_DISK_1: リストアが完了しました
チャネルORA_DISK_1: 増分データ・ファイル・バックアップ・セットのリストア開始
チャネルORA_DISK_1: バックアップ・セットからリストアするデータ・ファイルを指定しています
データ・ファイル00001のリストア先: E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
データ・ファイル00002のリストア先: E:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
データ・ファイル00003のリストア先: E:\ORACLE\ORADATA\ORCL\DRSYS01.DBF
データ・ファイル00004のリストア先: E:\ORACLE\ORADATA\ORCL\INDX01.DBF
データ・ファイル00005のリストア先: E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF
データ・ファイル00006のリストア先: E:\ORACLE\ORADATA\ORCL\USERS01.DBF
データ・ファイル00007のリストア先: E:\ORACLE\ORADATA\ORCL\XDB01.DBF
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
ピース・ハンドル=E:\ORACLE\BACKUP\ORCL_DBF_0UG3JCHN_1_1_20041027.BAK 
タグ=TAG20041027T130807 パラメータ=NULL
チャネルORA_DISK_1: リストアが完了しました

メディア・リカバリを開始しています
メディア・リカバリが完了しました

recoverが完了しました(完了場所: 2004/10/27 16:21:28)

RMAN> EXIT


Recovery Managerが完了しました。

5.データベースをオープンする。
sqlplusからデータベースをオープンします。

※この時RESETLOGSオプションを設定します。

SQL> alter database open resetlogs;

データベースが変更されました。


C:\>

6.データベースのバックアップを行う。
エラーに遭遇せず、5.までの作業を完了すれば、データベースは正常にリストア&リカバリされていますが、できればここでデータベースのバックアップを行っておくのが望ましいでしょう。