Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se inscrever em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Configurar um Oracle Data Guard no Nível do Banco de Dados Plugável
Introdução
O Oracle Data Guard protege bancos de dados plugáveis individuais (PDBs) em vez de todo o banco de dados contêiner (CDB). Isso significa que uma configuração do Oracle Data Guard por Banco de Dados Plugável (DG PDB) terá dois CDBs principais em vez de um CDB principal e um CDB stand-by. Cada CDB conterá PDBs abertos de leitura/gravação (eventualmente protegidos por um PDB de destino no CDB remoto) e PDBs montados que protegem os PDBs correspondentes no CDB remoto.
Aprenderemos a configurar um data guard no nível do PDB de CDB1 a CDB2 e, inversamente, enquanto ambos os CDBs estão no modo de leitura e gravação. Além disso, veremos switchover e failover no nível do PDB sem nenhuma interrupção no nível do contêiner ou no restante dos PDBs no contêiner.
Este tutorial descreve como usar o DG PDB, um Oracle Data Guard para PDBs, em vez de CDBs.
Observação: o DG PDB não é suportado com o conjunto de ferramentas do Oracle Cloud Infrastructure (OCI) no Oracle Base Database Service.
Arquitetura tradicional por CDB
- Um CDB principal e um stand-by.
- Somente um CDB pode estar no modo de leitura e gravação.
- A DR (Recuperação de Desastre) só é possível no nível do CDB.
- Switchover ou Failover é possível apenas no nível do CDB.
Arquitetura do Oracle Data Guard por PDB (DG PDB)
- Dois CDBs primários.
- Ambos são leitura-gravação aberta, ID do Oracle Database diferente (DBID).
- O switchover e o failover são possíveis no nível do PDB.
- Não há necessidade de switchover / failover de um CDB completo.
Características e Características
- Replicação do PDB entre dois CDBs principais.
- Proteção no nível do PDB usando aplicação em tempo real.
- Transporte de redo assíncrono.
- Zero failover do PDB de perda de dados se o CDB de origem ainda estiver disponível.
- Extração automática de lacunas da origem.
- Consulta em tempo real no PDB de destino.
- Não é necessário fazer failover de um banco de dados contêiner completo.
- Transição de função no nível do PDB usando o broker.
Casos de Uso
-
Manutenção Planejada e Rebalanceamento da Carga de Trabalho:
- Escove um CDB para manutenção alternando um PDB por vez.
- Rebalancear a carga de trabalho alternando PDBs individuais.
-
Proteção contra PDB em Caso de Doença:
- Faça failover de um único PDB em um estado com falha sem afetar todo o CDB.
-
Testes Únicos de Recuperação de Desastre do PDB:
- O exercício regular de recuperação de desastres testa uma aplicação de cada vez.
Objetivos
- Configuração, switchover e failover do DG PDB passo a passo: Configure um Oracle Data Guard no nível do PDB, enquanto os bancos de dados principal e secundário estão no modo de leitura/gravação.
Pré-Requisito
-
Crie uma rede virtual na nuvem (VCN) nas regiões Ashburn e San Jose.
-
Estabeleça uma conexão de pareamento remoto (RPC) entre as VCNs Ashburn e San Jose.
-
Certifique-se de ter outros pré-requisitos relacionados ao Oracle Data Guard.
Tarefa 1: Configurar um Data Guard no Nível do PDB de CDB1 para CDB2
PDB Principal: CDB1_PDB1 AT CDB1_ASH
PDB Stand-by: CDB1_PDB1 AT CDB2_SJ
Ambiente:
Região do OCI | Ashburn (ASH) | São José (SJ) |
---|---|---|
Oracle Base Database | Sistema de BD | Sistema de BD |
Versão do Oracle do Oracle | 23.3 | 23.3 |
Nome do Host | ashvmdb1 | sjvmdb2 |
Nome Exclusivo do BD | CDB1_ASH | CDB2_SJ |
Nome do CDB | CDB1 | CDB2 |
PDB Principal | CDB1_PDB1, CDB1_PDB2 | CDB2_PDB3, CDB2_PDB4 |
PDB Stand-by | CDB2_PDB3 | CDB1_PDB1 |
VCN/Sub-rede (DEFAULT) | VCN_ASH/sub-rede pública-VCN_ASH | VCN_SJ/sub-rede pública-VCN_SJ |
IP Privado | 10 | 192.168 |
Tarefa 1.1: Preparar os Bancos de Dados
-
Crie dois CDBs e dois PDBs por meio da Console do OCI, ambos bancos de dados Oracle Database 23ai que são criptografados com TDE (Criptografia Transparente de Dados).
-
Ative o log em flash e force o log em ambos os bancos de dados.
-
Configure o destino do arquivo de log para FRA (Fast Recovery Area).
-
Ative o Oracle Data Guard broker.
Provisionamento 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='\*';
Provisionamento 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;
Tarefa 1.2: Estabelecer uma Conexão Transparente de Substrato de Rede (TNS) entre os dois CDBs
-
Valide a conexão entre os dois nós do banco de dados.
curl -sv telnet://10.0.0.192:1521 curl -sv telnet://192.168.0.202:1521
-
Configure os arquivos de configuração de rede em cada host para facilitar as conexões com os bancos de dados de origem e 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) ) )
Tarefa 1.3: Estabelecer uma Conexão sem Senha usando uma Wallet
-
Em cada host, crie um diretório para conter a wallet e protegê-la definindo a proteção apropriada no diretório.
$ mkdir -p $ORACLE_HOME/dbs/wallets $ chmod -R 700 $ORACLE_HOME/dbs/wallets
-
Crie wallets que contenham as credenciais necessárias para criar e gerenciar a configuração do 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
-
Valide a conexão sem senha em ambos os bancos de dados. Neste tutorial, usamos a mesma senha durante o provisionamento do banco de dados.
-
Configure
sqlnet.ora
para usar a wallet. -
Agora, temos que adicionar a wallet na configuração
sqlnet.ora
que a Oracle usará.
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
-
Tarefa 1.4: Criar Configuração do Oracle Data Guard Broker do Banco de Dados de Origem e de Destino
Estabeleça conexão com o banco de dados contêiner de origem e destino usando a wallet e crie uma configuração usando a DGMGRL (Interface de Linha de Comando) do Oracle Data Guard. É o mesmo que para uma configuração normal do Oracle Data Guard. A única diferença é que temos que fazer isso para ambos os CDBs, pois ambos são bancos de dados principais.
-
Site 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;**
-
Local secundário:
[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;
Tarefa 1.5: Estabelecer a Conexão entre Configurações
Esta tarefa é diferente de uma configuração normal do Oracle Data Guard. Normalmente, depois de adicionar o banco de dados principal, adicionamos o banco de dados stand-by, mas agora usaremos uma sintaxe diferente. Usando o DGMGRL, conecte-se ao banco de dados contêiner de origem e estabeleça uma conexão com o banco de dados 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;
Tarefa 1.6: Preparar os Bancos de Dados para a DG PDB
-
Conecte-se a cada banco de dados contêiner e abra os PDBs se eles ainda não estiverem abertos.
-
O comando
EDIT CONFIGURATION PREPARE DGPDB
do Oracle Data Guard broker assume que as configurações do banco de dados contêiner de origem e do banco de dados contêiner de destino foram configuradas e estão ativadas. -
Os prompts de comando serão abertos para informar uma senha para a conta
DGPDB_INT
de cada um dos bancos de dados contêineres e, em seguida, configurar as estruturas internas necessárias para fornecer proteção do Oracle Data Guard ou alterar atribuições de um 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>
Observação: Por uma questão de simplicidade, usei a mesma senha do BD ou TDE, mas a senha pode ser diferente.
Tarefa 1.7: Configurar a Proteção do Oracle Data Guard para o PDB de Origem
-
Configure a proteção em nível de PDB do Oracle Data Guard para o PDB de origem configurando o PDB de destino no banco de dados contêiner.
-
Execute o comando
ADD PLUGGABLE DATABASE
para criar o PDB de destino no banco de dados contêiner de destino.PDB Principal:
CDB1_PDB1 AT CDB1_ASH
PDB Stand-by:
CDB1_PDB1 AT CDB2_SJ
Contêiner de Destino:
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
Tarefa 1.8: Copiar os Arquivos de Dados para o Destino
Instancie o PDB de destino copiando todos os arquivos associados ao PDB de origem para o local do PDB de destino.
-
Identifique uma lista de arquivos no PDB de origem.
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 os arquivos de dados do PDB no contêiner 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
-
Verifique os arquivos de dados no 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
-
Renomear arquivos de dados. O nome do arquivo de destino pode ser obtido dos logs de saída do 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
Tarefa 1.9: Trazer as Chaves de TDE
Precisamos copiar a chave da wallet para CDB e PDB. Copie a chave do CDB de origem no CDB de destino e na chave do PDB de origem no PDB de destino para o qual estamos configurando o Data Guard.
-
Verifique a wallet no contêiner de origem ou no PDB.
SET LINESIZE 200 COLUMN wrl_parameter FORMAT A39 select * from v$encryption_wallet;
-
Exporte as chaves de criptografia (CDB e PDB) do banco de dados de origem.
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 a chave de criptografia no servidor de destino e importe-a para o banco de dados de destino (CDB e 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 a chave importada.
select * from v$encryption_keys order by creation_time;
Tarefa 1.10: Adicionar os Redo Logs Stand-by (SRLs) ao PDB e Validar
Crie as SRLs de um PDB stand-by para receber o redo de origem externa. Esta operação é necessária apenas uma vez para todo o CDB e não requer um conjunto diferente de SRLs 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
Tarefa 1.11: Alterar o Estado de Stand-by para APPLY-ON
Conecte-se ao DGMGRL de qualquer banco de dados e inicie o transporte de redo do PDB de origem para o 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
Tarefa 2: (Opcional) Configurar o Oracle Data Guard no Nível do PDB de CDB2 a CDB1
Essa é uma tarefa opcional se quisermos configurar o Oracle Data Guard de CDB2 para CDB1, ou seja, bidirecional.
PDB Principal: CDB2_PDB3 AT CDB2_SJ
PDB Stand-by: CDB2_PDB3 AT CDB1_ASH
Observação: Só precisamos alterar o CDB ou PDB de origem e destino e repetir a Tarefa 1.7 para 1.11.
-
Configure a proteção do Oracle Data Guard para o PDB de origem.
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 os arquivos de dados para o destino.
[oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
-
Traga as chaves de TDE.
Export / Import CDB/PDB key from CDB2 to CDB1
-
Adicione os redo logs stand-by do DG PDB e valide.
-
Altere o estado do stand-by para
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>
Tarefa 3: Fazer Switchover do Banco de Dados Plugável
Estorne as atribuições do PDB de origem e de seu PDB de destino designado usando o broker do Oracle Data Guard DGMGRL. Nenhum efeito no nível do recipiente.
-
Executar um switchover.
[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 o novo PDB no modo de abertura.
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 as chaves de criptografia (somente CDB) da nova origem para o novo 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.
-
Novo redolog stand-by.
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>
Tarefa 4: Fazer Failover do Banco de Dados Plugável
Durante um failover, o PDB de destino especificado é alterado para a atribuição de origem. Se o banco de dados contêiner de origem original e outros PDBs estiverem funcionando corretamente, o PDB deverá ser restabelecido como PDB de destino para que qualquer redo do novo PDB de origem possa ser aplicado.
$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
Tarefa 5: Remover uma Configuração do DG PDB
Execute o comando a seguir para remover a configuração.
[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)
Links Relacionados
Confirmação
- Autor - Dharmesh Patel (Arquiteto de Nuvem Principal, Oracle North America Cloud Services - NACIE)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Set up an Oracle Data Guard at the Pluggable Database Level
F99054-02
June 2024