Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
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
- Una CDB principal y una CDB en espera.
- Solo una CDB puede estar en modo de lectura-escritura.
- La recuperación ante desastres (DR) solo es posible en el nivel de la CDB.
- El switchover o el failover solo son posibles en el nivel de la CDB.
Arquitectura de Oracle Data Guard por PDB (DBG)
- Dos CDB principales.
- Ambos son de lectura-escritura abierta, ID de Oracle Database diferente (DBID).
- El switchover y el failover son posibles a nivel de PDB.
- No es necesario realizar operaciones de switchover o failover en una CDB completa.
Características y características
- Replicación de PDB entre dos CDB primarias.
- Se aplica protección a nivel de PDB mediante tiempo real.
- Transporte de redo asíncrono.
- Failover de PDB sin pérdida de datos si la CDB de origen sigue estando disponible.
- Se está recuperando un espacio automático del origen.
- Consulta en tiempo real en la PDB de destino.
- No es necesario realizar un failover en una base de datos de contenedores completa.
- Transición de roles a nivel de PDB mediante el broker.
Casos de uso
-
Mantenimiento planificado y nuevo equilibrio de carga de trabajo:
- Drenar una CDB para el mantenimiento conmutando una PDB a la vez.
- Vuelva a equilibrar la carga de trabajo realizando un switchover de las PDB individuales.
-
Protección de PDB enferma:
- Realice un failover de una única PDB en estado fallido sin que esto afecte a toda la CDB.
-
Pruebas de recuperación ante desastres de PDB única:
- Realice pruebas de recuperación ante desastres periódicas de una aplicación a la vez.
Objetivos
- Configuración, switchover y failover de PDB de DG paso a paso: configure Oracle Data Guard a nivel de PDB, mientras que tanto la base de datos primaria como la secundaria están en modo de lectura-escritura.
Requisito
-
Cree una red virtual en la nube (VCN) en la región Ashburn y San Jose.
-
Establezca una conexión de intercambio de tráfico remoto (RPC) entre las redes virtuales en la nube de Ashburn y San José.
-
Asegúrese de tener otros requisitos relacionados con Oracle Data Guard.
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
-
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).
-
Active el registro flash y fuerce el registro en ambas bases de datos.
-
Configure el destino de archivo de registro en el área de recuperación rápida (FRA).
-
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
-
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
-
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
-
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
-
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
-
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.
-
Sitio Principal:
[oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash** DGMGRL> CREATE CONFIGURATION "CDB1_ash" AS PRIMARY DATABASE IS "CDB1_ash**" CONNECT IDENTIFIER IS "CDB1_ash"; DGMGRL> show configuration verbose;**
-
Ubicación secundaria:
[oracle@sjCDB2 admin]$ dgmgrl /@CDB2_sj DGMGRL> CREATE CONFIGURATION "CDB2_sj" AS PRIMARY DATABASE IS "CDB2_sj" CONNECT IDENTIFIER IS "CDB2_sj"; DGMGRL> show configuration verbose;
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
-
Conéctese a cada base de datos de contenedores y abra las PDB si aún no están abiertas.
-
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. -
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
-
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.
-
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.
-
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
-
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
-
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
-
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.
-
Compruebe la cartera en el contenedor de origen o la PDB.
SET LINESIZE 200 COLUMN wrl_parameter FORMAT A39 select * from v$encryption_wallet;
-
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#";
-
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;
-
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.
-
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#"';
-
Copie los archivos de datos en el destino.
[oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
-
Transfiera las claves de TDE.
Export / Import CDB/PDB key from CDB2 to CDB1
-
Agregue los redo logs en espera para la PDB de DG y valide.
-
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.
-
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>
-
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
-
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.
-
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)
Enlaces relacionados
Agradecimientos
- Autor: Dharmesh Patel (Arquitecto principal de la nube, Oracle North America Cloud Services - NACIE)
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.
Set up an Oracle Data Guard at the Pluggable Database Level
F99049-02
June 2024