Oracle – DataGuard10g


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

  1. 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.


Comments RSS TrackBack Identifier URI

Deixe um comentário