ノート:

プラガブル・データベース・レベルでのOracle Data Guardの設定

イントロダクション

Oracle Data Guardは、コンテナ・データベース(CDB)全体ではなく、個々のプラガブル・データベース(PDB)を保護します。つまり、プラガブル・データベース(DG PDB)ごとのOracle Data Guard構成には、1つのプライマリCDBと1つのスタンバイCDBではなく、2つのプライマリCDBが含まれます。各CDBには、読取り/書込みがオープンされたPDB (最終的にリモートCDBのターゲットPDBによって保護される)と、リモートCDB内の対応するPDBを保護するマウントされたPDBが含まれます。

データ・ガードをPDBレベルでCDB1からCDB2に設定する方法と、逆に両方のCDBが読取り/書込みモードである方法について学習します。さらに、コンテナ・レベルまたはコンテナ内の他のPDBで停止することなく、PDBレベルでスイッチオーバーおよびフェイルオーバーが表示されます。

このチュートリアルでは、CDBではなくPDB用のOracle Data GuardであるDG PDBの使用方法について説明します。

ノート: DG PDBは、Oracle Base Database ServiceのOracle Cloud Infrastructure (OCI)ツールではサポートされていません。

従来のCDBごとのアーキテクチャ

イメージ

Oracle Data Guard/PDB (DG PDB)のアーキテクチャ

イメージ

機能と特性

ユースケース

目的

前提条件

タスク1: CDB1からCDB2へのPDBレベルでのData Guardの設定

プライマリPDB: CDB1_PDB1 AT CDB1_ASH

スタンバイPDB: CDB1_PDB1 AT CDB2_SJ

環境:

OCIリージョン アッシュバーン(ASH) サンホセ(SJ)
Oracleベース・データベース DB System DB System
Oracleバージョン 23.3.0.23 23.3.0.23
ホスト名 ashvmdb1 sjvmdb2
一意のデータベース名 CDB1_ASH CDB2_SJ
CDB名 CDB1 CDB2
プライマリPDB CDB1_PDB1, CDB1_PDB2 CDB2_PDB3, CDB2_PDB4
スタンバイPDB CDB2_PDB3 CDB1_PDB1
VCN/サブネット(デフォルト) VCN_ASH/パブリック・サブネット-VCN_ASH VCN_SJ/パブリック・サブネット-VCN_SJ
プライベートIP 10.0.0.192 192.168.0.202

タスク1.1: データベースの準備

  1. OCIコンソールを使用して2つのCDBと2つのPDBを作成します。どちらも透過的データ暗号化(TDE)暗号化されるOracle Database 23aiデータベースです。

  2. フラッシュ・ロギングを有効にし、両方のデータベースでロギングを強制します。

  3. Fast Recovery Area (FRA)へのログ・アーカイブ宛先を構成します。

  4. Oracle Data Guard Brokerを有効にします。

CDB1をプロビジョニングします。

col FORCE_LOGGING for a5
set lines 300 pages 100
select name,open_mode,LOG_MODE,FORCE_LOGGING,FLASHBACK_ON,DB_UNIQUE_NAME from gv$database;

NAME OPEN_MODE LOG_MODE FORCE FLASHBACK_ON DB_UNIQUE_NAME
--------- -------------------- ------------ ----- ------------------ ------------------------------
CDB1 READ WRITE ARCHIVELOG YES NO CDB1_ASH

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB1 READ WRITE NO
4 CDB1_PDB2 READ WRITE NO

SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE FLASHBACK ON;
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/CDB1_ash/PARAMETERFILE/dr1CDB1.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+DATA/CDB1_ash/PARAMETERFILE/dr2CDB1.dat' scope=both sid='\*';
SQL> alter system set standby_file_management = AUTO scope = both;
SQL> ALTER SYSTEM SET dg_broker_start=TRUE scope=both sid='\*';

CDB2をプロビジョニングします。

col FORCE_LOGGING for a5
set lines 300 pages 100
select name,open_mode,LOG_MODE,FORCE_LOGGING,FLASHBACK_ON,DB_UNIQUE_NAME from gv$database;

NAME OPEN_MODE LOG_MODE FORCE FLASHBACK_ON DB_UNIQUE_NAME
--------- -------------------- ------------ ----- ------------------ ------------------------------
CDB2 READ WRITE ARCHIVELOG YES NO CDB2_SJ

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 CDB2_PDB3 READ WRITE NO
5 CDB2_PDB4 READ WRITE NO

SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE FLASHBACK ON;
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/CDB2_sj/PARAMETERFILE/dr1CDB2.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+DATA/CDB2_sj/PARAMETERFILE/dr2CDB2.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET dg_broker_start=TRUE scope=both sid='\*';
SQL> alter system set standby_file_management = AUTO scope = both;

タスク1.2: 両方のCDB間の透過的ネットワーク基板(TNS)接続の確立

  1. 両方のデータベース・ノード間の接続を検証します。

    curl -sv telnet://10.0.0.192:1521
    curl -sv telnet://192.168.0.202:1521
    
  2. 各ホスト上のネットワーク構成ファイルを、ソース・データベースとターゲット・データベースへの接続を容易にするように構成します。

    $vi $ORACLE_HOME/network/admin/tnsnames.ora
    
    CDB1_ASH =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.192)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = CDB1_ASH.sub02090909270.vcnash.oraclevcn.com)
    )
    )
    
    CDB2_SJ =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.202)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = CDB2_SJ.sub02090543360.vcnsj.oraclevcn.com)
    )
    )
    

タスク1.3: Walletを使用したパスワードなし接続の確立

  1. 各ホストで、ウォレットを格納するディレクトリを作成し、そのディレクトリに対して適切な保護を設定することでウォレットを保護します。

    $ mkdir -p $ORACLE_HOME/dbs/wallets
    $ chmod -R 700 $ORACLE_HOME/dbs/wallets
    
  2. DG PDB構成の作成および管理に必要な資格証明を含むウォレットを作成します。

    $ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -create
    Oracle Secret Store Tool Release 23.0.0.0.0 - Production
    Version 23.0.0.0.0
    Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved.
    
    Enter password:
    Enter password again:
    
    
    [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -createCredential CDB1_ash 'sys'
    Oracle Secret Store Tool Release 23.0.0.0.0 - Production
    Version 23.0.0.0.0
    Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
    
    Your secret/Password is missing in the command line
    Enter your secret/Password:
    Re-enter your secret/Password:
    Enter wallet password:
    [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -createCredential CDB2_sj 'sys'
    Oracle Secret Store Tool Release 23.0.0.0.0 - Production
    Version 23.0.0.0.0
    Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
    
    Your secret/Password is missing in the command line
    Enter your secret/Password:
    Re-enter your secret/Password:
    Enter wallet password:
    [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -listCredential
    Oracle Secret Store Tool Release 23.0.0.0.0 - Production
    Version 23.0.0.0.0
    Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
    
    Enter wallet password:
    List credential (index: connect_string username)
    2: CDB2_sj sys
    1: CDB1_ash sys
    
  3. 両方のデータベースでパスワードなし接続を検証します。このチュートリアルでは、データベースのプロビジョニング中に同じパスワードを使用しました。

    • ウォレットを使用するようにsqlnet.oraを構成します。

    • ここで、Oracleが使用するsqlnet.ora構成にウォレットを追加する必要があります。

    vi $ORACLE_HOME/network/admin/sqlnet.ora
    
    NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
    WALLET_LOCATION =
        (SOURCE =
        (METHOD = FILE)
        (METHOD_DATA =
            (DIRECTORY = /u01/app/oracle/product/23.0.0.0/dbhome_1/dbs/wallets/dgpdb)
        )
    )
    SQLNET.WALLET_OVERRIDE = TRUE
    
    Stop and restart each database and Listener to configure redo transport to use the wallet. Because there are no static services configured, use OS authentication on each host to do this.
    
    Validate that client connections to the source and target container databases are now possible using the wallets by issuing the following commands on each host:
    
    sqlplus /@CDB1_ash as sysdba
    sqlplus /@CDB2_sj as sysdba
    
    

タスク1.4: ソースおよびターゲット・データベースのOracle Data Guard Broker構成の作成

ウォレットを使用してソースおよびターゲットのコンテナ・データベースに接続し、Oracle Data Guardコマンドライン・インタフェース(DGMGRL)を使用して構成を作成します。これは、通常のOracle Data Guard構成の場合と同じです。唯一の違いは、両方がプライマリ・データベースであるため、両方のCDBに対してこれを行う必要があることです。

タスク1.5: 構成間の接続の確立

このタスクは、通常のOracle Data Guard構成とは異なります。通常、プライマリ・データベースを追加した後、スタンバイ・データベースを追加しますが、ここでは別の構文を使用します。DGMGRLを使用して、ソース・コンテナ・データベースに接続し、ターゲット・データベースとの接続を確立します。

[oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash

DGMGRL> add configuration CDB2_sj connect identifier is CDB2_sj;
DGMGRL> show configuration verbose;
DGMGRL> show configuration verbose CDB2_sj;
DGMGRL> enable configuration all;

タスク1.6: DG PDB用のデータベースの準備

  1. 各コンテナ・データベースに接続し、PDBがまだオープンされていない場合はそれらをオープンします。

  2. Oracle Data Guard BrokerのEDIT CONFIGURATION PREPARE DGPDBコマンドは、ソース・コンテナ・データベースおよびターゲット・コンテナ・データベースの構成が構成され、有効になっていることを前提としています。

  3. このコマンド・プロンプトは、オープンして、各コンテナ・データベースのDGPDB_INTアカウントのパスワードを入力し、PDBに対するOracle Data Guard保護の提供またはロールの変更に必要な内部構造を構成します。

    SQL> ALTER PLUGGABLE DATABASE ALL OPEN;
    SQL> show pdbs
    
    dgmgrl /@CDB1_ash
    DGMGRL> EDIT CONFIGURATION PREPARE DGPDB;
    Enter password for DGPDB_INT account at CDB1_ASH:
    Enter password for DGPDB_INT account at CDB2_SJ:
    Prepared Data Guard for Pluggable Database at CDB2_SJ.
    Prepared Data Guard for Pluggable Database at CDB1_ASH.
    DGMGRL>
    

    ノート:簡単にするために、DBまたはTDEパスワードと同じパスワードを使用しましたが、パスワードが異なる場合があります。

タスク1.7: ソースPDBのOracle Data Guard保護の構成

  1. コンテナ・データベースにターゲットPDBを構成することで、ソースPDBに対してOracle Data GuardによるPDBレベルの保護を構成します。

  2. ADD PLUGGABLE DATABASEコマンドを実行してターゲット・コンテナ・データベースにターゲットPDBを作成します。

    プライマリPDB: CDB1_PDB1 AT CDB1_ASH

    スタンバイPDB: CDB1_PDB1 AT CDB2_SJ

    ターゲット・コンテナ:

    SQL> show pdbs
    
    CON_ID CON_NAME OPEN MODE RESTRICTED
    ---------- ------------------------------ ---------- ----------
    2 PDB$SEED READ ONLY NO
    4 CDB2_PDB3 READ WRITE NO
    5 CDB2_PDB4 READ WRITE NO
    
    
    dgmgrl /@CDB1_ash
    DGMGRL> ADD PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SOURCE IS CDB1_PDB1 AT CDB1_ash PDBFILENAMECONVERT IS "'+DATA/CDB1_ash','+DATA/CDB2_sj'" 'keystore IDENTIFIED BY "WelC0me_123#"';
    Pluggable Database "CDB1_PDB1" added
    DGMGRL>
    
    SQL> show pdbs
    CON_ID CON_NAME OPEN MODE RESTRICTED
    ---------- ------------------------------ ---------- ----------
    2 PDB$SEED READ ONLY NO
    3 CDB1_PDB1 MOUNTED
    4 CDB2_PDB3 READ WRITE NO
    5 CDB2_PDB4 READ WRITE NO
    

タスク1.8: 宛先へのデータファイルのコピー

ソースPDBに関連付けられているすべてのファイルをターゲットPDBの場所にコピーすることで、ターゲットPDBをインスタンス化します。

  1. ソースPDBのファイルのリストを識別します。

    SQL> select FILE#,NAME from v$datafile where con_id=3;
    
    FILE# NAME                                                                                                     CON_ID
    ---------- ---------------------------------------------------------------------------------------------------- ----------
    8 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.273.1160475741                          3
    9 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.270.1160475747                          3
    10 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.271.1160475753                        3
    12 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.274.1160475857                           3
    
  2. PDBデータファイルをターゲット・コンテナにコピーします。

    [oracle@sjCDB2 ~]$ rman target sys/WelC0me_123#@CDB1_ash auxiliary sys/WelC0me_123#@CDB2_sj
    
    Recovery Manager: Release 23.0.0.0.0 - Production on Fri Feb 9 12:41:14 2024
    Version 23.3.0.23.09
    
    Copyright (c) 1982, 2023, Oracle and/or its affiliates.  All rights reserved.
    
    connected to target database: CDB1 (DBID=3764657260)
    connected to auxiliary database: CDB2 (DBID=3648579145)
    
    RMAN> run {
    allocate channel ch1 type disk;
    backup as copy reuse datafile 8,9,10,12 auxiliary format NEW;
    }
    run {
    2> allocate channel ch1 type disk;
    3> backup as copy reuse datafile 8,9,10,12 auxiliary format NEW;
    4> }
    using target database control file instead of recovery catalog
    allocated channel: ch1
    channel ch1: SID=38 device type=DISK
    
    Starting backup at 09-FEB-24
    channel ch1: starting datafile copy
    input datafile file number=00009 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.270.1160475747
    output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127 tag=TAG20240209T124201
    channel ch1: datafile copy complete, elapsed time: 00:00:08
    channel ch1: starting datafile copy
    input datafile file number=00008 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.273.1160475741
    output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135 tag=TAG20240209T124201
    channel ch1: datafile copy complete, elapsed time: 00:00:08
    channel ch1: starting datafile copy
    input datafile file number=00010 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.271.1160475753
    output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145 tag=TAG20240209T124201
    channel ch1: datafile copy complete, elapsed time: 00:00:04
    channel ch1: starting datafile copy
    input datafile file number=00012 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.274.1160475857
    output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149 tag=TAG20240209T124201
    channel ch1: datafile copy complete, elapsed time: 00:00:04
    Finished backup at 09-FEB-24
    released channel: ch1
    
  3. ターゲットPDBのデータファイルを確認します。

    SQL> show pdbs
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
            2 PDB$SEED                      READ ONLY  NO
            3 CDB1_PDB1                     MOUNTED
            4 CDB2_PDB3                     READ WRITE NO
            5 CDB2_PDB4                     READ WRITE NO
    SQL> alter session set container=CDB1_PDB1;
    Session altered.
    
    SQL>  select name from v$datafile;
    
    NAME
    --------------------------------------------------------------------------------
    +DATA/MUST_RENAME_THIS_DATAFILE_8.4294967295.4294967295
    +DATA/MUST_RENAME_THIS_DATAFILE_9.4294967295.4294967295
    +DATA/MUST_RENAME_THIS_DATAFILE_10.4294967295.4294967295
    +DATA/MUST_RENAME_THIS_DATAFILE_12.4294967295.4294967295
    
  4. データファイル名の変更ターゲット・ファイル名は、RMAN出力ログから取得できます。

    alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_8.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135';
    alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_9.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127';
    alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_10.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145';
    alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_12.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149';
    
    SQL>  select name from v$datafile;
    
    NAME
    ---------------------------------------------------------------------------------------
    +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135
    +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127
    +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145
    +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149
    

タスク1.9: TDEキーの持込み

CDBとPDBの両方のウォレット・キーをコピーする必要があります。ソースCDBキーをターゲットCDBにコピーし、ソースPDBキーをData Guardを設定するターゲットPDBにコピーします。

  1. ソース・コンテナまたはPDBでウォレットを確認してください。

    SET LINESIZE 200
    COLUMN wrl_parameter FORMAT A39
    select * from v$encryption_wallet;
    
  2. ソース・データベースから暗号化キー(CDBおよびPDB)をエクスポートします。

    SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB1_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#";
    SQL> alter session set container=CDB1_PDB1;
    SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB1_PDB1_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#";
    
  3. ターゲット・サーバーで暗号化キーをコピーし、ターゲット・データベース(それぞれCDBおよびPDB)にインポートします。

    [opc@sjCDB2 tmp]$ chmod 777 CDB1_key CDB1_PDB1_key
    SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB1_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP;
    SQL> alter session set container=CDB1_PDB1;
    SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB1_PDB1_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP;
    
  4. インポートしたキーを検証します。

    select * from v$encryption_keys order by creation_time;
    

タスク1.10: PDBへのスタンバイREDOログ(SRL)の追加および検証

スタンバイPDBからSRLを作成して、外部ソースのREDOを受け取ります。この操作はCDB全体で1回のみ必要であり、PDBごとに異なるSRLセットを必要としません。

sqlplus /@CDB2_sj as sysdba

SQL> alter session set container=CDB1_PDB1;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
--------- ------------------------------ ---------- ----------
4 CDB1_PDB1 MOUNTED

SQL> select group#,thread#,bytes from v$standby_log;
no rows selected

SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.

SQL> select group#,thread#,bytes from v$standby_log;
GROUP# THREAD# BYTES
--------- ---------- ----------
1 0 104857600
2 0 104857600
3 0 104857600

タスク1.11: スタンバイの状態をAPPLY-ONに変更する

任意のデータベースからDGMGRLに接続し、ソースPDBからターゲットPDBへのREDO転送を開始します。

DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SET STATE='APPLY-OFF';
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SET STATE='APPLY-ON';
DGMGRL> enable configuration all;

Perform Log switch on source database:
--------------------------------------
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

DGMGRL> show pluggable database CDB1_PDB1 at CDB2_sj;
Pluggable database - CDB1_PDB1 at CDB2_sj
Data Guard Role: Physical Standby
Con_ID: 3
Source: con_id 3 at CDB1_ASH
Transport Lag: 32 seconds (computed 21 seconds ago)
Apply Lag: 32 seconds (computed 21 seconds ago)
Intended State: APPLY-ON
Apply State: Running
Apply Instance: CDB2
Average Apply Rate: 1592 KByte/s
Real Time Query: OFF
Pluggable Database Status:
SUCCESS


DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB1_ASH;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj
CDB1_PDB2 4 None None

DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB2_sj;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Physical Standby CDB1_PDB1 (con_id 3) at CDB1_ash
CDB2_PDB3 4 None None
CDB2_PDB4 5 None None

DGMGRL> VALIDATE PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
Ready for Switchover: NO
Data Guard Role: Physical Standby
Apply State: Waiting for Redo Data
Standby Redo Log Files: 3
Source: CDB1_PDB1 (con_id 3) at CDB1_ASH


sqlplus /@CDB2_sj as sysdba

SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
--------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB1 MOUNTED
4 CDB2_PDB3 READ WRITE NO
5 CDB2_PDB4 READ WRITE NO

タスク2: (オプション) CDB2からCDB1へのPDBレベルでのOracle Data Guardの設定

これは、Oracle Data GuardをCDB2からCDB1、つまり双方向で構成する場合のオプション・タスクです。

プライマリPDB: CDB2_PDB3 AT CDB2_SJ

スタンバイPDB: CDB2_PDB3 AT CDB1_ASH

ノート:ソースおよびターゲットのCDBまたはPDBを変更し、タスク1.7を1.11に繰り返すだけで済みます。

  1. ソースPDBに対してOracle Data Guard保護を構成します。

    dgmgrl /@CDB2_SJ
    DGMGRL> ADD PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH SOURCE IS CDB2_PDB3 AT CDB2_sj PDBFILENAMECONVERT IS "'+DATA/CDB2_sj','+DATA/CDB1_ash'" 'keystore IDENTIFIED BY "WelC0me_123#"';
    
  2. データファイルを宛先にコピーします。

    [oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
    
  3. TDEキーを継承します。

    Export / Import CDB/PDB key from CDB2 to CDB1
    
  4. DG PDBのスタンバイREDOログを追加し、検証します。

  5. スタンバイの状態をAPPLY-ONに変更します。

    DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB1_ash;
    PDB Name PDB ID Data Guard Role Data Guard Partner
    CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj
    VMDB1_PDB2 4 None None
    VMDB2_PDB3 6 Physical Standby VMDB2_PDB3 (con_id 4) at CDB2_sj
    
    DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB2_sj;
    PDB Name PDB ID Data Guard Role Data Guard Partner
    CDB1_PDB1 3 Physical Standby CDB1_PDB1 (con_id 3) at CDB1_ash
    VMDB2_PDB3 4 Primary VMDB2_PDB3 (con_id 6) at CDB1_ash
    VMDB2_PDB4 5 None None
    DGMGRL>
    

タスク3: プラガブル・データベースのスイッチオーバー

Oracle Data Guard Broker DGMGRLを使用して、ソースPDBおよびその指定されたターゲットPDBのロールを元に戻します。コンテナ・レベルでは影響はありません。

  1. 切り替えの実行

    [oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash
    DGMGRL> VALIDATE PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
    
    Ready for Switchover:    NO
    
    Data Guard Role:         Physical Standby
    Apply State:             Not Running
    Standby Redo Log Files:  3
    Source:                  CDB1_PDB1 (con_id 3) at CDB1_ASH
    
    DGMGRL> SWITCHOVER TO PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
    Performing switchover NOW, please wait...
    Switchover succeeded, new primary is "CDB1_pdb1"
    DGMGRL>
    
  2. 新しいPDBをオープン・モードにオープンします。

    sqlplus /@CDB2_sj
    SQL> alter pluggable database CDB1_PDB1 open;
    Pluggable database altered.
    
    SQL> show pdbs
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    ---------- ------------------------------ ---------- ----------
            2 PDB$SEED                      READ ONLY  NO
            3 CDB1_PDB1                     READ WRITE NO
            4 CDB2_PDB3                     READ WRITE NO
            5 CDB2_PDB4                     READ WRITE NO
    
    DGMGRL>  show pluggable database CDB1_PDB1 at CDB2_SJ;
    Pluggable database - CDB1_PDB1 at CDB2_sj
    
    Data Guard Role:     Primary
    Con_ID:              3
    Active Target:       con_id 3 at CDB1_ASH
    
    Pluggable Database Status:
    SUCCESS
    
    DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ASH;
    
    Pluggable database - CDB1_PDB1 at CDB1_ash
    
    Data Guard Role:     Physical Standby
    Con_ID:              3
    Source:              con_id 3 at CDB2_SJ
    Transport Lag:       1 minute (computed 59 seconds ago)
    Apply Lag:           1 minute 35 seconds (computed 59 seconds ago)
    Intended State:      APPLY-ON
    Apply State:         Not Running
    
    Pluggable Database Status:
    ORA-16766: Redo Apply is stopped.
    ORA-28374: typed master key not found in wallet
    
  3. 暗号化キー(CDBのみ)を新しいソースから新しいターゲットにエクスポートします。

    SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB2_CDB_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#";
    keystore altered.
    
    Import them into the target database
    [opc@sjCDB2 tmp]$ chmod 777 mydbkey mydbkeypdb1
    
    SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB2_CDB_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP;
    keystore altered.
    
  4. 新しいスタンバイ・レッドログ。

    DGMGRL> EDIT PLUGGABLE DATABASE CDB2_PDB2 AT CDB2_sj SET STATE='APPLY-OFF';
    Succeeded.
    
    sqlplus /@CDB1_ash
    
    SQL> show pdbs
    
        CON_ID CON_NAME                       OPEN MODE  RESTRICTED
    
            2 PDB$SEED                      READ ONLY  NO
            3 CDB1_PDB1                     MOUNT NO
            4 CDB1_PDB2                     READ WRITE NO
    
    SQL> alter session set container=CDB1_PDB1;
    Session altered.
    
    SQL> select group#,thread#,bytes from v$standby_log;
    no rows selected
    
    SQL> ALTER DATABASE ADD STANDBY LOGFILE;
    Database altered.
    SQL> /
    Database altered.
    SQL> /
    Database altered.
    
    SQL> select group#,thread#,bytes from v$standby_log;
    GROUP# THREAD# BYTES
    
            1          0  104857600
            2          0  104857600
            3          0  104857600
    
    DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-OFF';
    Succeeded.
    DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-ON';
    Succeeded.
    DGMGRL>
    

タスク4: プラガブル・データベースのフェイルオーバー

フェイルオーバー中に、指定されたターゲットPDBがソース・ロールに変更されます。元のソース・コンテナ・データベースおよび他のPDBがすべて正しく機能している場合、新しいソースPDBからのREDOを適用するには、そのPDBをターゲットPDBとして回復する必要があります。

$dgmgrl /@CDB1_ash

DGMGRL> show all pluggable database at CDB1_ash;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj
VMDB1_PDB2 4 None None
VMDB2_PDB3 6 Physical Standby VMDB2_PDB3 (con_id 4) at CDB2_sj

DGMGRL> FAILOVER TO PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
Performing failover NOW, please wait...
Failover succeeded, new primary is "CDB1_PDB1".
DGMGRL>

DGMGRL> show pluggable database CDB1_PDB1 at CDB2_sj
Pluggable database - CDB1_PDB1 at CDB2_sj
Data Guard Role: Primary
Con_ID: 3
Active Target: con_id 3 at CDB1_ASH needs to be reinstated
Pluggable Database Status:

DGM-17450: not protected

DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ash;
Pluggable database - CDB1_PDB1 at CDB1_ash
Data Guard Role: Physical Standby
Con_ID: 3
Source: (unknown)
Pluggable Database Status:

ORA-16661: The standby database must be reinstated.

DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-OFF';
Succeeded.
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-ON';
Succeeded.

DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ash;
Pluggable database - CDB1_PDB1 at CDB1_ash
Data Guard Role: Physical Standby
Con_ID: 3
Source: con_id 3 at CDB2_SJ
Transport Lag: 5 minutes 48 seconds (computed 21 seconds ago)
Apply Lag: (unknown)
Intended State: APPLY-ON
Apply State: Running
Apply Instance: VMDB1
Average Apply Rate: (unknown)
Real Time Query: OFF
Pluggable Database Status:
SUCCESS

タスク5: DG PDB構成の削除

構成を削除するには、次のコマンドを実行します。

[oracle@ashCDB1 ~\]$ dgmgrl /@CDB1_ash

DGMGRL> REMOVE PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH REMOVE DATAFILES;
Pluggable Database 'CDB1_PDB1' removed.

DGMGRL> SHOW PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH;
No pluggable databases at database 'CDB2_SJ'

DGMGRL> REMOVE CONFIGURATION CDB1_ASH;
Succeeded.

DGMGRL> SHOW CONFIGURATION;
Configuration - Boston
Protection Mode: MaxPerformance
Members:
CDB1_ASH - Primary database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 25 seconds ago)

承認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。