本文書は JPOUG Advent Calendar 2022 12日目の記事です。Oracle Database 21c の Active Data Guard スタンバイ・インスタンスで PDB の操作を試しました。
PDB の状態
Data Guard のスタンバイ・インスタンスでは PDB の状態はプライマリ・インスタンスとは別に管理されます。このため、プライマリ・インスタンスでオープンされた PDB はスタンバイ側では MOUNTED 状態となります。
プライマリ・インスタンスで PDB をオープンすると、プラガブル・データベース O21APDB1 は READ WRITE 状態(OPEN 状態)に移行します。
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PRIMARY
SQL> ALTER PLUGGABLE DATABASE O21APDB1 OPEN;
プラガブル・データベースが変更されました。
SQL> SHOW pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 O21APDB1 READ WRITE NO
4 O21APDB2 MOUNTED
一方で、スタンバイ・インスタンス上で確認すると、PDB は MOUNTED 状態のままです。PDB の状態は Data Guard プライマリとスタンバイ間では同期されていないことがわかります。
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SQL> SHOW pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 O21APDB1 MOUNTED
4 O21APDB2 MOUNTED
スタンバイ・インスタンスでの PDB 操作
CDB インスタンスが OPEN 状態ではなく MOUNT 状態でリカバリ実行中の場合、プラガブル・データベースの操作は失敗します。PDB を利用する場合はスタンバイ・インスタンスを OPEN READ ONLY 状態に変更してから ALTER PLUGGABLE DATABASE OPEN 文を実行します。
SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
MOUNTED
SQL> ALTER PLUGGABLE DATABASE o21apdb1 OPEN;
ALTER PLUGGABLE DATABASE o21apdb1 OPEN
*
行1でエラーが発生しました。:
ORA-01109: データベースがオープンされていません。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
データベースが変更されました。
SQL> ALTER DATABASE OPEN READ ONLY;
データベースが変更されました。
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
データベースが変更されました。
SQL> ALTER PLUGGABLE DATABASE o21apdb1 OPEN;
プラガブル・データベースが変更されました。
インスタンスの再起動と PDB の状態
次回インスタンスが起動したときに PLUGGABLE DATABASE の状態を維持するためには、ALTER PLUGGABLE DATABASE SAVE STATE 文を実行します。
SQL> ALTER PLUGGABLE DATABASE O21APDB1 SAVE STATE;
プラガブル・データベースが変更されました。
インスタンス再起動後に PDB の状態を確認すると自動的にオープン状態になります。状態を維持する設定は DBA_PDB_SAVED_STATES ビューで確認できます。
SQL> SELECT con_name, state FROM DBA_PDB_SAVED_STATES;
CON_NAME STATE
-------------------- --------------
O21APDB1 OPEN
上記の状態でスタンバイ・インスタンスを再起動して状態を確認しました。DBA_PDB_SAVED_STATES ビューでは OPEN 状態になるように見えますが、実際の PDB は MOUNTED 状態のままでした。このため Data Guard スタンバイ・インスタンスでは ALTER PLUGGABLE DATABASE SAVE STATE 文は利用できないことがわかります。
SQL> SELECT DATABASE_ROLE FROM V$DATABASE;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SQL> SELECT name, open_mode FROM v$pdbs;
NAME OPEN_MODE
------------------------------ ----------
PDB$SEED READ ONLY
O21APDB1 MOUNTED
O21APDB2 MOUNTED
明日の Advent Calendar は ts_carp さんによる 「Enterprise Mangaer,Diag,Tuning,RATを活用したOracle Databaseの性能チューニング方法の自己学習に最適なOracle LiveLabsのワークショップご紹介
」です。