Criar Standby Database para versão standard
Olá a todos,
No artigo de hoje vou comentar sobre STANDBY DATABASE. Um banco de dados standby, também chamado de espera ou aguardando, é uma cópia transacional consistente de um banco de dados de produção, que é inicialmente criado a partir de uma cópia de backup do banco de dados primário.
Em um próximo artigo, vou mostrar também, como é possível utilizar a versão standard do Oracle para atualizar um banco standby, sem precisar das ferramentas automatizadas da Oracle (DataGuard, por exemplo). Claro que não é a melhor opção, mas o suficiente para quem precisa montar uma segurança (replicação de dados) e tem a versão Standard do banco de dados.
Em um próximo artigo, vou mostrar também, como é possível utilizar a versão standard do Oracle para atualizar um banco standby, sem precisar das ferramentas automatizadas da Oracle (DataGuard, por exemplo). Claro que não é a melhor opção, mas o suficiente para quem precisa montar uma segurança (replicação de dados) e tem a versão Standard do banco de dados.
Uma vez que o banco de dados standby é criado e configurado, devemos manter automaticamente o banco de dados standby através da transferência de dados de redo do banco de dados primário para o sistema de espera, onde os dados de redo são aplicados ao banco de dados standby.
Um banco de dados Standby pode ser um desses tipos:
Outra forma de verificar se esta em archive log mode é:
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 61
Current log sequence 63
Ok, vimos que o modo archivelog esta desabilitado, para habilitar precisamos parar o banco:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
Subindo a base no estado mount:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 535662592 bytes
Fixed Size 1337720 bytes
Variable Size 327157384 bytes
Database Buffers 201326592 bytes
Redo Buffers 5840896 bytes
Database mounted.
Alterado o banco para o modo archivelog:
SQL> alter database archivelog;
Database altered.
Abrindo o banco:
SQL> alter database open;
Database altered.
Verificando o estado do archive log:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 78
Next log sequence to archive 80
Current log sequence 80
Forçando a troca do archive log, com isso, podemos ver se já foi gerado o arquivo de archive log:
SQL> alter system switch logfile;
System altered.
Fazer backup do banco de dados primário:
Um banco de dados Standby pode ser um desses tipos:
- Banco de dados standby físico;
- Banco de dados standby lógico;
- Banco de dados standby instantâneo (snapshot);
- Standby Database Físico
Um banco de dados standby físico é uma cópia exata, bloco para bloco de um banco de dados primário. Um standby físico é mantido como uma cópia exata através de um processo chamado de Redo Apply, em que refazer os dados recebidos a partir de um banco de dados principal é continuamente aplicada a um banco de dados standby, utilizando os mecanismos de recuperação de banco de dados. Um standby físico pode ser aberto para acesso somente leitura e usado para descarregar as consultas de um banco de dados primário. Se uma licença para a opção ativa do Oracle Data Guard for comprada, Redo Apply pode estar ativo enquanto o standby físico está aberto, permitindo consultas para retornar resultados que são idênticos aos que seriam devolvidos a partir do banco de dados primário. Esse recurso é conhecido como o recurso de consulta em tempo real.
- Standby Database Lógico
Um banco de dados standby lógico é inicialmente criado como uma cópia idêntica do banco de dados principal, mas pode ser alterado mais tarde para ter uma estrutura diferente. O banco de dados standby lógico é atualizado executando instruções SQL. Isso permite que os usuários acessem o banco de dados standby para consultas e relatórios a qualquer momento. Assim, o banco de dados standby lógico pode ser usado simultaneamente para proteção de dados e operações de reporte.
O Data Guard aplica automaticamente as informações do arquivo de redo log arquivados ou em espera refazendo o arquivo de log para o banco de dados standby lógico, transformando os dados nos arquivos de log em instruções SQL e, em seguida, executar as instruções SQL no banco de dados standby lógico. Porque o banco de dados standby lógico é atualizado utilizando instruções SQL, deve permanecer aberto. Embora o banco de dados standby lógico é aberto no modo de leitura / escrita , as suas tabelas de destino para o SQL regenerados estão disponíveis apenas para operações de somente leitura. Embora essas tabelas estão sendo atualizados, eles podem ser usados simultaneamente para outras tarefas, como a elaboração de relatórios, somatórios e consultas . Além disso, essas tarefas podem ser otimizados através da criação de índices adicionais e visualizações materializadas nas tabelas mantidas .
Um banco de dados standby lógico tem algumas restrições sobre os tipos
de dados, tipos de tabelas, e os tipos de operações de DDL e DML.
- Standby Database Instantâneo - SNAPSHOT
Um banco de dados standby instantâneo é de um tipo de banco de dados standby atualizável que fornece proteção de dados completo para um banco de dados primário. Um banco de dados standby instantâneo e recebe arquivos, mas não se aplica, refazer os dados de seu banco de dados primário. Refazer os dados recebidos do banco de dados primário é aplicado quando um banco de dados standby instantâneo é convertido novamente em um banco de dados físico de espera, depois de descartar todas as atualizações de locais para o banco de dados standby instantâneo.
Um banco de dados standby instantâneo normalmente diverge da sua base de dados primários ao longo do tempo, pois os dados de redo do banco de dados primário não é aplicada, uma vez que é recebido. Atualizações locais para o banco de dados instantâneo espera causará divergência adicional. Os dados na base de dados primário está totalmente protegido no entanto, por causa de uma espera instantâneo pode ser convertido de volta para uma base de dados de reserva física, a qualquer momento, e os dados recebidos a partir de redo o primário, então, ser aplicado.
Um banco de dados standby físico é uma cópia exata, bloco para bloco de um banco de dados primário. Um standby físico é mantido como uma cópia exata através de um processo chamado de Redo Apply, em que refazer os dados recebidos a partir de um banco de dados principal é continuamente aplicada a um banco de dados standby, utilizando os mecanismos de recuperação de banco de dados. Um standby físico pode ser aberto para acesso somente leitura e usado para descarregar as consultas de um banco de dados primário. Se uma licença para a opção ativa do Oracle Data Guard for comprada, Redo Apply pode estar ativo enquanto o standby físico está aberto, permitindo consultas para retornar resultados que são idênticos aos que seriam devolvidos a partir do banco de dados primário. Esse recurso é conhecido como o recurso de consulta em tempo real.
Um banco de dados standby lógico é inicialmente criado como uma cópia idêntica do banco de dados principal, mas pode ser alterado mais tarde para ter uma estrutura diferente. O banco de dados standby lógico é atualizado executando instruções SQL. Isso permite que os usuários acessem o banco de dados standby para consultas e relatórios a qualquer momento. Assim, o banco de dados standby lógico pode ser usado simultaneamente para proteção de dados e operações de reporte.
de dados, tipos de tabelas, e os tipos de operações de DDL e DML.
Um banco de dados standby instantâneo é de um tipo de banco de dados standby atualizável que fornece proteção de dados completo para um banco de dados primário. Um banco de dados standby instantâneo e recebe arquivos, mas não se aplica, refazer os dados de seu banco de dados primário. Refazer os dados recebidos do banco de dados primário é aplicado quando um banco de dados standby instantâneo é convertido novamente em um banco de dados físico de espera, depois de descartar todas as atualizações de locais para o banco de dados standby instantâneo.
Um banco de dados standby instantâneo normalmente diverge da sua base de dados primários ao longo do tempo, pois os dados de redo do banco de dados primário não é aplicada, uma vez que é recebido. Atualizações locais para o banco de dados instantâneo espera causará divergência adicional. Os dados na base de dados primário está totalmente protegido no entanto, por causa de uma espera instantâneo pode ser convertido de volta para uma base de dados de reserva física, a qualquer momento, e os dados recebidos a partir de redo o primário, então, ser aplicado.
Criar Standby Database
Bem pessoal, tendo conhecimento dos tipos de standby que poderemos criar com o SGBD Oracle, vamos colocar a mão na massa e criar o nosso, com a versão Standard. A princípio o que deveremos fazer é :
- Confirmar que o Banco de Dados esta em modo Archivelog;
- Fazer backup do Banco de Dados primário, gerando um controlfile para ser usado no Banco de Dados Standby;
- Restaurar esse backup em outra máquina, e abrir o Banco em modo "mount" apenas, com o controlfile standby;
- Configurar/criar alguns scripts para automatizar a cópia e aplicação dos archives gerados no Banco Primário.
Confirmar que o Banco de Dados esta em modo archivelog:
SQL> select log_mode from v$database;
LOG_MODE
————
NOARCHIVELOG
SQL> select log_mode from v$database;
LOG_MODE
————
NOARCHIVELOG
Outra forma de verificar se esta em archive log mode é:
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 61
Current log sequence 63
Ok, vimos que o modo archivelog esta desabilitado, para habilitar precisamos parar o banco:
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
Subindo a base no estado mount:
SQL> startup mount;
ORACLE instance started.
Total System Global Area 535662592 bytes
Fixed Size 1337720 bytes
Variable Size 327157384 bytes
Database Buffers 201326592 bytes
Redo Buffers 5840896 bytes
Database mounted.
Alterado o banco para o modo archivelog:
SQL> alter database archivelog;
Database altered.
Abrindo o banco:
SQL> alter database open;
Database altered.
Verificando o estado do archive log:
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 78
Next log sequence to archive 80
Current log sequence 80
Forçando a troca do archive log, com isso, podemos ver se já foi gerado o arquivo de archive log:
SQL> alter system switch logfile;
System altered.
Fazer backup do banco de dados primário:
./opt/oracle/.profile --carregar as variárias de ambiente
export ORACLE_SID=producao --nosso banco "chama" producao
rman target / nocatalog msglog=/backup/rman/bkpRmanPROD.log
export ORACLE_SID=producao --nosso banco "chama" producao
rman target / nocatalog msglog=/backup/rman/bkpRmanPROD.log
#--------------------#
Forca um CheckPoint
#--------------------
sql 'alter system checkpoint';
Forca um CheckPoint
#--------------------
sql 'alter system checkpoint';
#-----------------------------------------------
# Realiza CROSSCHECK para os backup's anteriores
#-----------------------------------------------
crosscheck backup device type disk;
crosscheck copy device type disk;
crosscheck archivelog all;
# Realiza CROSSCHECK para os backup's anteriores
#-----------------------------------------------
crosscheck backup device type disk;
crosscheck copy device type disk;
crosscheck archivelog all;
#-----------------------------
# Deleta os backups anteriores
#-----------------------------
delete noprompt backup;
#----------------------------------------------------------------------
# Deleta todos os archives, preservando os gerados nas ultimas 24 horas
#----------------------------------------------------------------------
delete noprompt archivelog until time 'sysdate - 4';
#-----------------------------
# Executa backup dos Datafiles
#-----------------------------
run {
allocate channel c1 device type disk
format '/backup/rman/df_%d_%U.rman' maxpiecesize 8 G;
backup channel c1
as compressed backupset
database tag 'DATABASE_FULL';
release channel c1;
}
#---------------------------------
# Executa backup dos Archives Logs
#---------------------------------
run {
allocate channel c1 device type disk
format '/backup/rman/al_%d_%U.rman' maxpiecesize 8 G;
backup channel c1
tag 'ARCHIVE_LOG'
( archivelog all skip inaccessible not backed up );
release channel c1;
}
#-----------------------------------------
# Executa backup do ControlFile Atualizado
#-----------------------------------------
run {
allocate channel c1 device type disk
format '/backup/rman/cfnormal_%d_%U.rman';
backup channel c1
tag 'CONTROL_FILE_NORMAL'
current controlfile;
release channel c1;
}
#-------------------------------------------------
# Executa backup do StandBy ControlFile Atualizado
#-------------------------------------------------
run {
allocate channel c1 device type disk
format '/backup/rman/cfstdby_%d_%U.rman';
backup channel c1
tag 'CONTROL_FILE_STBY'
current controlfile for standby;
release channel c1;
}
exit;
Se tudo deu certo até aqui, deveremos ter a pasta /backup/rman com os arquivos de backup contendo os datafiles e archiveslog, controlfile e standby controlfile. Todo esse conteúdo deve ser copiado para o outro servidor que conterá o standby database:
scp -R server01:/backup/rman /backup/.
Restaurar backup no servidor Standby:
Devemos confirmar qual o nome do arquivo do controlfile standby que efetuamos o backup: cfstdby_%d_%U.rman
./opt/oracle/.profile --carregar as variárias de ambiente
export ORACLE_SID=producao --nosso banco "chama" producao
rman target / nocatalog
startup nomount;
restore standby controlfile from '/backup/rman/cfstdby_PROD_ufnlsu7p_1_1.rman' ;
sql 'alter database mount standby database' ;
run {
restore database ;
}
recover database ;
exit ;
Nesse ponto, nosso Banco de Dados Standby já deve estar ok, pronto para aplicar novos archives. Então basta copiá-los do servidor primário para o servidor Standby, e executar o comando abaixo e seguir as indicações:
SQL> recover standby database;
É isso ai pessoal, qualquer dúvida, podem entrar em contato ou comentar. Vou iniciar um novo post para elaborar os scripts que poderão ser usados para automatizar a cópia dos archives de um servidor para o outro. Um forte abraço e boa sorte a todos.
scp -R server01:/backup/rman /backup/.
Restaurar backup no servidor Standby:
Devemos confirmar qual o nome do arquivo do controlfile standby que efetuamos o backup: cfstdby_%d_%U.rman
./opt/oracle/.profile --carregar as variárias de ambiente
export ORACLE_SID=producao --nosso banco "chama" producao
rman target / nocatalog
startup nomount;
restore standby controlfile from '/backup/rman/cfstdby_PROD_ufnlsu7p_1_1.rman' ;
sql 'alter database mount standby database' ;
run {
restore database ;
}
recover database ;
exit ;
Nesse ponto, nosso Banco de Dados Standby já deve estar ok, pronto para aplicar novos archives. Então basta copiá-los do servidor primário para o servidor Standby, e executar o comando abaixo e seguir as indicações:
SQL> recover standby database;
É isso ai pessoal, qualquer dúvida, podem entrar em contato ou comentar. Vou iniciar um novo post para elaborar os scripts que poderão ser usados para automatizar a cópia dos archives de um servidor para o outro. Um forte abraço e boa sorte a todos.
Muito bom!
ResponderExcluirPorém estou com algumas dúvida...
Não preciso copiar o arquivo de inicialização do banco de produção e modificar conforme minha base standby?
Toda vez que copiar o archivelogs do servidor de produção terei de fazer restore na base standby?
Você tem os scripts para automatizar as tarefas?
Se puderes me passar por email: gui.of@hotmail.com
Obrigado!
Abs
Olá, gui.of@hotmail.com.
ExcluirAcabo de responder o seu comentário em privado, ok??!!
À priori, o init deverá representar o ambiente em que esta instalado o banco de dados, mesmo porque esse ambiente de contingência não necessariamente deve ser idêntico ao de produção.
Abraço.
Oi Ricardo, tudo bem? queria muito saber no seu script, como vc faz a copia dos arquives de um ambiente que tem ASM para um que é file system, e como vc copia os redos...
ExcluirBao tarde Ricardo, minha dúvida é a mesma do Anônimo, será que terias como enviar também pro meu email? kirrasc@gmail.com
ResponderExcluirExcelente ajuda Ricardo, parabéns, muito boa explicação!!
ResponderExcluirUma dúvida, este processo seria apenas uni-direcional, ou seja, replicação dos dados gerados do servidor ativo para um de espera, certo?
Existe alguma forma de configurar bi-direcional em um Standard Edition?
Outra questão...
Caso tenha problemas no servidor, terei de abrir a base Stand by normalmente ou terei de executar outra função? Tem alguma maneira de transferir o dados usados no stand by para o servidor de utilização após a manutenção realizada? Como devo proceder?
Muito obrigado!!
Abraços