ヘッダーをスキップ
Oracle® Databaseバックアップおよびリカバリ・リファレンス
11gリリース2(11.2)
B56270-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

FLASHBACK DATABASE

用途

FLASHBACK DATABASEコマンドを使用すると、データベースをターゲットの時刻、SCNまたはログ順序番号に戻すことができます。

このコマンドは、その実行時に存在するデータファイルに対してOracle Databaseが加えていた変更をUNDOすることで機能します。フラッシュバックを実行すると、論理的な障害は修正できますが、物理的な障害は修正できません。したがって、このコマンドを使用して、ディスクの障害や誤って削除したデータファイルをリカバリすることはできません。

通常、FLASHBACK DATABASEは、Point-in-Timeリカバリを伴うRESTORE操作よりも非常に短時間で実行できます。これは、指定したフラッシュバック時刻以降にデータベースに対して行われた変更の数によって、FLASHBACK DATABASEの実行に必要な時間が決まるためです。これに対して、リストアされたバックアップに基づく従来のPoint-in-Timeリカバリでは、データベースのサイズによって実行に必要な時間が決まります。

Data Guard環境では、フラッシュバック・データベースはその他のいくつかの用途に使用できます。


関連項目:

  • コマンドの前提条件の完全なリストおよびFLASHBACK DATABASEの使用上の注意については、『Oracle Database SQL言語リファレンス』を参照してください。

  • Data Guard環境でのフラッシュバック・データベースの用途については、『Oracle Data Guard概要および管理』を参照してください。


前提条件

このコマンドは、RMANプロンプトまたはRUNコマンドから実行できます。

RMANはTARGETとしてデータベースに接続されている必要があります。また、データベースは、Oracle Database 10g以降である必要があります。ターゲット・データベースは、現行の制御ファイルを使用してマウント済である必要があります。つまり、バックアップを制御ファイルとすることはできません。また、制御ファイルの再作成もできません。データベースはARCHIVELOGモードで実行されている必要があります。

FLASHBACK DATABASEを使用して、制御ファイルのリストアまたは再作成が行われたときより前に戻すことはできません。データベースの制御ファイルがバックアップからリストアされるか、または再作成されると、既存のすべてのフラッシュバック・ログ情報が破棄されます。

高速リカバリ領域は、フラッシュバック・ロギングが有効になるように構成されている必要があります。フラッシュバック・ログは、高速リカバリ領域にOracle Managed Filesとして格納され、高速リカバリ領域が構成されていない場合は作成されません。SQL文ALTER DATABASE ... FLASHBACK ONを使用して、フラッシュバックのターゲット時刻より前にフラッシュバック・ロギング機能を使用可能にしておく必要があります。フラッシュバック・ロギングが有効になっているかどうかは、V$DATABASE.FLASHBACK_ONを問い合せて確認できます。

データベースには、SQL文ALTER TABLESPACE ... FLASHBACK OFFでフラッシュバック機能が無効にされたオンライン表領域を含めないでください。

使用上の注意

フラッシュバック・データベースの操作は、データベース全体に適用されます。個々の表領域をフラッシュ・バックすることはできません。フラッシュバック・データベース操作は、RECOVERによって実行される、データベースのPoint-in-Timeリカバリ(DBPITR)に似ていますが、RMANでは、変更をUNDOして、ターゲットの時刻またはSCNの前の時点に戻すために、フラッシュバック・ログが使用されます。RMANでは、必要なアーカイブREDOログ・ファイルはバックアップから自動的にリストアされ、一貫性を保すようにデータベースがリカバリされます。一時表領域のデータはフラッシュ・バックされません。

フラッシュバック・データベース操作に使用可能な最も古いSCNは、DB_FLASHBACK_RETENTION_TARGET初期化パラメータの設定と、使用可能なディスク領域の制限の下で実際に保存されているフラッシュバック・ログとによって決まります。V$DATABASE.CURRENT_SCNの現行のデータベースSCNを表示します。

フラッシュバック・データベースに対するNOLOGGING操作の影響

NOLOGGING操作が行われていたターゲット時刻を指定してFLASHBACK DATABASEを使用すると、NOLOGGING操作の影響を受けたデータベース・オブジェクトとデータファイルのブロックが破損している可能性があります。たとえば、NOLOGGINGモードでダイレクト・パスINSERT操作を行い、その操作が4月3日の9:00から9:15まで実行されるとします。後でフラッシュバック・データベースを使用して、その日の09:07に戻す場合、ダイレクト・パスINSERTで更新されたオブジェクトとデータファイルは、フラッシュバック・データベースが終了した後で、破損ブロックが存在するままになる可能性があります。

NOLOGGING操作と重なるターゲット時刻またはSCNを指定してFLASHBACK DATABASE使用することは、可能なかぎり避けてください。また、NOLOGGING操作の直後に、影響を受けたデータファイルの完全バックアップまたは増分バックアップを実行し、操作後の時点へのリカバリを可能にしてください。FLASHBACK DATABASEを使用して、ダイレクト・パスINSERTなどの操作の実行していた時点に戻ることが予想される場合は、その操作をLOGGINGモードで実行することを検討してください。


関連項目:

NOLOGGINGモードをサポートしている操作の詳細は、『Oracle Database SQL言語リファレンス』logging_clauseの説明を参照してください。

データファイルの状態の変更がフラッシュバック・データベースに与える影響

FLASHBACK DATABASEコマンドを実行しても、すべての必要なファイルおよびリソースがあることが確認されるまで、データベースの変更は開始されません。フラッシュバック・データベース操作は、データファイル、REDOログ・ファイルまたはフラッシュバック・ログの欠落が原因では失敗しません。

データファイルの状態が、現行のSCNとフラッシュバックのターゲットSCNとの間で変化している場合、FLASHBACK DATABASEコマンドの動作は、状態変化の内容によって異なります。詳細は、表2-8を参照してください。

表2-8 データファイルの状態の変化に対するFLASHBACK DATABASEの応答

フラッシュバック中に実行するデータファイル操作 FLASHBACK DATABASEコマンドの応答

追加

データファイルのレコードを制御ファイルから削除します。

削除

データファイルを制御ファイルに追加し、オフラインとしてマークしてフラッシュバックしません。データファイルを同じ時刻またはSCNまでリストアおよびリカバリできます。

名前の変更

名前の変更は無視されます。データファイルは、現在の名前を保持します。

サイズ変更

失敗します。データファイルをオフラインにしてから、FLASHBACK DATABASEコマンドを再実行できます。データファイルはフラッシュバックされません。データファイルを同じ時刻またはSCNまでリストアおよびリカバリできます。

オフラインにする

この操作は無視されます。データファイルは、現在のオンライン状態のままです。

オンラインにする

この操作は無視されます。データファイルは、現在のオフライン状態のままです。

読取り専用または読み書き両用にする

制御ファイル内のデータファイルの状態を変更します。


フラッシュバック・ロギングが無効になっている表領域

ALTER TABLESPACE ... FLASHBACK OFF文が、複数の表領域に対して実行されていることがあります。FLASHBACK DATABASEの実行時に、表領域をターゲットSCNに戻せるだけのフラッシュバック・データがない場合は、RMANによってエラーが発行され、データベースは変更されません。FLASHBACK DATABASEが失敗するかまたは中断された場合、データベースは必ずマウントされたままになります。

この使用例では、V$TABLESPACEを問い合せて、フラッシュバック・ロギングが無効になっている表領域を特定します。次の選択肢があります。

  • 該当する表領域にあるデータファイルをオフラインにします。その後、RESTOREを実行してから、RECOVERを実行し、それらのデータファイルを、データベースの残りデータファイルと同じ時点に調整します。

  • ALTER DATABASE DATAFILE ... OFFLINE FOR DROP文を使用して、影響を受けたデータファイルを削除します。これで、RESETLOGSオプションでデータベースをオープンできます。データベースがオープン状態になったら、削除したデータファイルが含まれていた表領域に対してDROP TABLESPACE文を実行します。

フラッシュバック・データベース後のデータベースの状態

FLASHBACK DATABASEの実行後に、データベースが、ターゲット時刻の直前のSCNの状態ではない場合があります。データベースのSCNは、トランザクション以外のイベントによって更新される場合があります。FLASHBACK DATABASE TOのコマンド形式を使用する場合に、ターゲットSCNに対応するトランザクションが存在すると、フラッシュバック後のデータベースは、そのトランザクションまでのすべての変更がデータベースに含まれます。そうでない場合は、使用するコマンド形式がFLASHBACK DATABASE TOFLASHBACK DATABASE TO BEFOREのどちらであるかには関係なく、そのトランザクションの直前までのすべての変更がデータファイルに含まれます。FLASHBACK DATBASEの処理として、指定したターゲットSCNより後の変更が適用されることはありません。

FLASHBACK DATABASEが終了したら、データベースを読取り専用でオープンし、問合せを実行して、意図した結果が得られていることを確認してください。結果が期待どおりでなかった場合は、RECOVER DATABASEを実行して、フラッシュバックを開始した時点の状態にデータベースをリカバリすることができます。それから、FLASHBACK DATABASEを再度実行できます。

フラッシュバックの結果が期待どおりだった場合、OPEN RESETLOGSを実行して、ターゲット時刻より後の変更をすべて破棄できます。そのかわりに、失ったデータをデータ・ポンプでエクスポートし、RECOVER DATABASEを使用してデータベースをフラッシュ操作の前の状態に戻してから、失ったデータをデータ・ポンプで再インポートすることもできます。

セマンティクス

構文要素 説明
DEVICE TYPE deviceSpecifier 指定したデバイス・タイプ専用の自動チャネルを割り当てます。たとえば、自動ディスクおよびテープ・チャネルを構成してFLASHBACK ...DEVICE TYPE DISKを実行すると、RMANではディスク・チャネルのみが割り当てられます。RMANでは、フラッシュバック・データベース操作中のバックアップからREDOログをリストアする必要があります。最新のフラッシュバック・ログとターゲット時刻の間の変更は、アーカイブREDOログに基づいて再作成される必要があります。自動チャネルがテープに割り当てられてられていない場合に、必要なREDOログがテープにあると、FLASHBACK DATABASE操作は失敗します。

関連項目: deviceSpecifierを参照してください。

TO BEFORE SCN integer 指定したSCNの直前の状態へデータベースを戻します。指定した時点より以前のSCNまでのすべての変更が適用されますが、指定したSCNに対応する変更が存在する場合、その変更は適用されません。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。デフォルトは、RESET DATABASE INCARNATIONコマンドを使用してオーバーライドできます。

フラッシュバックの可能な最も小さなSCNは、V$FLASHBACK_DATABASE_LOGOLDEST_FLASHBACK_SCNを問い合せて概略値を確認できます。

TO BEFORE SEQUENCE integer [THREAD integer] REDOログ順序番号とスレッドを上限として指定します。RMANは、指定した順序番号およびスレッド番号のログの最後の変更(は含まない)までの変更を適用します。
TO BEFORE RESETLOGS データベースの状態を、最後にOPEN RESETLOGSを実行したSCNの時点までのすべての変更を含む状態に戻します。

注意: FLASHBACK DATABASEを実行して、データベースを最後のOPEN RESETLOGS操作より前の時点に戻すことができるのは、データベースをOracle Database 10gリリース2以上にアップグレードしている場合のみです。


TO BEFORE TIME
'date_string'
指定した時刻より前までのすべての変更を含む状態にデータベースを戻します(指定した時刻の変更は含まれません)。

フラッシュバックが可能な最も古い時刻は、V$FLASHBACK_DATABASE_LOGOLDEST_FLASHBACK_TIMEを問い合せて概略値を確認できます。

TO SCN integer 指定したSCNの時点(を含む)までデータベースを戻します。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。RMANのRESET DATABASEコマンドを使用してリカバリ・ターゲット・インカネーションの設定を行うと、デフォルトをオーバーライドできます。

フラッシュバックの可能な最も小さなSCNは、V$FLASHBACK_DATABASE_LOGOLDEST_FLASHBACK_SCNを問い合せて概略値を確認できます。

TO SEQUENCE integer THREAD integer REDOログ順序番号とスレッドを上限として指定します。RMANは、指定した順序番号およびスレッド番号のログの最後の変更(を含む)までの変更を適用します。

TO RESTORE POINT
restore_point_name
指定したリストア・ポイントに対応するSCNまでデータベースを戻します。通常のリストア・ポイントまたは保証付きリストア・ポイントを指定できます。
TO TIME 'date_string' 指定した時刻の状態へデータベースを戻します。現行の形式への時刻の変換には、SQLのすべてのDATE式を使用できます。たとえば、FLASHBACK DATABASE TO TIME 'SYSDATE-7'を使用できます。

フラッシュバックが可能な最も古い時刻は、V$FLASHBACK_DATABASE_LOGOLDEST_FLASHBACK_TIMEを問い合せて概略値を確認できます。


例2-87 特定のSCNへのFLASHBACK DATABASE

2月14日の午後5時に、破損した行を多くの表に挿入したとします。SQL*Plusをデータベースに接続して、フラッシュバック期間内の最も古いSCNを問い合せます。

SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
  2  FROM   V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK
-------------------- ----------------
              411010 2007/02/14 16:49

次に、新しい端末を開いて、RMANクライアントを起動し、ターゲット・データベースとリカバリ・カタログに接続します。次のようにRMANコマンドを入力します(例には、FLASHBACK DATABASEの出力例が含まれます)。

RMAN> SHUTDOWN IMMEDIATE
RMAN> STARTUP MOUNT
RMAN> FLASHBACK DATABASE TO SCN 411010;
 
Starting flashback at 15-FEB-07
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=104 device type=DISK
 
 
starting media recovery
media recovery complete, elapsed time: 00:00:07
 
Finished flashback at 15-FEB-07
 
RMAN> ALTER DATABASE OPEN RESETLOGS;

例2-88 リストア・ポイントへのFLASHBACK DATABASE

データベースに大量の更新をロードする準備をしているとします。更新を実行する前に、保証付きリストア・ポイントを作成します。

SQL> CREATE RESTORE POINT before_update GUARANTEE FLASHBACK DATABASE;

バルク更新が失敗し、データベースに大量の破損データが残りました。RMANセッションを起動し、ターゲット・データベースとリカバリ・カタログに接続して、保証付きリストア・ポイントをリストします。

RMAN> LIST RESTORE POINT ALL;

SCN              RSP Time  Type       Time      Name
---------------- --------- ---------- --------- ----
412742                     GUARANTEED 15-FEB-07 BEFORE_UPDATE

データベースをマウントして、リストア・ポイントにフラッシュバックし(例には出力例も含まれます)、RESETLOGSオプションを使用してデータベースをオープンします。

RMAN> SHUTDOWN IMMEDIATE
RMAN> STARTUP MOUNT
RMAN> FLASHBACK DATABASE TO RESTORE POINT 'BEFORE_UPDATE';
 
Starting flashback at 15-FEB-07
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=104 device type=DISK
 
 
starting media recovery
 
archived log for thread 1 with sequence 34 is already on disk as file /disk2/oracle/oradata/prod/arch/archive1_34_614598462.dbf
media recovery complete, elapsed time: 00:00:01
Finished flashback at 15-FEB-07
 
RMAN> ALTER DATABASE OPEN RESETLOGS;