フラッシュバック・データベースと Data Guard
フラッシュバック・データベース機能は更新処理を巻き戻し、データベースを過去の状態に強制的に戻す便利な機能です。しかし Data Guard 環境ではプライマリ・データベースを過去に戻すと、スタンバイ・データベースの方が新しい状態に陥ります。Oracle Database には、スタンバイ側が新しい状態になったことを検知すると、スタンバイ側も自動的にフラッシュバックを行う機能が提供されています。
本記事ではプライマリ・データベースをフラッシュバック機能で巻き戻し、スタンバイ・データベースが自動的に追随することを確認します。
必要な設定
Data Guard 構成が確立し、プライマリ・データベースとスタンバイ・データベースが同期していることを確認します。
$ dgmgrl / as sysdba
DGMGRL for Linux: Release 19.0.0.0.0 - Production on 月 8月 4 15:39:35 2025
Version 19.14.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
DGMGRLへようこそ。詳細は"help"と入力してください。
"O19S"に接続しました
SYSDBAとして接続しました。
DGMGRL> SHOW CONFIGURATION
構成 - dgtest_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
O19S - フィジカル・スタンバイ・データベース
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
SUCCESS (ステータスは24秒前に更新されました)
自動フラッシュバック機能を利用するためには、フラッシュバック・ログの取得設定が必要です。また、スタンバイ・データベースは MOUNT モードで起動している必要があります。
SQL> SELECT status FROM v$instance;
STATUS
------------
MOUNTED
SQL> SELECT database_role, flashback_on FROM V$database;
DATABASE_ROLE FLASHBACK_ON
---------------- ------------------
PHYSICAL STANDBY YES
プライマリ・データベースを過去に戻す
プライマリ・データベースを過去に戻します。RMAN によるバックアップから不完全リカバリを行う方法もありますが、ここではフラッシュバック・データベースを使って SCOTT.DATA1 テーブル削除の前まで戻します。フラッシュバック後に ALTER DATABASE OPEN RESETLOGS 文を使ってデータベースを強制的にオープンします。
SQL> SELECT current_scn FROM V$DATABASE;
CURRENT_SCN
-----------
34021192
SQL> SELECT INCARNATION# FROM v$database_incarnation WHERE status='CURRENT';
INCARNATION#
------------
2
SCOTT.DATA1 テーブルからレコードを誤って削除します。
SQL> DELETE FROM scott.data1;
10000行が削除されました。
SQL> COMMIT;
コミットが完了しました。
フラッシュバック・データベースを実行してデータの削除前の SCN に巻き戻します。その後 RESETLOGS 句を指定したオープンを行います。
RMAN> FLASHBACK DATABASE TO SCN 34023286;
flashbackを25-08-04で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=396 デバイス・タイプ=DISK
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:01
flashbackを25-08-04で終了しました
RMAN> ALTER DATABASE OPEN RESETLOGS;
文が処理されました
RESETLOGS による強制オープンを実行したことにより、インカネーション番号が変更されます。
SQL> SELECT INCARNATION# FROM v$database_incarnation WHERE status='CURRENT';
INCARNATION#
------------
3
Data Guard による同期が停止します。
- ORA-16700 はプライマリとスタンバイに違いが発生したことを意味します
- ORA-16782 はプライマリがオープンしていないことを示しています
DGMGRL> SHOW CONFIGURATION
構成 - dgtest_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
エラー: ORA-16782: インスタンスが読取りおよび書込みアクセス用にオープンしていません
O19S - フィジカル・スタンバイ・データベース
エラー: ORA-16700: スタンバイ・データベースはプライマリ・データベースと異なっています。
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
ERROR (ステータスは59秒前に更新されました)
スタンバイ・データベースの alert ログを確認
スタンバイ・データベースの alert ログを確認します。新しいインカネーションへの切り替わりを検知し、Flashback database によりスタンバイ・データベースを自動的に過去に巻き戻しています。
rfs (PID:4067): A new recovery destination branch has been registered
rfs (PID:4067): Standby in the future of new recovery destination branch(resetlogs_id) 1208274379
rfs (PID:4067): Incomplete Recovery SCN:0x0000000002073078
rfs (PID:4067): Resetlogs SCN:0x0000000002072778
rfs (PID:4067): SBPS:0x0000000001447af9
rfs (PID:4067): Flashback database to SCN:0x0000000001447af9 (21265145) to follow new branch
rfs (PID:4067): New Archival REDO Branch(resetlogs_id): 1208274379 Prior: 1199035936
rfs (PID:4067): Archival Activation ID: 0xb86ca4c1 Current: 0xb7e14c8e
rfs (PID:4067): Effect of primary database OPEN RESETLOGS
rfs (PID:4067): Managed Standby Recovery process is active
2025-08-04T15:46:35.099683+09:00
Incarnation entry added for Branch(resetlogs_id): 1208274379 (O19S)
2025-08-04T15:46:35.102260+09:00
Setting recovery target incarnation to 4
2025-08-04T15:46:35.110784+09:00
PR00 (PID:3644): MRP0: Incarnation has changed! Retry recovery...
フラッシュバック・データベースが完了すると、Data Guard が再同期されます。
DGMGRL> SHOW CONFIGURATION
構成 - dgtest_config
保護モード: MaxPerformance
メンバー:
O19A - プライマリ・データベース
O19S - フィジカル・スタンバイ・データベース
ファスト・スタート・フェイルオーバー: Disabled
構成ステータス:
SUCCESS (ステータスは10秒前に更新されました)
スタンバイ・データベースは一時的に ORPHAN ステータスとなるインカネーションを経由するため、CURRENT インカネーション番号が更に進んでいます。プライマリ・データベースとインカネーション番号が異なりますが、この状態でも Data Guard 同期はできるようです。
SQL> SELECT incarnation#, status FROM v$database_incarnation ORDER BY 1;
INCARNATION# STATUS
------------ -------
1 PARENT
2 PARENT
3 ORPHAN
4 CURRENT
上記の動作はマニュアル[Oracle Data Guard 概要および管理」の「15.3.1 特定時点へのフィジカル・スタンバイ・データベースのフラッシュバック」 で説明されています。
Author: Noriyoshi Shinoda / Date: August 5, 2025