No artigo de hoje irei apresentar o conceito geral de Archived Logs e iremos aprender como configurar um Banco de Dados Oracle para gerar Archive Logs.
Em Bancos de Dados Oracle de Produção é altamente recomendado habilitar a geração de Archived Logs. Agora vem a pergunta, o que são Archived Logs? Para entender o que são Archived logs (também conhecidos como Archived Redo Logs), é necessário entender primeiro o que são Redo Logs.
De um modo bem resumido, podemos dizer que os Redo Logs são 2 ou mais arquivos com tamanhos pré-definidos, que armazenam as mudanças que ocorreram em um Banco de Dados (BD) Oracle, com o objetivo de protegê-lo no caso de falhas. Os Redo Logs permitem a recuperação de dados no caso de falhas, quando por exemplo, o BD não consegue escrever os dados que foram alterados em uma tabela em seu respectivo arquivo de dados.
Se um BD possui 2 redo logs, as mudanças são registradas no primeiro até que ele não tenha mais espaço de armazenamento disponível. Quando ele enche, o BD começa a escrever as mudanças no 2º redo log. Quando o 2º redo log enche, as mudanças são registradas novamente no 1º. Desse modo, as mudanças são registradas nos redo logs de forma circular: quando um redo log enche o outro é (re)utilizado. Quando um redo log é reutilizado as informações contidas nele são sobrescritas e consequentemente perde-se as informações anteriores.
Para não perder as informações dos Redo Logs, antes deles serem sobrescritos, quando o BD está em modo Archive Log, uma cópia dos Redo Logs é arquivada, ou seja, uma cópia dos Redo Logs é gravada em arquivo em outro local pré-determinado. Isso possibilita como principal característica, a Alta Disponibilidade do BD, pois com Archived Log habilitado há uma garantia completa de recuperabilidade dos dados e os Backups podem ser realizados com o BD Online (Hot Backup). Sem Archived Logs os backups só podem ser realizados com o BD Offline (Cold Backup).
------------------------------------------------------------------------
PASSO-A-PASSO PARA COLOCAR O BD EM MODO ARCHIVED LOG
------------------------------------------------------------------------
--------------------------------------------------------------------------
Para iniciar o passo-a-passo abaixo, é necessário conectar-se previamente no Banco de Dados desejado, através do SQL Plus ou outra ferramenta compatível, com um usuário que tenha os privilégios de SYSDBA.
--------------------------------------------------------------------------
Passo 1: Verifique se o BD não está em modo archived log:
SELECT LOG_MODE FROM V$DATABASE;
Se o retorno for igual a NOARCHIVELOG execute os próximos passos, caso contrário o BD já está em modo archive log, neste caso, ignore os próximo passos.
Passo 2: Se o BD estiver aberto (online) configure o nome desejado para os arquivos de Archived Logs e dê um shutdown no BD:
ALTER SYSTEM SET log_archive_format = '%d_%t_%s_%r.arc' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
%d = ID do BD
%s = Número sequencial do log
%t = Número da thread
%r = ID de resetlogs. Assegura que nomes únicos sejam criados junto à múltiplas encarnações do BD.
Obs.: Existem mais variáveis % que podem ser utilizadas para definir o padrão de nomenclatura dos archive logs.
Passo 3: Monte o BD em modo exclusivo:
STARTUP MOUNT EXCLUSIVE;
Passo 4: Altere a configuração do BD para o modo Archived Log:
ALTER DATABASE ARCHIVELOG;
Passo 5: Configure o caminho (local) onde os Archived Logs serão gravados:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/disk1/archive' SCOPE=BOTH;
Substitua /disk1/archive pelo nome do disco e diretório desejado para gravar os archive logs.
Obs.: Se for desejado que os archived logs sejam multiplexados, ou seja, que as cópias sejam gravadas (redudantemente) em mais de um local, configure mais caminhos de gravação, como no exemplo abaixo:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'LOCATION = /disk2/archive' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3 = 'LOCATION = /disk3/archive' SCOPE=BOTH;
Passo 6: Inicialize a geração de Archive Logs:
ARCHIVE LOG START;
Passo 7: Abra o BD:
ALTER DATABASE OPEN;
Passo 8: Para finalizar, apenas verifique se o BD já está em modo archive log:
Execute o Passo 1 novamente. O retorno agora deve ser igual ao valor ARCHIVELOG.
Referências:
- http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/archredo.htm
- http://www.orafaq.com/wiki/Oracle_database_Backup_and_Recovery_FAQ
- http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams101.htm
- Guia de estudos Sybex: OCP: Oracle 10g Administration II
Excelente...Exemplo tenho um banco reserva em outra máquina e gostaria de estar aplicando os archives sempre que o de produção gerar. seria fácil recuperar isso na outra base ? assim não precisaria usar o export na produção para fazer backup .. isso mata a minha maquina de produção ... um abraço
ResponderExcluirSergio, se vc usa a versão Enterprise Edition do Oracle, recomendo que vc implemente o "Data Guard" neste BD. Se vc usa a versão Standard Edition, leia o doc oficial da Oracle "Alternative for standby database in standard edition (Doc ID 333749.1)", que ele te dará orientações de como montar o ambiente para aplicar os archives no segundo BD.
Excluir[]s
Fabio, no meu log alert tenho o seguinte registro
ResponderExcluirThu Mai 2 09:40:05 2016
Thread 1 cannot allocate new log, sequence 35997
Private strand flush not complete
Current log# 1 seq# 35996 mem# 0: C:\ORACLE\PRODUCT\10.2.0.2\ORADATA\ORCL2\REDO01.LOG
Thread 1 advanced to log sequence 35997
Current log# 2 seq# 35997 mem# 0: C:\ORACLE\PRODUCT\10.2.0.2\ORADATA\ORCL2\REDO02.LOG
Thu May 2 09:40:16 2016
Errors in file c:\oracle\product\10.2.0.2\admin\orcl2\udump\orcl2_ora_1388.trc:
O banco está com o recurso de FlashBack_On Desligado. Por questoes de memoria, já que esse servidor já opera com 100% de paginação.
O banco está no modo ArchivedMode porem a pasta destino está vazia como se nao estivesse gravando.
No arquivo de trace , tenho logs de lgwr e arc.
Tenho 3 grupos de redoLog de 51200kb cada. Com 1 membro em cada grupo.
Tentei observar na visao V $ INSTANCE_RECOVERY para determinar o tamanho de logs de redo on-line mas a coluna OPTIMAL_LOGFILE_SIZE está vazia.
O fato do FlashBack_on desta desabilitado impede o ArchivedLog de funcionar?
Ou o problema de meu RedoLog que está causando o problema?
Nayana, possivelmente seus archives estavam sendo gravados na Flash Recovery Area (FRA), que é a mesma área onde são gravados os Flashback Logs, quando Flashback Database está habilitado. Quando você desabilitou Flashback Database você desabilitou a FRA e agora não há mais lugar configurado para armazenar os archived logs.
ExcluirQuanto às suas mensagens no alert log, me parece que elas indicam apenas que o seu I/O está um pouco lento. Sugiro pesquisar mais no MOS ou google: http://www.oracleracexpert.com/2013/07/private-strand-flush-not-complete-in.html, http://sqlsewer.blogspot.com.br/2013/07/oracle-cannot-allocate-new-log-private.html.
[]s