Oracle Standby Database
Olá pessoal, depois de muito tempo (um pouco mais de um ano rsrsrs) estou de volta para escrever mais um artigo aqui no blog. Hoje vamos falar um pouco sobre o Oracle Standby Database que é uma ferramenta do banco de dados Oracle que serve para replicar dados de uma base de dados para outra.
O que vou escrever abaixo é na verdade a cópia de um documento que tive que escrever aqui na empresa em que trabalho como parte da documentação de nossos processos internos e é um “step by step” de como construir um “Standby Database”, o documento não entra muito em detalhes, mais para quem conhece um pouco de Oracle já consegue executar as instruções e implementar o seu (caso queiram um documento mais detalhado me mandem um e-mail que eu envio um outro documento com maiores informações) Agora “mão na massa”.
1 – Pré-requisitos.
Os pré-requisitos para a criação de um Standby Database são:
- Dois servidores com as configurações mínimas para a instalação de um banco de dados Oracle versão 10g. Servidores estes que ao longo deste documento chamaremos de “Primário” e “Secundário”.
- O sistema operacional deve ser um sistema operacional homologado pela Oracle para a instalação do produto, deve ser o mesmo em ambos os servidores juntamente com a estrutura de diretórios onde o Oracle será instalado.
- Deve haver uma comunicação entre os dois servidores, de preferência através de uma rede privada.
- Ter o software Oracle Database 10g instalado e um banco de dados já criado e configurado no servidor “Primário” e somente ter instalado o software Oracle Database 10g no servidor “Secundário”.
2 – Iniciando a configuração.
Cumprido todos os pré-requisitos descritos acima, você tem o ambiente ideal para iniciar a configuração do “Standby Database”, basta seguir as instruções abaixo.
- Configurando o servidor “Primário”.
a) Habilite a opção FORCE LOGGING na instancia de banco de dados.
SQL> ALTER DATABASE FORCE LOGGING;
b) Crie um arquivo de senha, caso não exista. Para verificar a existência de um arquivo de senha execute um select na view “v$pwfile_users”. Para criar o arquivo de senhas execute o utilitario “orapwd” conforme exemplo:
$orapwd file=$ORACLE_HOME/dbs/orapwPRIM pwd password=xxxxxxx force=y
c) Configure os Standby Redo Log: Os arquivos de Standby Redo Log devem ter o mesmo tamanho dos arquivos de Redo Log do banco de dados e também deve ser na mesma quantidade com relação a grupos e membros. Essas informações podem ser coletadas na view “v$log”.
Para adicionar os arquivos de “Standby Redo Log” utilize o comando:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP X SIZE XXM;
Para certificar-se de que os arquivos foram criados corretamente, você pode consultar a view “v$standby_log”.
d) Coloque o banco de dados em modo “archivelog”;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
Após colocar o banco de dados no modo “archivelog”, você pode certificar-se disso com o comando:
SQL> ARCHIVE LOG LIST;
e) Ajuste do arquivo de parâmetros: Por default na versão 10g o banco de dados Oracle é criado com o arquivo de parâmetros dinâmico, ou seja, SPFILE. Porém para facilitar as alterações que devem ser feitas neste arquivo é preciso convertê-lo em um arquivo de parâmetros estático, considerando em nosso exemplo que o ORACLE_SID de nosso banco de dados primário seja “PRIM” e o ORACLE_SID de nosso banco de dados secundário seja “SEC”, execute os procedimentos abaixo:
SQL> CREATE PFILE='$ORACLE_HOME/dbs/pfile.ora' FROM SPFILE;
OBS: Caso você não queira criar um arquivo de parâmetros estático, todas as alterações que serão feitas a seguir, também podem ser feitas diretamente no SPFILE utilizando a seguinte sintaxe:
SQL> ALTER SYSTEM SET [PARAMETRO]=[VALOR] SCOPE=SPFILE;
Criado o arquivo, abra-o com um editor de texto qualquer (vi ou vim, por exemplo) e edite-o conforme segue:
DB_NAME=PRIM
DB_UNIQUE_NAME=PRIM
LOG_ARCHIVE_CONFIG=’DG_CONFIG(PRIM,SEC)’
LOG_ARCHIVE_DEST_1=’LOCATION=[/u05/oradata/ARCHIVES] VALID_FOR=(ALL_LOGFILES, ALL_ROLES) DB_UNIQUE_NAME=PRIM’
LOG_ARCHIVE_DEST_2=’SERVICE= LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=SEC’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
REMOTE_LOGIN_PASSWORD_FILE=’EXCLUSIVE’
FAL_SERVER=SEC
FAL_CLIEN=PRIM
STANDBY_FILE_MANAGEMENT=AUTO
DB_FILE_NAME_CONVERT=’[/u02/oradata/SEC’,’/u02/oradata/PRIM]’
LOG_FILE_NAME_CONVERT=’[/u02/oradata/SEC’,’/u02/oradata/PRIM]’
Os dados entre colchetes representam os diretórios de seu servidor e podem ser alterados por diretorios de sua preferência.
OBS: Os parâmetros DB_FILE_NAME_CONVERT e LOG_FILE_NAME_CONVERT, são respectivamente a localização de seus DATAFILES e LOGFILES, e só devem ser utilizados caso o diretório onde estes arquivos são armazenados, estejam diferentes nos servidores “Primário” e “Secundário”.
f) Crie um SPFILE a partir do PFILE criando anteriormente e inicie o banco de dados com ele.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP NOMOUNT PFILE='$ORACLE_HOME/dbs/pfilePRIM.ora’;
SQL> CREATE SPFILE FROM PFILE='$ORACLE_HOME/dbs/pfilePRIM.ora’;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
- Configurando o servidor “Secundário”.
a) Antes de iniciar as configurações do servidor “Secundário”, em primeiro lugar você deve fazer uma copia COLD* de seu banco “Primário” e transferi-la para o servidor “Secundário” respeitando a hierarquia dos diretórios.
- Para executar uma cópia COLD de seu banco de dados, dê um “shutdown immediate” e em seguida copie os arquivos de dados, arquivos log, arquivos de controle, arquivos de parâmetros e arquivos de senha.
b) No banco de dados primário crie um “Standby Controlfile”.
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> CREATE STANDBY CONTROLFILE AS ‘STAND.ctl’;
SQL> ALTER DATABASE OPEN;
Criado o “Standby Controlfile” copie o arquivo para o mesmo diretório no servidor “Secundário”.
c) Dentro do diretório $ORACLE_HOME/dbs abra o arquivo pfilePRIM.ora (que foi copiado do servidor “Primário”), altere seu nome para pfileSEC.ora e edite-o conforme a seguir.
AUDIT_FILE_DEST=’[/u01/app/oracle/admin/SEC/adump]’
BACKUGROUND_DUMP_DEST=’[/u01/app/oracle/admin/SEC/bdump]’
CORE_DUMP_DEST=’[/u01/app/oracle/admin/SEC/cdump]’
USER_DUMP_DEST=’ [/u01/app/oracle/admin/SEC/udump]’
CONTROL_FILES=’[]’ (Aqui deve ser mapeado o standby controlfile e recomenda-se multiplexa-lo)
DB_NAME=’PRIM’
DB_UNIQUE_NAME=’SEC’
LOG_ARCHIVE_CONFIG=’DG_CONFIG(PRIM)’
LOG_ARCHIVE_DEST_1=’LOCATION=/ u05/oradata/ARCHIVES VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=SEC’
LOG_ARCHIVE_DEST_2=’SERVICE=PRIM LGWR ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRIM’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
FAL_SERVER=PRIM
FAL_CLIENT=SEC
REMOTE_LOGIN_PASSWORDFILE=’EXCLUSIVE’
DB_FILE_NAME_CONVERT=’[/u02/oradata/PRIM’,’/u02/oradata/SEC]’
LOG_FILE_NAME_CONVERT=’[/u02/oradata/PRIM’,’/u02/oradata/SEC]’
OBS: Os parâmetros DB_FILE_NAME_CONVERT e LOG_FILE_NAME_CONVERT, são respectivamente a localização de seus DATAFILES e LOGFILES, e só devem ser utilizados caso o diretório onde estes arquivos são armazenados, estejam diferentes nos servidores “Primário” e “Secundário”.
d) Após os ajustes no arquivo de parâmetros, verifique se os dois servidores conseguem comunicação entre si através do Oracle, caso isso não aconteça verifique suas configurações em seus arquivos TNSNAMES.ora e LISTENER.ora
e) Criando o arquivo de inicialização do banco de dados: Para iniciar o banco de dados é preciso que o mesmo esteja sendo iniciado por um arquivo de parâmetros dinâmico (SPFILE), para isso inicie o banco de dados pelo arquivo de parâmetros estático (editado no item 3) e transforme-o em um arquivo de parâmetros dinâmico (SPFILE) conforme segue.
SQL> STARTUP NOMOUNT PFILE=’$ORACLE_HOME/dbs/pfileSEC.ora’;
SQL> CREATE SPFILE FROM PFILE=’$ORACLE_HOME/dbs/pfileSEC.ora’;
SQL> SHUTDOWN IMMEDIATE;
f) Iniciando o banco de dados “Standby”: Para iniciar o banco de dados “Standby”, o mesmo não pode ficar no estado “OPEN”, é necessário inicia-lo em modo “MOUNT” e em seguida executar um comando conforme segue:
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
g) Confira se tudo está funcionando certo, para isso você pode executar um teste forçando um “switch logfile” no banco de dados “Primário” e verificar se o mesmo está sendo aplicado no banco de dados “Secundário”.
No banco de dados “Primário” execute:
SQL> ALTER SYSTEM SWITCH LOGFILE;
No banco de dados “Secundario” execute a seguinte query:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE# DESC;
O resultado desta query ira lhe trazer a identificação do arquivo (através da coluna “sequence#”), data e hora de quando o processo de aplicação do arquivo iniciou e terminou (colunas “first_time” e “next_time”) e o status da aplicação do arquivo no banco de dados “Standby” (coluna “applied”).
Neste caso a informação mais importante refere-se a coluna “applied” onde sempre deve aparecer “YES” o que significa que o arquivo foi enviado com sucesso do servidor “Primário” e conseqüentemente também aplicado com sucesso no servidor “Secundário”.
É isso aí pessoal, não ocorrendo nenhum erro durante o processo quer dizer que seu Standby Database foi criado com sucesso. Espero ter ajudado.
Forte abraço e até a proxima!
Fala douglas bem legal esse esquema de blog…abs
Olá Douglas, muito bom o artigo, gostei muito.
Se possível, gostaria de receber o documento detalhado, pois estou pensando em fazer meu trabalho final da pós, em Adm de banco de dados Oracle, sobre o Standby Database.
Desde já agradeço.
Abraço.
Gustavo, estarei enviando no seu e-mail um documento bem detalhado a respeito do tema, se precisar de algo é só chamar.
Abs,
Douglas Paiva
Douglas,
Excelente artigo.
Se puder, me envie também esse material detalhado sobre Oracle standby database.
Obrigado.
Abraços.
Rafael Fassula
Bom dia.
Prezado Douglas, parabéns pelo o artigo.
Poderia me enviar o artigo detalhado?
Desde já agradeço.
Att,
Juscelino Neves
Prezado Douglas,
Bom dia!
Bem legal o seu artigo, excelente!
Gostaria de aprofundar mais no assunto, poderia por gentileza enviar o material detalhado.
Obrigado,
Att,
Boa noite Douglas, Gostei muito de sua iniciativa e compartilhar seu conhecimento sobre o assunto, apreciaria se pude-se me enviar algum material mais detalhado, estou implantando na empresa o standby database.
A versão que já temos instalada é 8.1i
Abraços.
Olá Douglas,
Parabéns pelo site e pelo ótimo tópico sobre Standby database.
Poderia por favor, enviar a documentação mais detalhada para mim também?
Obrigado e sucesso!