Note:

Configuración de Oracle Data Guard en el Nivel de Base de Datos de Conexión

Introducción

Oracle Data Guard protege las bases de datos de conexión (PDB) individuales en lugar de toda la base de datos de contenedor (CDB). Esto significa que una configuración de Oracle Data Guard por base de datos conectable (DG PDB) tendrá dos CDB principales en lugar de una CDB principal y una CDB en espera. Cada CDB contendrá PDB abiertas de lectura-escritura (protegidas eventualmente por una PDB de destino en la CDB remota) y PDB montadas que protegen las PDB correspondientes en la CDB remota.

Aprenderemos a configurar un Data Guard en el nivel de PDB de CDB1 a CDB2 y, a la inversa, mientras ambas CDB están en modo de lectura-escritura. Además, veremos switchover y failover en el nivel de PDB sin ninguna interrupción en el nivel de contenedor o en el resto de las PDB del contenedor.

En este tutorial se describe cómo utilizar DG PDB, un Oracle Data Guard para PDB, en lugar de CDB.

Nota: La PDB de DG no está soportada con las herramientas de Oracle Cloud Infrastructure (OCI) en Oracle Base Database Service.

Arquitectura tradicional por CDB

image

Arquitectura de Oracle Data Guard por PDB (DBG)

image

Características y características

Casos de uso

Objetivos

Requisito

Tarea 1: Configuración de Data Guard en el nivel de PDB de CDB1 a CDB2

PDB principal: CDB1_PDB1 AT CDB1_ASH

PDB en espera: CDB1_PDB1 AT CDB2_SJ

Entorno:

Región de OCI Ashburn (ASH) San José (SJ)
Base de datos base de Oracle Sistema de base de datos Sistema de base de datos
Versión de Oracle 23,3 23,3
Nombre del host ashvmdb1 sjvmdb2
Nombre único de la base de datos CDB1_ASH CDB2_SJ
Nombre de CDB CDB1 CDB2
PDB principal CDB1_PDB1, CDB1_PDB2 CDB2_PDB3, CDB2_PDB4
PDB en espera CDB2_PDB3 CDB1_PDB1
VCN/Subnet (DEFAULT) VCN_ASH/subred pública-VCN_ASH VCN_SJ/subred pública-VCN_SJ
IP Privada 10 192,168

Tarea 1.1: Preparación de las bases de datos

  1. Cree dos CDB y dos PDB a través de la consola de OCI, ambas bases de datos de Oracle Database 23ai cifradas con cifrado de datos transparente (TDE).

  2. Active el registro flash y fuerce el registro en ambas bases de datos.

  3. Configure el destino de archivo de registro en el área de recuperación rápida (FRA).

  4. Active Oracle Data Guard Broker.

Aprovisionamiento 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='\*';

Aprovisionamiento 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;

Tarea 1.2: Establecimiento de una conexión de sustrato de red transparente (TNS) entre ambas CDB

  1. Valide la conexión entre ambos nodos de base de datos.

    curl -sv telnet://10.0.0.192:1521
    curl -sv telnet://192.168.0.202:1521
    
  2. Configure los archivos de configuración de red en cada host para facilitar las conexiones a las bases de datos de origen y destino.

    $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)
    )
    )
    

Tarea 1.3: Establecimiento de una conexión sin contraseña mediante una cartera

  1. En cada host, cree un directorio que contenga la cartera y proteja la cartera definiendo la protección adecuada en el directorio.

    $ mkdir -p $ORACLE_HOME/dbs/wallets
    $ chmod -R 700 $ORACLE_HOME/dbs/wallets
    
  2. Cree carteras que contengan las credenciales necesarias para crear y gestionar la configuración de PDB de DG.

    $ 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. Valide la conexión sin contraseña en ambas bases de datos. En este tutorial, hemos utilizado la misma contraseña durante el aprovisionamiento de la base de datos.

    • Configure sqlnet.ora para utilizar la cartera.

    • Ahora, tenemos que agregar la cartera en la configuración sqlnet.ora que utilizará Oracle.

    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
    
    

Tarea 1.4: Creación de la Configuración de Oracle Data Guard Broker de la Base de Datos de Origen y Destino

Conéctese a la base de datos de contenedores de origen y destino mediante la cartera y cree una configuración con la interfaz de línea de comandos (DGMGRL) de Oracle Data Guard. Es lo mismo que para una configuración normal de Oracle Data Guard. La única diferencia es que tenemos que hacerlo para ambas CDB, ya que ambas son bases de datos primarias.

Tarea 1.5: Establecimiento de la conexión entre configuraciones

Esta tarea es diferente de una configuración normal de Oracle Data Guard. Normalmente, después de agregar la base de datos primaria, agregamos la base de datos en espera, pero ahora utilizaremos una sintaxis diferente. Con DGMGRL, conéctese a la base de datos de contenedores de origen y establezca una conexión con la base de datos de destino.

[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;

Tarea 1.6: Preparación de las bases de datos para la DG PDB

  1. Conéctese a cada base de datos de contenedores y abra las PDB si aún no están abiertas.

  2. El comando EDIT CONFIGURATION PREPARE DGPDB de Oracle Data Guard Broker asume que las configuraciones de la base de datos de contenedores de origen y la base de datos de contenedores de destino se han configurado y activado.

  3. Los comandos se abrirán para introducir una contraseña para la cuenta DGPDB_INT de cada una de las bases de datos de contenedores y, a continuación, configurar las estructuras internas necesarias para proporcionar protección de Oracle Data Guard o cambiar roles para una PDB.

    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>
    

    Nota: En aras de la simplicidad, he utilizado la misma contraseña que la contraseña de base de datos o de TDE, pero la contraseña puede ser diferente.

Tarea 1.7: Configuración de la protección de Oracle Data Guard para la PDB de origen

  1. Configure la protección de nivel de PDB de Oracle Data Guard para la PDB de origen configurando la PDB de destino en la base de datos de contenedores.

  2. Ejecute el comando ADD PLUGGABLE DATABASE para crear la PDB de destino en la base de datos de contenedores de destino.

    PDB principal: CDB1_PDB1 AT CDB1_ASH

    PDB en espera: CDB1_PDB1 AT CDB2_SJ

    En contenedor objetivo:

    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
    

Tarea 1.8: Copia de los Archivos de Datos en el Destino

Cree instancias de la PDB de destino copiando todos los archivos asociados a la PDB de origen en la ubicación de la PDB de destino.

  1. Identifique una lista de archivos en la PDB de origen.

    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. Copie los archivos de datos de PDB en el contenedor de destino.

    [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. Compruebe los archivos de datos en la PDB de destino.

    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. Cambiar el nombre de los archivos de datos. El nombre de archivo de destino se puede obtener de los logs de salida de 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
    

Tarea 1.9: Transferencia de las claves de TDE

Necesitamos copiar la clave de cartera tanto para la CDB como para la PDB. Copie la clave de CDB de origen en la CDB de destino y la clave de PDB de origen en la PDB de destino para la que estamos configurando Data Guard.

  1. Compruebe la cartera en el contenedor de origen o la PDB.

    SET LINESIZE 200
    COLUMN wrl_parameter FORMAT A39
    select * from v$encryption_wallet;
    
  2. Exporte las claves de cifrado (CDB y PDB) de la base de datos origen.

    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. Copie la clave de cifrado en el servidor de destino e impórtela en la base de datos de destino (CDB y PDB respectivamente).

    [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. Valide la clave importada.

    select * from v$encryption_keys order by creation_time;
    

Tarea 1.10: Adición de Redo Logs en Espera (SRL) a la PDB y Validación

Cree las SRL a partir de una PDB en espera para recibir redo de origen ajeno. Esta operación solo es necesaria una vez para toda la CDB y no necesita un juego diferente de SRL por PDB.

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

Tarea 1.11: Cambiar el estado de la base de datos en espera a APPLY-ON

Conéctese a DGMGRL desde cualquier base de datos e inicie el transporte de redo desde la PDB de origen a la PDB de destino.

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

Tarea 2: (Opcional) Configurar Oracle Data Guard a nivel de PDB de CDB2 a CDB1

Esta es una tarea opcional si deseamos configurar Oracle Data Guard de CDB2 a CDB1, así como bidireccional.

PDB principal: CDB2_PDB3 AT CDB2_SJ

PDB en espera: CDB2_PDB3 AT CDB1_ASH

Nota: Solo necesitamos cambiar la CDB o PDB de origen y destino y repetir la tarea 1.7 a 1.11.

  1. Configure la protección de Oracle Data Guard para la PDB de origen.

    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. Copie los archivos de datos en el destino.

    [oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
    
  3. Transfiera las claves de TDE.

    Export / Import CDB/PDB key from CDB2 to CDB1
    
  4. Agregue los redo logs en espera para la PDB de DG y valide.

  5. Cambie el estado de la base de datos en espera a 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>
    

Tarea 3: Switchover de la Base de Datos de Conexión

Invertir los roles de la PDB de origen y su PDB de destino designada mediante Oracle Data Guard Broker DGMGRL. Sin efecto a nivel de contenedor.

  1. Realización de un failover.

    [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. Abra la nueva PDB en modo abierto.

    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. Exporte las claves de cifrado (solo CDB) del nuevo origen al nuevo destino.

    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. Nuevo redolog en espera.

    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>
    

Tarea 4: Failover de la Base de Datos de Conexión

Durante un failover, la PDB de destino especificada se cambia al rol de origen. Si la base de datos de contenedor de origen original y otras PDB funcionan correctamente, la PDB se debe volver a instanciar como PDB de destino antes de aplicar cualquier redo de la nueva PDB de origen.

$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

Tarea 5: Eliminación de una configuración de PDB de DG

Ejecute el siguiente comando para eliminar la configuración.

[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)

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.