2.23 FLASHBACK DATABASE

目的

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

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

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

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

注意:

プロキシPDBに対するフラッシュバック操作はサポートされていません。

関連項目:

前提条件

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

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

  • データベースはARCHIVELOGモードで実行されている必要があります。

  • 高速リカバリ領域は、フラッシュバック・ロギングが有効になるように構成されている必要があります。

    フラッシュバック・ログは、高速リカバリ領域にOracle Managed Filesとして格納され、高速リカバリ領域が構成されていない場合は作成されません。

  • SQL文ALTER DATABASE ... FLASHBACK ONを発行して、フラッシュバックのターゲット時刻より前にフラッシュバック・ロギング機能を使用可能にする必要があります。

    フラッシュバック・ロギングが有効になっているかどうかは、V$DATABASE.FLASHBACK_ONを問い合せて確認できます。

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

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

PDB上のフラッシュバック操作の前提条件

プラガブル・データベース(PDB)にフラッシュバック操作を実行するための追加の前提条件を次に示します。

  • COMPATIBLE初期化パラメータは12.2.0.0以上に設定されている必要があります。

  • RMANはSYSDBAまたはSYSBACKUP権限を持つ共通ユーザーとしてrootに接続する必要があります。

  • フラッシュバック・データベース操作を実行するPDBがクローズされている必要があります。その他のPDBはオープンで操作可能でもかまいません。

  • リセットログを使用してPDBをオープンする際、rootをオープンする必要があります。

使用上の注意

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

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

マルチテナント環境では、CDB全体または特定のPDBに対してフラッシュバック・データベース操作を実行できます。リストア・ポイントを使用する場合、PDBをPDBリストア・ポイントまたはCDBリストア・ポイントに戻すことができます。

関連項目:

フラッシュバック・データベースに対する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 DATABASEの処理として、指定したターゲット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を参照してください

DATABASE

データベース全体を巻き戻します。

CDBでは、そこに含まれているすべてのPDBを含むCDB全体を戻します。

PLUGGABLE DATABASE pdb_name

指定されたPDBを戻します。その他すべてのPDBはオープンして操作できますが、指定したPDBはクローズする必要があります。

CDBが共有のUNDOを使用する場合、フラッシュバック操作中に使用される一時ファイルの格納に補助の宛先が使用されます。デフォルトの補助の宛先は、高速リカバリ領域です。AUXILIARY DESTINATION句を使用すると、高速リカバリ領域ではない別の補助の宛先を明示的に指定できます。

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以上にアップグレードしている場合のみです。

PDBでは、フラッシュバック操作はCDBでの最新のOPEN RESETLOGS操作またはPDBでの最新のOPEN RESETLOGS操作(いずれか新しい方)までのすべての変更を含め、PDBを元の状態に戻す必要があります。

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までデータベースを戻します。通常のリストア・ポイントまたは保証付きリストア・ポイントを指定できます。

CDBでは、CDBリストア・ポイントを指定する必要があります。指定したCDBリストア・ポイントに対応するSCNにCDB全体が戻されます。

PDBでは、CDBリストア・ポイント、PDB リストア・ポイントまたはクリーンPDBリストア・ポイントを指定できます。RMANはPDBを指定したリストア・ポイントに対応するSCNに戻します。CDBの残りのPDBは、特定のPDBによるフラッシュバック操作には影響されません。

TO TIME 'date_string'

指定した時刻の状態へデータベースを戻します。現行の形式への時刻の変換には、SQLのすべてのDATE式を使用できます。たとえば、FLASHBACK DATABASE TO TIME 'SYSDATE-7'を使用できます。

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

AUXILIARY DESTINATION 'location' マルチテナント環境でのフラッシュバック・データベース操作中に使用される一時データベース・ファイルが格納されている場所を指定します。CDBが共有のUNDOを使用する場合、補助の宛先を指定する必要があります。ローカルのUNDOを使用するCDBでは、補助の宛先の指定は任意です。

例2-100 特定の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 2013/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-13
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-13
 
RMAN> ALTER DATABASE OPEN RESETLOGS;

例2-101 リストア・ポイントへの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-13 BEFORE_UPDATE

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

RMAN> SHUTDOWN IMMEDIATE
RMAN> STARTUP MOUNT
RMAN> FLASHBACK DATABASE TO RESTORE POINT 'BEFORE_UPDATE';
 
Starting flashback at 15-FEB-13
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-13
 
RMAN> ALTER DATABASE OPEN RESETLOGS;

例2-102 PDBから保証付きPDBリストア・ポイントへのFLASHBACK DATABASE

PDB hr_pdbの表に対するDML操作を実行するアプリケーションをアップグレードする必要があるとします。アプリケーション・アップグレードを実行する前に、PDBに接続する際にhr_pdbに保証付きPDBリストア・ポイントを作成します(PDBはマウント済)。

SQL> CREATE RESTORE POINT hr_pdb_grp_before_upgrade GUARENTEE FLASHBACK DATABASE;

アプリケーション・アップグレードは失敗し、PDBのデータは破損した状態になります。PDBをアップグレード失敗の前の状態に戻す必要があります。SQL*Plusを開始し、SYSDBAまたはSYSBACKUP権限を持つ共通ユーザーとしてCDBに接続し、次のコマンドを実行してすべてのリストア・ポイントを表示します。

SQL> SELECT name, guarantee_flashback_database, pdb_restore_point, con_id 
     FROM v$restore_point;

NAME                          GUARANTEE_FLASHBACK_DATABASE PDB_RESTORE_POINT  CON_ID
----------------------------- ---------------------------  -----------------  ------
CDB_GRP_BEFORE_PATCH                 YES                   		NO              0
HR_PDB_GRP_BEFORE_UPGRADE            YES                   		YES             1

出力は、リストア・ポイントHR_PDB_GRP_BEFORE_UPGRADEが保証付きPDBリストア・ポイントであることを示します。hr_pdbをこの保証付きPDBリストア・ポイントに戻すことで、データ破損の影響を戻すことができます。hr_pdbに対してフラッシュバック操作を実行するには、このPDBをクローズする必要があります。CDB内のその他すべてのPDBはオープンで操作可能でもかまいません。

CDBをマウント・モードにし、PDBを保証付きPDBリストア・ポイントにフラッシュ・バックして、リセットログでPDBをオープンします。この例では、CDBは共有されたUNDOを使用し、そのため、フラッシュバック操作中の一時ファイルの格納には補助インスタンスが使用されます。

RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> FLASHBACK PLUGGABLE DATABASE hr_pdb TO RESTORE POINT hr_pdb_grp_before_upgrade 
      AUXILIARY DESTINATION '/temp/aux_dest';
RMAN> ALTER PLUGGABLE DATABASE hr_pdb OPEN RESETLOGS;