Data Guard 10g – Standby Físico
Implementação realizada com base na documentação da Oracle Corporation:
http://download.oracle.com/docs/cd/B19306_01/server.102/b14239/toc.htm
Documento criado por : Fábio Araujo em 25/08/2009
Features:
Database : Oracle Database 10g release 2 (10.2.0.2) PatchSet 10.2.0.3
SO : Red Hat linux server 5
Passo 1 : Realizar o backup da base primaria e restaurar em outro servidor como standby
su – oracle
oracle@primary$ sqlplus ‘/as sysdba’
SQL> shutdown immediate;
SQL> startup mount;
SQL> exit
$ rman nocatalog
RMAN> connect target
RMAN> run {
allocate channel d1 type disk;
backup full tag full_backup format “/u02/orabackup/Sun/remedy_data_t%t_s%s_p%p” database;
copy current controlfile to “$BACKUP_DIRECTORY/controlfile_$DATE.ctl”;
release channel d1;
}
RMAN > exit
Passo 2 : Restaurando o backup no server2
oracle@prihost$ scp /u02/orabackup/Sun/* secondary:/u02/orabackup/Sun
oracle@prihost$ scp $ORACLE_HOME/dbs/init<SID>.ora secondary:$ORACLE_HOME/dbs
Dica1: Modifique o pfile e altere o parametro db_unique_name
Dica2: No servidor destino faça um backup e copie os controlfiles para os caminhos definidos no parametro *.control_files
Passo 3 : Start o banco standyb em estado mount
oracle@sbyhost$ sqlplus ‘/as sysdba’
SQL> startup mount
SQL> exit
Passo 4 : Restaurar o backup do RMAN no Server secundário
oracle@sbyhost$ rman nocatalog
RMAN> connect target
RMAN>run {
Restore database;
}
RMAN> exit
Passo 5 : Recover do banco e reset dos redo logs
SQL> recover database using backup controlfile until cancel;
SQL> shutdown immediate
Passo 6 : Criar um standby controlfile no primário e copiar pro standby
SQL> alter database create standby controlfile as ‘/var/tmp/amcpudb_sby.ctl’;
oracle@prihost$ scp /var/tmp/amcpudb_sby.ctl sbyhost:/var/tmp
Passo 7 : No standby copie os novos controlfiles para o caminho correto
oracle@sbyhost$ cp /var/tmp/amcpudb_sby.ctl /u01/oradata/amcpudb/control01.ctl
oracle@sbyhost$ cp /var/tmp/amcpudb_sby.ctl /u01/oradata/amcpudb/control02.ctl
…
Passo 8 : Configuração do Oracle Net – Listener.ora
Edite o arquivo listener.ora no caminho $ORACLE_HOME/network/admin/listener.ora
Configuração do listener.ora no primario
amcpudb_pri =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCamcpudb_pri))
(ADDRESS = (PROTOCOL = TCP)(HOST = prihost)(PORT = 1521))
)
SID_LIST_amcpudb_pri =
(SID_LIST =
(SID_DESC =
(SID_NAME = amcpudb)
(GLOBAL_DB_NAME = amcpudb_pri)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
Configuração do listener.ora no standby
amcpudb_sby =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROCamcpudb_sby))
(ADDRESS = (PROTOCOL = TCP)(HOST = sbyhost)(PORT = 1521))
)
SID_LIST_amcpudb_sby =
(SID_LIST =
(SID_DESC =
(SID_NAME = amcpudb)
(GLOBAL_DB_NAME = amcpudb_sby)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
Passo 9 : Configuração do Oracle Net – tnsnames.ora
Edite o arquivo tnsnames.ora no caminho $ORACLE_HOME/network/admin/tnsnames.ora
amcpudb_PRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prihost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = amcpudb_pri)
)
)
amcpudb_SBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = sbyhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = amcpudb_sby)
)
)
Passo 10 : Starte os listener’s nos dois servidores
oracle@prihost$ lsnrctl start amcpudb_pri
oracle@sbyhost$ lsnrctl start amcpudb_sby
Passo 11 : Configuração do database – STANDBY FISICO
Configuração no servidor primário
oracle@prihost$ sqlplus ‘/ as sysdba’
SQL> ALTER DATABASE FORCE LOGGING;
SQL> alter system set log_archive_config=’DG_CONFIG=(amcpudb_pri,amcpudb_sby)’ scope=both;
System altered.
SQL> alter system set log_archive_dest_1=’LOCATION=/u02/oradata/amcpudb/archive1/primary/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=amcpudb_pri’ scope=both;
System altered.
SQL> alter system set log_archive_dest_2=’SERVICE=amcpudb_sby LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=amcpudb_sby’ scope=both;
System altered.
SQL> alter system set remote_login_passwordfile=’EXCLUSIVE’;
System altered.
SQL> alter system set FAL_SERVER=’amcpudb_sby’ scope=both;
System altered.
SQL> alter system set FAL_CLIENT=’amcpudb_pri’ scope=both;
System altered.
SQL> alter system set DB_FILE_NAME_CONVERT=’amcpudb_sby’,’amcpudb_pri’ scope=spfile;
System altered.
SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
System altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 7700742144 bytes
Fixed Size 1990672 bytes
Variable Size 1342185456 bytes
Database Buffers 6341787648 bytes
Redo Buffers 14778368 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Passo 12 : Configuração do database – STANDBY FISICO
Configuração no servidor secundário
oracle@sbyhost$ sqlplus ‘/as sysdba’
SQL> startup mount;
SQL> alter system set log_archive_dest_1=’LOCATION=/u02/oradata/amcpudb/archive1/standby/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=amcpudb_pri’ scope=both;
System altered.
SQL> alter system set log_archive_dest_2=’SERVICE=amcpudb_pri LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=amcpudb_pri’ scope=both;
System altered.
SQL> alter system set remote_login_passwordfile=’EXCLUSIVE’;
System altered.
SQL> alter system set FAL_SERVER=’amcpudb_sby’ scope=both;
System altered.
SQL> alter system set FAL_CLIENT=’amcpudb_pri’ scope=both;
System altered.
SQL> alter system set DB_FILE_NAME_CONVERT=’amcpudb_pri’,’amcpudb_sby’ scope=spfile;
System altered.
SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=spfile;
SQL> shutdown immediate;
SQL> !
Passo 12 : Criação do arquivo de senhas
oracle@sbyhost$ cd $ORACLE_HOME/dbs
oracle@sbyhost$ orapwd file=orapwamcpudb password=”syspass” entries=5 force=y
oracle@sbyhost$ exit
Dica : É importante criar o arquivo com a mesma senha nos dois servidores
Passo 13 : Starte o banco standby físico em estado mount
SQL> startup mount;
Passo 14 : Starte o redo log apply ( comandos no standby )
SQL> alter database recover managed standby database disconnect from session;
Dica : com esse comando a aplicação dos archives é automática
Passo 15 : Validando a transação (no primário)
SQL> alter system switch logfile;
Querys para verificar archives aplicados e enviados
SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SELECT to_char(startup_time,’DD-MM-YYYY HH24:MI:SS’) “Banco no ar desde:”
FROM v$instance;
select to_char(sysdate,’dd/mm/yyyy hh24:mi:ss’) Horario from dual;
prompt “MODO DE OPERACAO”
COL NAME FOR A10
COL PROTECTION_MODE FOR A25
COL OPEN_MODE FOR A15
COL DATABASE_ROLE FOR A20
select NAME, OPEN_MODE, PROTECTION_MODE, database_role from v$database;
prompt “20 ultimas mensagens”
select * from (SELECT MESSAGE FROM V$DATAGUARD_STATUS
order by message desc)
where rownum < 21;
prompt “15 ultimos archs gerados”
SET PAGES 100 LINES 120
select * from (SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG
order by SEQUENCE# desc)
where rownum < 16;
prompt “15 ultimos archs aplicados”
select * from (SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
order by SEQUENCE# desc)
where rownum < 16;
Alterando os modos de proteção do dataguard
Para esta configuração escolhemos a máxima disponibilidade por regras definidas na nossa necessidade.
Segue os modos de proteção:
Maxima Proteção = (ou “nenhuma perda de dados”), pelo menos uma localização do standby deve ser gravada antes que uma transação seja confirmada no banco de dados principal. O banco de dados principal desliga se a localização de log do banco de dados de reserva estiver indisponível.
Maxima Disponibilidade=pelo menos uma localização de reserve deve ser gravada antes que uma transação seja confirmada no banco de dados principal. Se a localização de reserva não estiver disponível, o banco de dados principal não é desligado. Quando a falha for corrigida, o redp que foi gerado desde a falha é transportado e aplicado aos bancos de dados de reserva.
Maxima Performance(padrão)=as transações podem ser confirmadas antes que suas informações de redo sejam enviadas para as localizações de reserva. As confirmações no banco de dados principal ocorrem logo que as gravações nos redo logs onlines localis são completadas. As gravações nas localizações de reserva são tratadas pelo processo ARCH por padrão.
Dicas Importantes, de erro encontrados durante a implementação e utilização do dataguard:
Atividade : Ao criar tablespace no primary, o dataguard não criou a tbs no standby e começou a apresentar erro no alert, apresentando inconsistência no controlfile.
Acão : checar o parâmetro standby_file_management foi verificado que os valoes estavam diferentes, setar o parâmetro em ambas as instancias com o valor AUTO, (ele cria a tablespace e seus datafiles automaticamente)
Criação e configuração do Broker (standby físico)
- Criação do broker
create configuration icap as
primary database is primary connect identifier is primary;
- Adicionando o(s) nó(s) na configuração
ADD DATABASE standby2 AS CONNECT IDENTIFIER IS standby2 MAINTAINED AS PHYSICAL;
- Veficando o status da configuração
show configuration
- Habilitando a configuração
enable configuration
- Veficando o status da configuração novamente
show configuration verbose
- Setando sincronismo do modo de gerenciamento
edit database n1 set property LogXptMode=’SYNC’;
edit database n2 set property LogXptMode=’SYNC’;
- Alterando para modo de máxima disponibilidade
alter configuration set protection mode as maxavailability;
Comandos manuais
ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
2 Comentários
Comments RSS TrackBack Identifier URI
Show de Bola!!!
Fábio,
Você trabalhou na ICAP ?
Eu estive lá trabalhando com o meu ex-professor Marcelo Amaral que é o Consultor Oracle atual da ICAP.
Abraço.
Renato Fuly
Sim, montei toda a estrutura da icap. Abraço.