0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Data Guard スタンバイ・データベースの自動フラッシュバックを試す(Oracle Database 19c)

Posted at

フラッシュバック・データベースと Data Guard

 フラッシュバック・データベース機能は更新処理を巻き戻し、データベースを過去の状態に強制的に戻す便利な機能です。しかし Data Guard 環境ではプライマリ・データベースを過去に戻すと、スタンバイ・データベースの方が新しい状態に陥ります。Oracle Database には、スタンバイ側が新しい状態になったことを検知すると、スタンバイ側も自動的にフラッシュバックを行う機能が提供されています。
 本記事ではプライマリ・データベースをフラッシュバック機能で巻き戻し、スタンバイ・データベースが自動的に追随することを確認します。

必要な設定

 Data Guard 構成が確立し、プライマリ・データベースとスタンバイ・データベースが同期していることを確認します。

初期状態(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 文を使ってデータベースを強制的にオープンします。

フラッシュバック前の SCN 情報とインカネーション情報
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 句を指定したオープンを行います。

フラッシュバックの実行と RESETLOGS 指定によるオープン
RMAN> FLASHBACK DATABASE TO SCN 34023286;

flashback25-08-04で開始しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=396 デバイス・タイプ=DISK


メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:01

flashback25-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 コマンドによる確認(Data Guard 停止)
DGMGRL> SHOW CONFIGURATION

構成 - dgtest_config

  保護モード: MaxPerformance
  メンバー:
  O19A - プライマリ・データベース
    エラー: ORA-16782: インスタンスが読取りおよび書込みアクセス用にオープンしていません

    O19S - フィジカル・スタンバイ・データベース
      エラー: ORA-16700: スタンバイ・データベースはプライマリ・データベースと異なっています。

ファスト・スタート・フェイルオーバー:  Disabled

構成ステータス:
ERROR   (ステータスは59秒前に更新されました)

スタンバイ・データベースの alert ログを確認

 スタンバイ・データベースの alert ログを確認します。新しいインカネーションへの切り替わりを検知し、Flashback database によりスタンバイ・データベースを自動的に過去に巻き戻しています。

alert.log の確認
 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 が再同期されます。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?