この記事ではPDBのフラッシュバックについて解説します。
フラッシュバックとは
フラッシュバックとはリストアポイントを使用して特定の地点にDBの状態を戻すことができる機能です。
バックアップよりも手軽に戻すことができるので、試験などで使用すると便利な機能です。
CDB全体のほか、特定のPDBのみをフラッシュバックすることも可能です。
戻したい地点でリストアポイントを作成しておき、フラッシュバックすることでリストアポイントを作成した地点に戻すことができます。
なお、フラッシュバックはデータファイルの破損などメディア障害の復旧には使用できないので注意が必要です。
前提条件
PDB単位でフラッシュバック機能を利用するには以下の設定が必要です。
・アーカイブログモードになっていること
・ローカルUNDOモードになっていること
・リカバリ領域が設定されていること
・フラッシュバック機能がONになっていること
共有UNDOの場合もフラッシュバックは可能ですが操作は異なります。
フラッシュバック機能のON
フラッシュバック機能の設定を行います。
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
------------------------------------
NO
SQL> ALTER DATABASE FLASHBACK ON;
データベースが変更されました。
SQL> SELECT flashback_on FROM v$database;
FLASHBACK_ON
------------------------------------
YES
SQL> show parameter db_flashback_retention_target
NAME TYPE VALUE
------------------------------------ ---------------------- ----------------------
db_flashback_retention_target integer 1440
リストアポイントフラッシュバックできる時間の上限がdb_flashback_retention_targetに設定されています。
デフォルトだと1440分に設定されています。
リストアポイントの作成
リストアポイントの作成は下記のコマンドで行います。
CREATE RESTORE POINT <リストアポイント名> {GUARANTEE FLASHBACK DATABASE};
GUARANTEE FLASHBACK DATABASEオプションを付けるとフラッシュバックできる上限の時間を無視したリストアポイントを作成できます。
PDBへ接続し、リストアポイントを作成します。
SQL> CREATE RESTORE POINT point1;
リストア・ポイントが作成されました。
SQL> SELECT name, time FROM v$restore_point;
NAME TIME
------ ---------------------------
POINT1 24-10-24 13:08:01.000000000
作成したリストアポイントはv$restore_pointビューで確認できます。
フラッシュバックの実行
作成したリストアポイントへフラッシュバックします。
フラッシュバックする際はPDBを一度クローズします。
その後CDBに接続し、フラッシュバックを実行します。
SQL> alter pluggable database xepdb1 close;
プラガブル・データベースがクローズされました。
SQL> flashback pluggable database xepdb1 to restore point point1;
フラッシュバックが完了しました。
SQL> alter pluggable database xepdb1 open resetlogs;
プラガブル・データベースが変更されました。
PDBをオープンする際はresetlogsを付ける必要があります。
フラッシュバックが完了したらリストアポイントを削除しておきます。
リストアポイントが残っているとフラッシュバックログをとり続け、性能低下につながります。
PDBに接続し、DROPコマンドで削除します。
SQL> drop restore point point1;
リストア・ポイントが削除されました。
これにてフラッシュバック操作が完了になります。