Configurando Oracle Data Guard 19c Com PDB RAC Para Single

Devido a algumas duvidas executando o processo de criação do Oracle Data Guard Fisico, em um ambiente onde o primary é um ambiente RAC e o standby, um ambiente single node, ambos Multitenant, resolvi escrever este artigo.

HOSTNAMEVERSÃO BANCO DE DADOSSISTEMA OPERACIONALFUNÇÃO
orarac0119.3.0.0Oracle Linux 7.9Primário
orarac0219.3.0.0Oracle Linux 7.9Primário
oradg19.3.0.0Oracle Linux 7.9Data Guard

A baixo, desenho de como deve ficar nosso ambiente:

Partiremos do principio que ambos ambientes estão com seus sistemas operacionais configurados, discos de storage criados e os binários do Oracle RDBMS e Grid Infrastructure instalados, bem como no ambiente de produção, o banco criado.

Ambos os ambientes foram criados utilizando Grid Infrastructure com asmlib.

Observações:

  1. Antes de realizar a instalação do Grid no ambiente Data Guard, configure a variável de ambiente TNS_ADMIN, para o caminho do TNS do RDBMS. Isto fará com que tanto os binários do Grid quanto do RDBMS, utilizem o mesmo caminho dos binários para a configuração do listener.
  2. Será necessário configurar corretamente os tnsnames do ambiente RAC e do ambiente ADG, para o comando duplicate, encontre o service name do banco Data Guard, quando o RMAN estiver realizando a conexão inversa, do primário para o standby.
  3. O arquivo init utilizado para subir o ADG, deverá conter os parâmetros de pluggable database, indicando que o banco será um container, assim como cluster database, indicando que o banco não será um cluster.
  4. Ainda referente o ambiente o ambiente primário, deverá ser criada uma entrada tns, sem a utilização do racscan, para realizar o duplicate.

Iniciaremos configurando o ambiente primário, adicionado os redologs no banco de produção.

Verifique o tamanho dos redos ja existentes e crie do mesmo tamanho.

Crie um redolog file a mais. Adicionando em um nó do Rac, o Oracle automaticamente irá criar no outro node, thread 2:

ALTER DATABASE ADD STANDBY LOGFILE thread 1 (‘+RECO/CDB19C/ONLINELOG/standby_redo01.log’) SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE thread 1 (‘+RECO/CDB19C/ONLINELOG/standby_redo02.log’) SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE thread 1 (‘+RECO/CDB19C/ONLINELOG/standby_redo03.log’) SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE thread 1 (‘+RECO/CDB19C/ONLINELOG/standby_redo04.log’) SIZE 512M;

ALTER DATABASE ADD STANDBY LOGFILE thread 1 (‘+RECO/CDB19C/ONLINELOG/standby_redo05.log’) SIZE 512M;

Adicione as seguintes entradas no arquivo listener.ora dos nodes do RAC primário:

SID_LIST_LISTENER=

    (SID_LIST=

        (SID_DESC=

          (GLOBAL_DBNAME=cdb19c1_DGMGRL)

          (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)

          (SID_NAME=cdb19c1)

          (ENVS = “TNS_ADMIN=/u01/app/oracle/product/19.3.0/db/network/admin”)

        )

        (SID_DESC =

          (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1/)

          (SID_NAME = PLSExtProc)

          (PROGRAM = extproc)

        )

        (SID_DESC=

          (GLOBAL_DBNAME=cdb19c)

          (ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1/)

          (SID_NAME=cdb19c)

        )

     )

Adicione as seguintes entradas no arquivo tnsnames.ora dos nodes do RAC primário:

CDB19C =

  (DESCRIPTION =

    #(ADDRESS = (PROTOCOL = TCP)(HOST = orarac-racscan)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.31)(PORT = 1521))

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.32)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = cdb19c)

    )

  )

CDB19C1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.31)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SID = cdb19c1)

      (UR=A) 

    )

  )

CDB19CDG =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SID = cdb19c)

      (UR=A)

    )

  )

Adicione as seguintes entradas no arquivo listener.ora no Data Guard:

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (GLOBAL_DBNAME = cdb19cdg_DGMGRL)

      (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)

      (SID_NAME = cdb19c)

    )

  )

ADR_BASE_LISTENER = /u01/app/oracle

Adicione as seguintes entradas no arquivo tnsnames.ora no Data Guard:

cdb19c =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = orarac01)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = cdb19c)

      (UR=A)

    )

  )

cdb19cdg =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SID = cdb19c)

      (UR=A)

    )

  )

Será necessário criar arquivo init para iniciar o banco Data Guard em modo nomout e executar o duplicate. No servidor oradg, crie o arquivo initcdb19c.ora, com o editor que desejar e coloque os seguintes parametros:

*.db_name=’cdb19c’

*.db_unique_name=’cdb19cdg’

*.enable_pluggable_database=true

*.STANDBY_FILE_MANAGEMENT=AUTO

*.sga_target=1G

*.pga_aggregate_target=500M

*.cluster_database=false

Copie o arquivo orapw do ambiente de produção, para o ambiente Data Guard.

$ scp $ORACLE_HOME/dbs/orapwcdb19c oradg:/u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwcdb19c

Após isto, inicie o banco Data Guard em modo nomount:

$ sqlplus “/as sysdba”

STARTUP NOMOUNT PFILE=’/u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/initcdb19c.ora’

Conecte com o RMAN ao banco target e ao auxiliar e então execute o duplicate. Reforce os parametros de init, no comando duplicate:

$ rman target sys/oracle@cdb19c auxiliary sys/oracle@cdb19cdg

DUPLICATE TARGET DATABASE

  FOR STANDBY

  FROM ACTIVE DATABASE

  DORECOVER

  SPFILE

    SET db_unique_name=’cdb19cdg’ 

    SET cluster_database=false

    SET enable_pluggable_database=true 

  COMMENT ‘Is standby’

  NOFILENAMECHECK;

Após o duplicate concluído, vamos configurar o broker.

Em ambas as bases:

ALTER SYSTEM SET dg_broker_start=true scope=both sid=’*’;

ALTER SYSTEM set REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE scope=both sid=’*’;

ALTER SYSTEM set STANDBY_FILE_MANAGEMENT=AUTO scope=both sid=’*’;

alter database flashback on;

Em produção:

alter system set LOG_ARCHIVE_CONFIG=’DG_CONFIG=(cdb19c,cdb19cdg)’ scope=both sid=’*’;

alter system set LOG_ARCHIVE_DEST_1=’LOCATION= USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cdb19c’ scope = both;

Caso nao esteja utilizando DB_RECOVER_FILE_DEST:

alter system set LOG_ARCHIVE_DEST_1=’LOCATION=+RECO VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cdb19c’ scope=both sid=’*’;

alter system set LOG_ARCHIVE_DEST_2=’SERVICE=cdb19cdg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cdb19cdg’ scope=both sid=’*’;

ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_1=enable scope=both sid=’*’;

alter system set log_archive_max_processes=8 scope=both sid=’*’;

alter system set FAL_SERVER=CDB19CDG scope=both sid=’*’;

alter system set FAL_CLIENT=CDB19C scope=both sid=’*’;

No Data Guard:

alter system set LOG_ARCHIVE_CONFIG=’DG_CONFIG=(cdb19c,cdb19cdg)’ scope = both;

alter system set LOG_ARCHIVE_DEST_1=’LOCATION=+RECO VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=cdb19cdg’ scope=both;

alter system set LOG_ARCHIVE_DEST_2=’SERVICE=cdb19c LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cdb19c’ scope=both;

alter system set FAL_SERVER=cdb19c scope=both;

alter system set FAL_CLIENT=CDB19CDG scope=both;

Configurando o Broker:

$ dgmgrl sys/oracle@cdb19c

CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS cdb19c CONNECT IDENTIFIER IS cdb19c;

ADD DATABASE cdb19cdg AS CONNECT IDENTIFIER IS cdb19cdg MAINTAINED AS PHYSICAL;

ENABLE CONFIGURATION;

edit database cdb19c set property StaticConnectIdentifier=”orarac-rascan:1521/cdb19c_dgmgrl”;

edit database cdb19cdg set property StaticConnectIdentifier=”oradg:1521/cdb19cdg_dgmgrl”;

EDIT DATABASE cdb19c SET PROPERTY ‘LogXptMode’=’SYNC’;

EDIT DATABASE cdb19cdg SET PROPERTY ‘LogXptMode’=’SYNC’;

Ao final, faça os testes de switchover e verifique se os bancos são alterados.


Deixe um comentário