Nesse novo artigo, iremos configurar o Banco no modo Lógico, sendo que nesse modo podemos abri-lo no modo READ-WRITE.
Para isso é necessário que o banco Físico mostrado no artigo anterior esteja criado e funcionando.
Figura 2.0 – Configurando destinos do banco primário e secundário no modo lógico:

Esse caso é um pouco diferente do descrito no artigo anterior, conforme mostra a figura 2.0.
O banco primário envia as alterações na forma de SQL e diretamente para o grupo de redo, Standby logs, criado anteriormente.
Não é necessário o Switch de log para que as alterações sejam enviadas para o banco secundário, mas apenas um commit.
A seguir mostraremos como configurar o Data Guard no modo lógico:
Covertendo para Logical Standby
1º) Encontre tabelas sem o identificador lógico único na base de dados.
SQL> SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
2> WHERE (OWNER, TABLE_NAME) NOT IN
3> (SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
4> AND BAD_COLLUMN = 'Y'
2º) Altere o arquivo de parâmetro do banco primário conforme abaixo:
LOG_ARCHIVE_DEST_3=
'LOCATION=/home/oracle/primary/arch2/
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=primary'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
3º) Construa o dicionário nos dados de redo:
EXECUTE DBMS_LOGSTDBY.BUILD;
4º) Coverta o banco Standy pra lógico:
ALTER DATABASE RECOVER TO LOGICAL STANDBY standy;
5º) Crie um novo arquivo de senha pra o Banco Standy:
orapwd file=orapwstandy file=xxxx entries=5
6º) Modifique o arquivo de parâmetro do banco Standy, conforme abaixo:
LOG_ARCHIVE_DEST_1=
'LOCATION=/home/oracle/standy/arc/
VALID_FOR=(ONLINE_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_3=
'LOCATION=/home/oracle/standy/arch2
VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE)
DB_UNIQUE_NAME=standy'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_STATE_3=ENABLE
7º) inicie o banco Standy com resetlogs:
SQL> SHUTDOWN;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE OPEN RESETLOGS;
8º) Inicíe o SQL Apply em Real Time:
ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;
Após a inicialização do SQL Apply, cheque se o banco secundário está recendo as modificações do banco primário da seguinte forma:
- Entre com o usuário utilizado anteriormente para testar o modo físico do Data Guard.
- Faça um insert na tabela criada anteriormente:
SQL> insert into t1 select * from t1;
SQL> commit;
SQL> select count(1) from t1;
Vá agora ao banco secundário e cheque se o número de linhas está conforme ao do banco primário:
SQL> select count(1) from t1;
OBS: Nunca utilize o usuário SYS E SYSTEM para criar objetos, já que os mesmo são criados no dicionário de dados do banco e corrompe o dicionário de dados de redo.
Abaixo segue algumas views que podem ser consultadas para monitoramento do SQL APPLY:
- V$LOGSTDBY
- DBA_LOGSTDBY_LOG
- V$LOGSTDBY_STATS
- DBA_LOGSTDBY_PROGRESS
Na próxima iremos configurar o Data Guard Broker.
Até a próxima!



