quinta-feira, 17 de novembro de 2011

Oracle - Configurando Oracle Standby Physical Database no Linux

Os passos abaixo servem para criar uma database Standby Physical no Linux


Considerações:

- Testando no Oracle 11gR2;
- Homologado na distribuição RHEL 5.5 x64;
- Database: orcl ;
- Database em ARCHIVEMODE ;
- Comunicação entre o Master e Standby deve estar configurada, seja no hosts do Linux, seja por DNS, e importante por TNSNAMES ;

1 - Criando o usuário de replicação no master:

$ set ORACLE_SID=orcl
$ sqlplus /nolog
SQL > CONNECT / AS SYSDBA
SQL > CREATE USER STANDBY
IDENTIFIED BY password
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;
SQL > GRANT CONNECT TO STANDBY;
SQL > GRANT RESOURCE TO STANDBY;
SQL > GRANT DBA TO STANDBY;
SQL > ALTER USER STANDBY ACCOUNT UNLOCK;
SQL > DISCONNECT

2 - Alterar parâmetros de destino dos archives no master:

$ sqlplus /nolog
SQL > ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/data/archive_log/arc1' SCOPE=SPFILE;
SQL > ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='LOCATION=/data/archive_log/arc2' SCOPE=SPFILE;

* Os comandos abaixo geram indisponibilidade:
SQL > SHUTDOWN NORMAL
SQL > STARTUP OPEN
SQL > DISCONNECT

3 - Testando a conta de replicação:

$ sqlplus /nolog
SQL > CONNECT standby/password
SQL > ALTER SYSTEM SWITCH LOGFILE;

system altered.

SQL > DISCONNECT

* Verifique se os archives foram gravados nas pastas setadas como 'LOCATION' no passo 2.

4 - Criando o controlfile do Oracle Physical Standby Database:

$sqlplus /nolog
SQL > CONNECT / AS SYSDBA
SQL > ALTER DATABASE CREATE STANDBY CONTROLFILE AS ‘/data/archive_log\CTLSTB01.ORA’;

5 - Criando o PFILE do Oracle Physical Standby Database:

SQL > CREATE PFILE='/data/archive_log/PFILENFE.ORA' FROM SPFILE;

6 - Realizar as cópias dos datafiles para o '/dados/archive_log':


* Os comandos abaixo geram indisponibilidade:
SQL > SHUTDOWN NORMAL
SQL > DISCONNECT
* Faça a cópia fria via S.O.


7 - Copie os datafiles do Master para o standby(o caminho utilizado no PFILE), password file também. Aloque o controfile criado para o Standby via SCP ou como achar melhor.

8 - Alocar corretamente datafiles no Oracle Standby(idem ao Master).

9 - Iniciar Oracle Standby Physical Standby:

* Se não sabe como criar uma instância podes criar uma database com o mesmo nome da Master e baixá-la depois.

$ set ORACLE_SID=orcl
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP NOMOUNT PFILE='/data/archive_log\PFILE.ORA';

10 - Criar SPFILE no Oracle Standby Physical Standby:

SQL > CREATE SPFILE FROM PFILE='/data/archive_log/PFILE.ORA';

* Após não precisará mais do PFILE.

11 - Mountar a database em modo Standby:

SQL > ALTER DATABASE MOUNT STANDBY DATABASE;

SQL > RECOVER AUTOMATIC STANDBY DATABASE;

 * Caso dê algum erro aqui acesse o Master e gere um novo archive conforme passo 3.

12 - Verificar se o Standby está consumindo archives:

* Execute o seguinte comando no Master e no Standby: 

SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
ou 
SELECT MAX(sequence#) FROM v$log_history;

O valor deve ser o mesmo, isto significa que a database Standby está consumindo os archives. Se der a diferença de um, basta gerar um novo archive no Master e realizar o procedimento de recovery no Standby.

13 - Automatizar a importação de archives:

* Agende um job no Crontab do Linux no Standby de tempo em tempo, o job deve ter o seguinte conteúdo:


- REPLICA.sh -


#!/bin/bash
# Script to sinc Master and Standby Oracle 


source /oracle/.bash_profile # (Aqui deve ter o LD_LIBRARY_PATH, SID, HOME)
sqlplus standby/password@MASTER <<EOS
ALTER SYSTEM SWITCH LOGFILE;
EOS
sqlplus sys/ as sysdba<<EOS
SHUTDOWN IMMEDIATE
STARTUP NOMOUNT
ALTER DATABASE MOUNT STANDBY DATABASE;
RECOVER AUTOMATIC STANDBY DATABASE;
exit
EOS
# EOF



*** Não esqueça de criar uma outra rotina que apague os archives antigos já consumidos pelo Standby.