用途
FLASHBACK DATABASE
コマンドを使用すると、データベースをターゲットの時刻、SCNまたはログ順序番号に戻すことができます。
このコマンドは、その実行時に存在するデータファイルに対してOracle Databaseが加えていた変更をUNDOすることで機能します。フラッシュバックを実行すると、論理的な障害は修正できますが、物理的な障害は修正できません。したがって、このコマンドを使用して、ディスクの障害や誤って削除したデータファイルをリカバリすることはできません。
通常、FLASHBACK DATABASE
は、Point-in-Timeリカバリを伴うRESTORE
操作よりも非常に短時間で実行できます。これは、指定したフラッシュバック時刻以降にデータベースに対して行われた変更の数によって、FLASHBACK DATABASE
の実行に必要な時間が決まるためです。これに対して、リストアされたバックアップに基づく従来のPoint-in-Timeリカバリでは、データベースのサイズによって実行に必要な時間が決まります。
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ログ・ファイルはバックアップから自動的にリストアされ、一貫性を保すようにデータベースがリカバリされます。RMANでは、一時表領域のデータはフラッシュ・バックされません。
フラッシュバック・データベース操作に使用可能な最も古い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までリストアおよびリカバリできます。 |
名前の変更 |
名前の変更は無視されます。データファイルは、現在の名前を保持します。 |
サイズ変更 |
失敗します。データファイルをオフラインにしてから、 |
オフラインにする |
この操作は無視されます。データファイルは、現在のオンライン状態のままです。 |
オンラインにする |
この操作は無視されます。データファイルは、現在のオフライン状態のままです。 |
読取り専用または読み書き両用にする |
制御ファイル内のデータファイルの状態を変更します。 |
フラッシュバック・ロギングが無効になっている表領域
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 TOとFLASHBACK 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 操作は失敗します。
関連項目: |
TO BEFORE SCN integer |
指定したSCNの直前の状態へデータベースを戻します。指定した時点より以前のSCNまでのすべての変更が適用されますが、指定したSCNに対応する変更が存在する場合、その変更は適用されません。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。デフォルトは、RESET DATABASE INCARNATION コマンドを使用してオーバーライドできます。
フラッシュバックの可能な最も小さなSCNは、 |
TO BEFORE SEQUENCE integer [THREAD integer ] |
REDOログ順序番号とスレッドを上限として指定します。RMANは、指定した順序番号およびスレッド番号のログの最後の変更(は含まない)までの変更を適用します。 |
TO BEFORE RESETLOGS |
データベースの状態を、最後にOPEN RESETLOGS を実行したSCNの時点までのすべての変更を含む状態に戻します。
注意: |
TO BEFORE TIME ' date_string ' |
指定した時刻より前までのすべての変更を含む状態にデータベースを戻します(指定した時刻の変更は含まれません)。
フラッシュバックが可能な最も古い時刻は、 |
TO SCN integer |
指定したSCNの時点(を含む)までデータベースを戻します。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。RMANのRESET DATABASE コマンドを使用してリカバリ・ターゲット・インカネーションの設定を行うと、デフォルトをオーバーライドできます。
フラッシュバックの可能な最も小さな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' を使用できます。
フラッシュバックが可能な最も古い時刻は、 |
例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;