Preparing the Primary Database for Oracle Data Guard

Como pré-requisito, é necessário que o banco primary esteja em archiving mode. Caso você precise fazer isso, pode seguir este artigo AQUI.

[oracle@fornix1 ~]$ sqlplus / as sysdba
 
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Mar 5 04:52:55 2021
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
 
SQL> SELECT LOG_MODE FROM V$DATABASE ;
 
LOG_MODE
------------
ARCHIVELOG
 
SQL> SHO PARAMETER LOG_ARCHIVE_DEST_1
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      LOCATION=+DG_RECO
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string
SQL>

Habilitando o FORCE LOGGIN:

SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
 
FORCE_LOGGING
---------------------------------------
NO
 
SQL> ALTER DATABASE FORCE LOGGING;
 
Database altered.
 
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
 
FORCE_LOGGING
---------------------------------------
YES
 
SQL>

Configurando os Standby Redo Logs. Lembrando que a sua quantidade ficaria como (3+1)*1=4:

SQL> SELECT GROUP#, BYTES/1024/1024 MB FROM V$LOG;
 
    GROUP#         MB
---------- ----------
         1        200
         2        200
         3        200
 
SQL> SELECT THREAD#, INSTANCE FROM V$THREAD ;
 
   THREAD#
----------
INSTANCE
--------------------------------------------------------------------------------
         1
cortex
 
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DG_FRA' SIZE 200M ;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DG_FRA' SIZE 200M ;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DG_FRA' SIZE 200M ;
 
Database altered.
 
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 '+DG_FRA' SIZE 200M ;
 
Database altered.
 
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
 
    GROUP#    THREAD#  SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
         4          1          0 YES UNASSIGNED
         5          1          0 YES UNASSIGNED
         6          1          0 YES UNASSIGNED
         7          1          0 YES UNASSIGNED
 
SQL>

Alterando os parâmetros do primary:

SQL> show parameter DB_UNIQUE_NAME
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_unique_name                       string      cortex
SQL> ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(cortex,cortexDR)' scope=BOTH;
 
System altered.
 
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2= 'SERVICE=cortexDR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cortexDR' scope=BOTH;
 
System altered.
 
SQL> ALTER SYSTEM SET ARCHIVE_LAG_TARGET=1800 scope=BOTH;
 
System altered.
 
SQL> show parameter REMOTE_LOGIN_PASSWORDFILE
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile            string      EXCLUSIVE
SQL> show parameter FAL_SERVER ;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fal_server                           string
SQL> alter system set FAL_SERVER ='cortexDR' scope=BOTH;
 
System altered.
 
SQL> show parameter STANDBY_FILE_MANAGEMENT
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_file_management              string      MANUAL
SQL> alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=BOTH;
 
System altered.
 
SQL>

Coletando a lista de diretórios que deverão existir no ambiente Standby:

SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE upper(VALUE) LIKE upper('%/cortex/%');
 
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
spfile
+DG_DATA/CORTEX/PARAMETERFILE/spfile.265.1039034301
 
control_files
+DG_DATA/CORTEX/CONTROLFILE/current.260.1039033623, +DG_FRA/CORTEX/CONTROLFILE/c
urrent.256.1039033625
 
core_dump_dest
/oracle/19.3.0/base/diag/rdbms/cortex/cortex/cdump
 
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
 
audit_file_dest
/oracle/19.3.0/base/admin/cortex/adump
 
 
SQL>

De forma opcional, podemos habilitar o recurso de Flashback Database (o que seria recomendado):

SQL> alter system set DB_FLASHBACK_RETENTION_TARGET =2880 scope=BOTH;
 
System altered.
 
SQL> ALTER DATABASE FLASHBACK ON;
 
Database altered.
 
SQL>

Ajustando parâmetro do controlfile:

SQL> show parameter CONTROL_FILE_RECORD_KEEP_TIME;
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
SQL> alter system set CONTROL_FILE_RECORD_KEEP_TIME=30 scope=BOTH;
 
System altered.
 
SQL>

Validar se seu ambiente já possui um password file:

[oracle@fornix1 ~]$ cd $ORACLE_HOME/dbs
[oracle@fornix1 dbs]$ ls -lthr
total 11M
-rw-r--r--. 1 oracle oinstall 3.1K May 14  2015 init.ora
-rw-r-----. 1 oracle asmadmin   24 Apr 29  2020 lkCORTEX
-rw-r-----. 1 oracle oinstall 2.0K Feb 26 05:43 orapwcortex
-rw-rw----. 1 oracle asmadmin 1.6K Mar  5 04:51 hc_cortex.dat
-rw-r-----. 1 oracle asmadmin  11M Mar  5 05:11 snapcf_cortex.f
[oracle@fornix1 dbs]$

Ajustando o arquivo /etc/hosts para que o ambiente primary possa se comunicar com o standby:

[oracle@fornix1 dbs]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.109 fornix1.localdomain fornix1
192.168.0.110 fornix2.localdomain fornix2
[oracle@fornix1 dbs]$ ping fornix2
PING fornix2.localdomain (192.168.0.110) 56(84) bytes of data.
64 bytes from fornix2.localdomain (192.168.0.110): icmp_seq=1 ttl=64 time=2.33 ms
64 bytes from fornix2.localdomain (192.168.0.110): icmp_seq=2 ttl=64 time=1.17 ms
64 bytes from fornix2.localdomain (192.168.0.110): icmp_seq=3 ttl=64 time=1.39 ms

Ajustando arquivo tnsnames.ora:

[oracle@fornix1 admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /oracle/19.3.0/product/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 
CORTEX =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = fornix1.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cortex.localdomain)
    )
  )
 
LISTENER_LISTENER =
  (ADDRESS = (PROTOCOL = TCP)(HOST = fornix1.localdomain)(PORT = 1521))
 
 
CORTEXDR =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = fornix2.localdomain)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cortexDR.localdomain)
    )(UR=A)
  )
 
 
RMANDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oel8.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = RMANDB)
    )
  )
[oracle@fornix1 admin]$

Teste de tnsping:

[oracle@fornix1 admin]$ tnsping CORTEX
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 05-MAR-2021 05:31:42
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/oracle/19.3.0/product/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = fornix1.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cortex.localdomain)))
OK (10 msec)
[oracle@fornix1 admin]$ tnsping CORTEXDR
 
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 06-MAR-2021 11:45:29
 
Copyright (c) 1997, 2019, Oracle.  All rights reserved.
 
Used parameter files:
/oracle/19.3.0/product/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = fornix2.localdomain)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cortexDR.localdomain))(UR=A))
OK (10 msec)
[oracle@fornix1 admin]$

Validando arquivo sqlnet.ora:

[oracle@fornix1 admin]$ cat sqlnet.ora
# sqlnet.ora Network Configuration File: /oracle/19.3.0/product/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
 
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
 
[oracle@fornix1 admin]$

Não é difícil se deparar com o erro abaixo, ao tentar fazer o Duplicate do banco. E para isso, já vou fazer a cópia do SPFILE para o local onde o RMAN pensa que está hospedado:

RMAN-03009: failure of backup command on prmy2 channel at 05/03/2021 05:38:08 
ORA-19505: failed to identify file "+DG_DATA/CORTEX/spfilecortex.ora" 
ORA-15173: entry 'spfilecortex.ora' does not exist in directory 'CORTEX'

Fazendo cópia do SPFILE:

[oracle@fornix1 admin]$ sqlplus / as sysdba
 
SQL*Plus: Release 19.0.0.0.0 - Production on Fri Mar 5 05:38:59 2021
Version 19.3.0.0.0
 
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
 
SQL> sho parameter spfile
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DG_DATA/CORTEX/PARAMETERFILE/
                                                 spfile.265.1039034301
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@fornix1 admin]$ su - grid
Password:
Last login: Fri Mar  5 05:35:16 -03 2021 on pts/0
[grid@fornix1 ~]$ asmcmd
ASMCMD> cd DG_DATA/CORTEX/PARAMETERFILE/
ASMCMD> cp spfile.265.1039034301 +DG_DATA/CORTEX/spfilecortex.ora;
copying +DG_DATA/CORTEX/PARAMETERFILE/spfile.265.1039034301 -> +DG_DATA/CORTEX/spfilecortex.ora
ASMCMD>

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.

Leave a Comment

Your email address will not be published.