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”.
Figura 1.0- Primário e Físico Standby Database com regras de transação:

Conforme a Figura 1.0 iremos configurar tanto o banco primário como o secundário (Banco físico), sendo que no nosso exemplo os banco terão os seguintes nomes:
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=0
SID_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.
Espero ter ajudado. Na próxima matéria iremos configurar o Data Guard no modo lógico. Abraço!



