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!