Preparar o banco de dados principal do Data Guard

O Data Guard requer um banco de dados principal e pelo menos um banco de dados em espera para funcionar. Antes de configurar o DataGuard na Solução Bare Metal, crie o banco de dados principal.

Os exemplos a seguir são usados neste guia:

Nome exclusivo do banco de dados Nomes de host do servidor Nomes de instâncias RAC Papel
DBDG_SITE1 site1db1, site1db2 DBDG_SITE11, DBDG_SITE12 Principal
DBDG_SITE2 site2db1, site2db2 DBDG_SITE21, DBDG_SITE22 Espera

Os servidores da Solução Bare Metal que executam o Oracle neste guia são configurados com as seguintes variáveis de ambiente:

Nome da variável de ambiente Valor
ORACLE_BASE /apps/oracle/oracle_base
ORACLE_HOME /apps/oracle/19.0.0/db_home1

Talvez seja necessário modificar os caminhos das variáveis de ambiente, dependendo da configuração.

Configurar o banco de dados principal

  1. Faça login no primeiro servidor da Solução Bare Metal que hospeda o banco de dados principal.

  2. No arquivo /etc/oratab, adicione uma entrada para que o comando oraenv possa definir variáveis de ambiente para o banco de dados principal. Modifique o nome da instância para corresponder à instância em execução em cada nó e especifique o caminho completo para a página inicial do banco de dados Oracle:

    DBDG_SITE11:ORACLE_HOME:N
    
  3. Defina a variável de ambiente ORACLE_SID para se conectar ao banco de dados principal:

    source oraenv <<< "DBDG_SITE11"
    

    Você receberá a resposta The Oracle base has been set to /apps/oracle/oracle_base.

Configurar a geração de registros do banco de dados e ativar o flashback

  1. Inicie o SQL*Plus e ative force logging para que os tablespaces nologging adicionados ao banco de dados sejam registrados:

    sqlplus / as sysdba
    
    ALTER DATABASE FORCE LOGGING;
    
  2. Verifique se archivelog mode e flashback database estão ativados:

    ARCHIVE LOG LIST;
    SELECT LOG_MODE, FLASHBACK_ON FROM V$DATABASE;
    

    Se archivelog mode e flashback database estiverem desativados, ative-os com os seguintes comandos SQL:

    1. Interrompa o banco de dados em cluster para fazer as alterações necessárias:

       srvctl stop database -d 
      
    2. Execute os comandos SQL necessários para ativar archivelog mode e flashback database:

       STARTUP MOUNT;
       ALTER DATABASE ARCHIVELOG;
       ALTER DATABASE FLASHBACK ON;
       ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SID='*' SCOPE=BOTH;
       ALTER DATABASE OPEN;
       SHUTDOWN IMMEDIATE;
       EXIT;
      
    3. Inicie o banco de dados em cluster novamente:

       srvctl start database -d DBDG_SITE1
      

Preparar o banco de dados para o Data Guard

  1. Faça login no primeiro servidor da Solução Bare Metal que hospeda o banco de dados principal e defina a variável de ambiente ORACLE_SID para se conectar ao banco de dados principal:

    source oraenv <<< "DBDG_SITE11"
    

    Você receberá a resposta The Oracle base has been set to /apps/oracle/oracle_base.

  2. Inicie o SQL*Plus e modifique os parâmetros de inicialização do banco de dados necessários para a configuração e os serviços do Data Guard:

    sqlplus / as sysdba
    
    ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=8 SID='*' SCOPE=BOTH;
    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SID='*' SCOPE=SPFILE;
    ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SID='*' SCOPE=BOTH;
    
  3. Verifique a existência de registros "redo" em espera no banco de dados. Cada linha de execução precisa ter mais um grupo de registros "redo" em espera do que o número de grupos de registros "redo" on-line.

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    O exemplo a seguir tem quatro registros "redo" on-line por linha de execução e não tem nenhum grupo de registros "redo" em espera criado. Como há quatro grupos de registros "redo" on-line, é preciso criar cinco grupos de registro "redo" em cada linha de execução:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    
  4. Se houver grupos de registros "redo" em espera suficientes, pule esta etapa. Os grupos de registro "redo" em espera precisam ter o mesmo tamanho que cada grupo de registro "redo" on-line. Crie o número necessário de grupos de registros "redo" em espera com o seguinte código PL/SQL:

    SET FEEDBACK OFF
    SET SERVEROUTPUT ON
    DECLARE
      CURSOR cur_thread IS
        SELECT THREAD# THREAD, COUNT(*) COUNT FROM V$LOG GROUP BY THREAD#;
      standbylog_count NUMBER := 0;
      standbylog_group NUMBER := 0;
      standbylog_size NUMBER := 0;
      last_group_number NUMBER;
      sqlstmt VARCHAR2(200);
    BEGIN
      SELECT MAX(GROUP#), MAX(BYTES)
    INTO last_group_number, standbylog_size
    FROM V$LOG;
      standbylog_group := last_group_number + 1;
      FOR rec_thread IN cur_thread LOOP
    standbylog_count := rec_thread.count + 1;
    FOR i IN 1..standbylog_count LOOP
      sqlstmt := 'ALTER DATABASE ADD STANDBY LOGFILE THREAD ' || rec_thread.thread || ' GROUP ' || TO_CHAR(standbylog_group) || ' SIZE ' || standbylog_size || ';';
      DBMS_OUTPUT.PUT_LINE( sqlstmt);
      standbylog_group := standbylog_group + 1;
    END LOOP;
      END LOOP;
    END;
    /
    SET FEEDBACK ON
    

    O exemplo de saída a seguir instrui você a criar cinco grupos de registros "redo" em espera para cada uma das duas linhas de execução:

    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP  9 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 14 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 15 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 16 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 17 SIZE 2147483648;
    ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 18 SIZE 2147483648;
    
  5. Verifique se os registros "redo" em espera estão configurados corretamente para a configuração:

    SELECT 'Logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$LOG GROUP BY THREAD#
    UNION
    SELECT 'Standby logfile groups in thread ' || THREAD# || ': ' || COUNT(*) FROM V$STANDBY_LOG GROUP BY THREAD#;
    

    A saída a seguir tem quatro grupos de registro "redo" on-line por linha de execução e cinco grupos de registro "redo" em espera por linha de execução:

    Logfile groups in thread 1: 4
    Logfile groups in thread 2: 4
    Standby logfile groups in thread 1: 5
    Standby logfile groups in thread 2: 5
    
  6. Saia do SQL*Plus:

    EXIT;
    

Copie os parâmetros do banco de dados e os arquivos de senha para os servidores de espera

  1. Crie um arquivo de parâmetro do banco de dados e copie-o para o servidor em espera:

    1. Crie uma pasta para o arquivo de parâmetros do banco de dados em espera (pfile):

      mkdir /home/oracle/backup
      
    2. Inicie o SQL*Plus e crie o banco de dados em espera pfile:

      sqlplus / as sysdba
      
      CREATE PFILE='/home/oracle/backup/initDBDG_SITE21.ora' FROM SPFILE;
      
    3. Saia do SQL*Plus e copie o pfile para o primeiro servidor da Solução Bare Metal no local de espera:

      EXIT;
      
      scp /home/oracle/backup/initDBDG_SITE21.ora ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/initDBDG_SITE21.ora
      
  2. Confirme se a senha de login remoto do SYS foi salva com segurança. Se você não souber a senha, redefina-a.

  3. Copie o arquivo de senha para o cluster de espera:

    1. Encontre o local do arquivo da senha usando o comando srvctl:

      srvctl config database -db DBDG_SITE1 | grep -i password
      

      A saída a seguir mostra o local de um armazenamento de arquivo de senha no ASM:

        Password file: +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663
      
    2. Faça uma cópia temporária do arquivo de senha no sistema de arquivos local usando o comando asmcmd:

      asmcmd cp +DATA/DBDG_SITE1/PASSWORD/pwdDBDG_SITE1.287.1086459663 /tmp/orapwDBDG_SITE21
      
    3. Copie o arquivo de senha para o primeiro servidor da Solução Bare Metal no local de espera e exclua a cópia temporária pelo servidor da Solução Bare Metal no local principal:

      scp /tmp/orapwDBDG_SITE21 ORACLE_USERNAME@site2db1:/apps/oracle/19.0.0/db_home1/dbs/orapwDBDG_SITE21
      rm /tmp/orapwDBDG_SITE21
      

Configurar a conectividade do banco de dados

Edite o arquivo $ORACLE_HOME/network/admin/tsnames.ora em cada servidor da Solução Bare Metal no local do banco de dados principal para atualizar a configuração do serviço da rede. Há três entradas no arquivo, uma para cada banco de dados, e uma entrada temporária usada durante a duplicação de banco de dados que você excluirá posteriormente:

DBDG_SITE1 =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE1_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE1) (UR=A)
      )
  )

DBDG_SITE2 =
 (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = DBDG_SITE2_SCAN_HOSTNAME)(PORT = 1521))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = DBDG_SITE2) (UR=A)
      )
  )

DBDG_SITE2_FOR_DUPLICATION =
  (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = site2db1)(PORT = 1523))
      (CONNECT_DATA =
          (SERVER = DEDICATED)
          (INSTANCE_NAME = DBDG_SITE21) (UR=A)
      )
  )

O banco de dados principal está pronto para ser usado em uma configuração do DataGuard.

Próximas etapas

Em seguida, crie o banco de dados em espera do Data Guard.