Data Guard na versão 10g Release 2

Data Guard na versão 10g Release 2 (10.2) - Parte 01

Esse artigo descreverá como configurar o Data Guard na versão 10g Release 2 (10.2).
O Data Guard é uma feature do Oracle, utilizado muito como plano de contingência de banco. Sua nomenclatura é constituída por um banco primário e um ou mais bancos secundários.
O banco secundário pode ser físico ou lógico. A diferença entre os dois é de conceito.
O banco secundário físico é mais utilizado quando se deseja manter uma cópia integra do banco primário, pois ele é utilizado apenas em READ-ONLY ou com o banco no estado montado.
Já o banco secundário lógico é muito utilizado pra replicação de dados com o intuito de atualização automática de uma base que deve se manter idêntica a produção, podemos citar com exemplo uma base de treinamento.
Há várias maneiras de configuração do Data Guard, utilizaremos um tipo de configuração baseado em "Role Transition" e "Primary Role".

Primário: Ao invés de Boston será Primary
Secundário: Ao invés de Chicago será Standy
Passo a Passo - Criando Physical Standby

1º )
No Primary Database ative a feature "FORCE LOGGING":
ALTER DATABASE FORCE LOGGING;
Isso fará que todas as alterações gerem logs.

2º)
Crie os Standby logs para que mais tarde possamos utilizar a feature Real Time, que nada mais é que as alterações serão aplicadas em tempo real no banco secundário:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4
('/home/oracle/primary/oradata/log1c.rdo','/home/oracle/primary/oradata/log2c.rdo') SIZE 10M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
('/home/oracle/primary/oradata/log1d.rdo','/home/oracle/primary/oradata/log2d.rdo') SIZE 10M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6
('/home/oracle/primary/oradata/log1f.rdo','/home/oracle/primary/oradata/log2f.rdo') SIZE 10M;

3º)
Nesse ponto, após a criação dos Standby logs, altere o arquivo de parâmetro do banco primário da seguinte forma:
DB_NAME=primary|DB_UNIQUE_NAME=primary|
LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary, standy)'|LOG_ARCHIVE_DEST_1=|
 'LOCATION=/home/oracle/primary/arch1/|  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)|
  DB_UNIQUE_NAME=primary'|LOG_ARCHIVE_DEST_2=| 'SERVICE=standy LGWR ASYNC|
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)|  DB_UNIQUE_NAME=standy'|
LOG_ARCHIVE_DEST_STATE_1=ENABLE|LOG_ARCHIVE_DEST_STATE_2=ENABLE|
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE|LOG_ARCHIVE_FORMAT=%t_%s_%r.arc|
LOG_ARCHIVE_MAX_PROCESSES=30|FAL_SERVER=standy|FAL_CLIENT=primary|
DB_FILE_NAME_CONVERT='/home/oracle/standy/oradata','/home/oracle/primary/oradata'|
LOG_FILE_NAME_CONVERT=|
'/home/oracle/standy/oradata','/home/oracle/primary/oradata'|
STANDBY_FILE_MANAGEMENT=AUTO
OBS: Note que os parâmetros DB_FILE_NAME_CONVERT e LOG_FILE_NAME_CONVERT servem para que o banco automaticamente altere a caminho dos datafiles e redos no controlfile quando alterado para modo Standby, diferentemente da versão 9i, que era necessário modifica-lo manualmente com o comando "ALTER DATABASE RENAME FILE".

4º)
Ative o arquivamento no banco Primary:
SQL> SHUTDOWN IMMEDIATE;|SQL> STARTUP MOUNT;|
SQL> ALTER DATABASE ARCHIVELOG;|SQL> ALTER DATABASE OPEN;

5º)
Faça um backup frio do banco primário:
SQL> SHUTDOWN IMMEDIATE;
$ cp -r /home/oracle/primary/oradata/*.* /home/oracle/standy/oradata

6º)
Inicie o banco primário no modo MOUNT pra criar o standby controlfile:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/standy/oradata/logical_standy.ctl';
SQL> ALTER DATABASE OPEN;[codigo]$ cp -r logical_standy.ctl standy1.ctl|
$ cp -r logical_standy.ctl standy2.ctl

7º)
Crie o arquivo de parâmetro pra o banco Standy conforme o Primary:
CREATE PFILE='?/dbs/intistandy.ora' from spfile;

8º)
Altere o arquivo de parâmetro do banco Standy:
DB_NAME=primary|DB_UNIQUE_NAME=standy|
LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary, standy)'|
DB_FILE_NAME_CONVERT='/home/oracle/primary/oradata','/home/oracle/standy/oradata'|
LOG_FILE_NAME_CONVERT=|
'/home/oracle/primary/oradata','/home/oracle/standy/oradata'|
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc|LOG_ARCHIVE_DEST_1=|
 'LOCATION=/home/oracle/standy/arc/|  VALID_FOR=(ALL_LOGFILES,ALL_ROLES)|
  DB_UNIQUE_NAME=standy'|LOG_ARCHIVE_DEST_2=| 'SERVICE=primary LGWR ASYNC|
  VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)|  DB_UNIQUE_NAME=primary'|
LOG_ARCHIVE_DEST_STATE_1=ENABLE|LOG_ARCHIVE_DEST_STATE_2=ENABLE|
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE|STANDBY_FILE_MANAGEMENT=AUTO|
FAL_SERVER=primary|FAL_CLIENT=standy
OBS: Atente que o DB_UNIQUE_NAME é Standy, esse parâmetro que diferencia os dois bancos no modo Físico.

9º)
Configure o tnsnames e os listeners. Nesse caso foi colocado um listener pra cada banco, um na porta 1521 e o outro na 1522.
Listener
LISTENER =  (DESCRIPTION_LIST =    (DESCRIPTION =      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))      )      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.4) (PORT = 1521))      )
    )  )standy =    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.4)(PORT = 1522))
      (CONNECT_DATA =        (SERVER = DEDICATED)        (SERVICE_NAME = standy)
      )    )INBOUND_CONNECT_TIMEOUT_listener=0SID_LIST_LISTENER =  (SID_LIST =
      (SID_DESC =      (GLOBAL_DBNAME = primary)
      (ORACLE_HOME = /home/oracle/10gR2)      (SID_NAME = primary)    )  )
SID_LIST_STANDY =    (SID_LIST =      (SID_DESC =
        (GLOBAL_DBNAME = standy)        (ORACLE_HOME = /home/oracle/10gR2)
        (SID_NAME = standy)Tnsnames
# tnsnames.ora Network Configuration File: /home/oracle/10gR2/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.primary =  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.4)(PORT = 1521))    )
    (CONNECT_DATA =      (SERVICE_NAME = primary)      (SERVER = DEDICATED)    )
  )standy =  (DESCRIPTION =    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.4)(PORT = 1522))    )
    (CONNECT_DATA =      (SERVICE_NAME = standy)      (SERVER = DEDICATED)    )
  )

10º)
Inicie os listeners:
$ lsnrctl start|$ lsnrctl start standy

11º)
Inicíe o banco standy:
SQL> STARTUP MOUNT;

12º)
Nesse momento, colocaremos o banco secundário pra receber os archive logs do banco primário. Para isso Inicie o Redo Apply da seguinte forma no banco secundário:
Alter Database Recover Managed Standby Database Disconnect From Session;
Para testar se está funcionado, entre no banco primário e crie uma tabela.
Ex:
Create table t1 as select * from dba_users;Alter system switch logfile;

Veja se o banco Standy está recendo os archive logs:

SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2>      FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME         NEXT_TIME
         8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
         9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
        10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
        11 11-JUL-02 17:51:03 11-JUL-02 18:34:11

E verifique se estão sendo aplicados:

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG  2  ORDER BY SEQUENCE#;
SEQUENCE# APP        8 YES        9 YES       10 YES       11 YES


Caso estejam, a replicação esta funcionando.

Nenhum comentário:

Postar um comentário