2.23 FLASHBACK DATABASE
目的
FLASHBACK DATABASE
コマンドを使用すると、データベースをターゲットの時刻、SCN、ログ順序番号またはリストア・ポイントに戻すことができます。
このコマンドは、その実行時に存在するデータ・ファイルに対してOracle Databaseが加えていた変更をUNDOします。フラッシュバックを実行すると、論理的な障害は修正できますが、物理的な障害は修正できません。結果として、このコマンドを使用して、ディスクの障害や誤って削除したデータ・ファイルをリカバリすることはできません。
FLASHBACK DATABASE
は、データファイルをリストアしないため、通常RESTORE
操作とそれに続くPoint-in-Timeリカバリよりも高速です。FLASHBACK DATABASE
を実行するのに要する時間は、必要なフラッシュバック時間以降にデータベースに行われた変更の数に依存します。これに対して、リストアされたバックアップに基づく従来のPoint-in-Timeリカバリでは、データベースのサイズによって実行に必要な時間が決まります。
フラッシュバック・データベース操作は、Data Guard環境でもいくつかの用途に使用できます。
注意:
プロキシPDBに対するフラッシュバック操作はサポートされていません。
関連項目:
-
コマンドの前提条件の完全なリストおよび
FLASHBACK DATABASE
の使用上の注意については、『Oracle Database SQL言語リファレンス』を参照してください。 -
Data Guard環境でのフラッシュバック・データベースの用途については、『Oracle Data Guard概要および管理』を参照してください。
前提条件
-
このコマンドは、RMANプロンプトまたは
RUN
コマンドから実行できます。 -
RMANは
TARGET
としてデータベースに接続されている必要があります。また、データベースは、Oracle Database 10g以降である必要があります。ターゲット・データベースは、現行の制御ファイルを使用してマウント済である必要があります。つまり、バックアップを制御ファイルとすることはできません。また、制御ファイルの再作成もできません。 -
高速リカバリ領域は、フラッシュバック・ロギングが有効になるように構成されている必要があります。
フラッシュバック・ログは、高速リカバリ領域に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リストア・ポイントに戻すことができます。
関連項目:
-
PDBリストア・ポイントおよびCDBリストア・ポイントの詳細は、Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイドのマルチテナント環境におけるリストア・ポイントの概要に関する項を参照してください
-
PDBを特定の時点に戻すステップは、Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイドのCDBおよびPDBのPoint-in-Timeリカバリの実行に関する項を参照してください
フラッシュバック・データベースに対する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 DATABASE
の処理として、指定したターゲットSCNより後の変更が適用されることはありません。
FLASHBACK DATABASE
が終了したら、データベースを読取り専用でオープンし、問合せを実行して、意図した結果が得られていることを確認してください。結果が期待どおりでなかった場合は、RECOVER
DATABASE
を実行して、フラッシュバックを開始した時点の状態にデータベースをリカバリすることができます。それから、FLASHBACK DATABASE
を再度実行できます。
フラッシュバックの結果が期待どおりだった場合、OPEN RESETLOGS
を実行して、ターゲット時刻より後の変更をすべて破棄できます。そのかわりに、失ったデータをデータ・ポンプでエクスポートし、RECOVER DATABASE
を使用してデータベースをフラッシュ操作の前の状態に戻してから、失ったデータをデータ・ポンプで再インポートすることもできます。
セマンティクス
flashback::=
構文要素 | 説明 |
---|---|
|
指定したデバイス・タイプ専用の自動チャネルを割り当てます。たとえば、自動ディスクおよびテープ・チャネルを構成して 関連項目: |
flashbackObject::=
構文要素 | 説明 |
---|---|
|
ルートおよびすべてのPDBを含め、CDB全体を戻します。 |
|
指定されたPDBを戻します。その他すべてのPDBはオープンして操作できますが、指定したPDBはクローズする必要があります。 CDBが共有のUNDOを使用する場合、フラッシュバック操作中に使用される一時ファイルの格納に補助の宛先が使用されます。デフォルトの補助の宛先は、高速リカバリ領域です。 |
|
指定したSCNの直前の状態へデータベースを戻します。指定した時点より以前のSCNまでのすべての変更が適用されますが、指定したSCNに対応する変更が存在する場合、その変更は適用されません。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。デフォルトは、 フラッシュバックの可能な最も小さなSCNは、 |
|
REDOログ順序番号とスレッドを上限として指定します。RMANは、指定した順序番号およびスレッド番号のログの最後の変更(は含まない)までの変更を適用します。 |
|
データベースの状態を、最後に 注意: PDBでは、フラッシュバック操作はCDBでの最新の |
TO BEFORE TIME ' date_string ' |
指定した時刻より前までのすべての変更を含む状態にデータベースを戻します(指定した時刻の変更は含まれません)。 フラッシュバックが可能な最も古い時刻は、 |
|
指定したSCNの時点(を含む)までデータベースを戻します。デフォルトでは、指定されたSCNで現在のインカネーションまたは祖先のインカネーションが解決されます。RMANの フラッシュバックの可能な最も小さなSCNは、 |
|
REDOログ順序番号とスレッドを上限として指定します。RMANは、指定した順序番号およびスレッド番号のログの最後の変更(を含む)までの変更を適用します。 |
TO RESTORE POINT restore_point_name |
指定したリストア・ポイントに対応するSCNまでデータベースを戻します。通常のリストア・ポイントまたは保証付きリストア・ポイントを指定できます。 CDBでは、CDBリストア・ポイントを指定する必要があります。指定したCDBリストア・ポイントに対応するSCNにCDB全体が戻されます。 PDBでは、CDBリストア・ポイント、PDB リストア・ポイントまたはクリーンPDBリストア・ポイントを指定できます。RMANはPDBを指定したリストア・ポイントに対応するSCNに戻します。CDBの残りのPDBは、特定のPDBによるフラッシュバック操作には影響されません。 |
|
指定した時刻の状態へデータベースを戻します。現行の形式への時刻の変換には、SQLのすべての フラッシュバックが可能な最も古い時刻は、 |
AUXILIARY DESTINATION 'location' |
マルチテナント環境でのフラッシュバック・データベース操作中に使用される一時データベース・ファイルが格納されている場所を指定します。CDBが共有のUNDOを使用する場合、補助の宛先を指定する必要があります。ローカルのUNDOを使用するCDBでは、補助の宛先の指定は任意です。 |
例
例2-99 特定の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-100 リストア・ポイントへの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-101 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;