Controlando a replicação de PDBs em um Data Guard
O Oracle Data Guard é uma solução para bancos de dados Oracle, que garante alta disponibilidade, proteção dos dados e pode ser usado na recuperação de desastres. A solução alcança tais objetivos replicando as alterações que ocorrem no banco principal, denominado primário, para um ou mais bancos réplica, ou como são comumente chamados, standby.
Em ambientes multitenant, essa solução pode ser bastante flexível, uma vez que podemos estabelecer quais Pluggable Databases (PDBs) queremos replicar para os bancos standby.
Neste artigo demonstro como podemos controlar quais PDBs serão replicados nos bancos standby, e como retomar ou parar a aplicação de redo.
Parâmetro de inicialização ENABLED_PDBS_ON_STANDBY
Através do parâmetro ENABLED_PDBS_ON_STANDBY podemos indicar quais PDBs devem ou não ser replicados para o standby. Este parâmetro deve ser alterado no banco standby para que tenha efeito.
Este parâmetro aceita os caracteres coringa (wildcard characters) asterisco (*) e o ponto de interrogação (?). O asterisco representa qualquer número de caracteres, enquanto o ponto de interrogação representa exatamente um carácter.
Também podemos especificar o símbolo de subtração (-) no início do padrão, para indicar a exclusão daquele padrão da replicação para os bancos standby.
Podem ser repassados diversos padrões para este parâmetro, separados por vírgula, para uma maior customização das regras de replicação.
Alguns exemplos de valores para este parâmetro, para a contextualização:
- ENABLED_PDBS_ON_STANDBY=”PDB*” : quaisquer PDBs iniciados com as letras “PDB” serão replicados, como “PDB1”, “PDB_PROD”, etc;
- ENABLED_PDBS_ON_STANDBY=”PDB?” : quaisquer PDBs iniciados com as letras “PDB” seguidos de um carácter serão replicados, como “PDBA”, “PDB3”. “PDB_PROD” não seria replicado;
- ENABLED_PDBS_ON_STANDBY=”*”, “-*DEV*”: replica todos os PDBs, exceto os que contenham “DEV” no nome;
Os PDBs que não atendem à regra de replicação ainda são criados no banco standby, porém os dados de redo gerados pelas alterações ocorridas nestes PDBs no banco primário não são replicados no standby. Além disso, os datafiles referentes ao PDB não replicado permanecem em estado OFFLINE e não possuem um nome, conforme demonstrado no print abaixo:

Podemos consultar quais PDBs estão sendo replicados para o standby, executando:
COL NAME FOR A30 SELECT NAME, RECOVERY_STATUS FROM V$PDBS;
Cláusula STANDBYS
Outra maneira com a qual podemos especificar como a replicação do PDB ocorrerá é através da cláusula STANDBYS do comando CREATE PLUGGABLE DATABASE. Ela pode assumir os seguintes valores:
- STANDBYS=(‘cdb1’, ‘cdb2’, etc.) : Podemos especificar a lista dos DB_UNIQUE_NAMEs dos CDBs standby nos quais o PDB será replicado;
- STANDBYS=NONE: O PDB não será replicado para nenhum dos standbys da configuração Data Guard;
- STANDBYS=ALL: O PDB será replicado para todos os standbys da configuração Data Guard;
- STANDBYS=ALL EXCEPT (‘cdb1’, ‘cdb2’, etc.): O PDB será replicado para todos os standbys da configuração Data Guard, exceto os especificados dentro de EXCEPT;
Caso a cláusula seja especificada durante a criação de um PDB, o parâmetro ENABLED_PDBS_ON_STANDBY não é levado em consideração.
Habilitando a replicação de um PDB já existente
Caso tenhamos criado um PDB que não esteja sendo replicado em determinado standby, podemos habilitar a sua replicação, seguindo os seguintes passos:
- Conectamos o RMAN no banco standby que desejamos habilitar a replicação do PDB e executamos a restauração do PDB, usando o banco primário:
RUN{ SET NEWNAME FOR PLUGGABLE DATABASE orclpdb2 TO NEW; RESTORE PLUGGABLE DATABASE orclpdb2 FROM SERVICE "primary"; }
- Paramos o Redo Apply no standby:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
- No RMAN executamos o comando switch para apontar para o control file os novos data files:
SWITCH PLUGGABLE DATABASE orclpdb2 TO COPY;
- Neste ponto, caso o ambiente seja um Active Data Guard, fechamos o standby e abrimos em modo MOUNT:
SHUTDOWN IMMEDIATE STARTUP MOUNT
- Para reabilitar a replicação do PDB, dentro do SQL*Plus, alteramos a sessão para dentro do nosso PDB, e habilitamos a recuperação:
ALTER SESSION SET CONTAINER=mypdb; ALTER PLUGGABLE DATABASE ENABLE RECOVERY;
- Neste momento podemos trazer os data files do PDB para o status ONLINE. Podemos utilizar a seguinte consulta para gerar os comandos:
SELECT 'alter database datafile ' || '''' || NAME || '''' || ' online;' FROM V$DATAFILE;
- Após os data files estarem ONLINE, podemos reativar o Redo Apply:
ALTER SESSION SET CONTAINER=cdb$root; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
- Caso o ambiente seja um Active Data Guard, podemos reabrí-lo:
ALTER DATABASE OPEN; ALTER PLUGGABLE DATABASE ALL OPEN;
Neste momento o PDB já apresenta o valor ENABLED na coluna RECOVERY da view V$PDBS, e os dados de redo gerados no PDB do banco primário estarão sendo aplicados no PDB do banco standby.
Desabilitando a replicação de um PDB já existente
Para desabilitar a replicação de um PDB no standby, executamos os seguintes passos:
- Paramos o Redo Apply:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
- Alteramos a sessão para dentro do nosso PDB, e desabilitamos a replicação:
ALTER SESSION SET CONTAINER=mypdb; ALTER PLUGGABLE DATABASE DISABLE RECOVERY;
- Reiniciamos o Redo Apply:
ALTER SESSION SET CONTAINER=cdb$root; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
A partir deste momento todo o redo gerado no PDB do banco primário não será mais aplicado ao PDB do standby.
Conclusão
Com a chegada da versão 23c do Oracle Database, onde a arquitetura non-CDB será descontinuada, precisamos estar atualizados quanto às implicações da arquitetura multitenant quando utilizada em conjunto com as demais soluções Oracle.
No caso da tecnologia Oracle Data Guard, podemos evitar o uso de recursos computacionais adicionais para PDBs que não necessitam de uma camada de segurança adicional, como em casos de PDBs de desenvolvimento, por exemplo. Isso faz com que tenhamos menos dados transitando pela rede e ocupando menos espaço de armazenamento, trazendo uma maior otimização destes recursos.
Publicar comentário