1
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?

Active Data Guard スタンバイ・インスタンスでシーケンス操作を試す(Oracle Database 19c)

Last updated at Posted at 2021-04-27

Oracle Database Active Data Guardはプライマリ・インスタンスからのREDOを適用しつつ、スタンバイ・インスタンスをREAD ONLY状態で稼働するオプションです。ここではスタンバイ・インスタンスでシーケンス操作を実行します。

初期状態

プライマリの状態

プライマリ・インスタンスはオープン状態です、シーケンスを作成し、キャッシュ20を指定しています。

SQL> SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PRIMARY          READ WRITE

SQL> CREATE SEQUENCE seq01 CACHE 20;

順序が作成されました。

スタンバイの状態

スタンバイ・インスタンスはREDOを適用しつつ、READ ONLYモードでオープンしています。

SQL> SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY WITH APPLY

シーケンスの操作

スタンバイで操作

スタンバイ・インスタンスでシーケンスの操作を行います。正常にシーケンス値が取得できます。

SQL> SELECT seq01.NEXTVAL FROM DUAL;

   NEXTVAL
----------
         1

プライマリで操作

次にプライマリ・インスタンスでシーケンス値を取得します。キャッシュ分を加えた値が取得されます。このことからActive Data Guard環境ではプライマリ・インスタンスとスタンバイ・インスタンス間でシーケンス値の重複を防ぐ動作になっていることがわかります。シーケンスのキャッシュを使い切るタイミングでプライマリ・インスタンスのログオン・トリガー(SYSユーザ)が動作することが確認できるため、スタンバイ・インスタンスからプライマリ・インスタンスへ接続が発生し、シーケンスの更新情報を伝えていると思われます。マニュアル に記載された動作です。

SQL> SELECT seq01.NEXTVAL FROM DUAL;

   NEXTVAL
----------
        21

再度スタンバイで操作

再度スタンバイ・インスタンスでシーケンス値を何度か取得します。プライマリ・インスタンスで、シーケンス値21~40が予約されているため、シーケンス値20の次は41になっています。

SQL> SELECT seq01.NEXTVAL FROM DUAL;

   NEXTVAL
----------
         2
...
SQL> SELECT seq01.NEXTVAL FROM DUAL;

   NEXTVAL
----------
        20

SQL> SELECT seq01.NEXTVAL FROM DUAL;
   NEXTVAL
----------
        41

Active DataGuardを解除

リアルタイム適用を停止して再度実行してみます。Active Data Guardを停止すると、スタンバイ・インスタンスはオープンのままですが、シーケンスの取得は失敗することがわかります。

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

データベースが変更されました。

SQL> SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE;

DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY

SQL> SELECT seq01.NEXTVAL FROM DUAL;
SELECT seq01.NEXTVAL FROM DUAL
       *
行1でエラーが発生しました。:
ORA-02289: 順序が存在しません。
1
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
1
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?