Páginas

11 de mar. de 2011

Configurando Bancos de Dados para gerar Archived Logs

Pessoal,
   

     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

4 comentários:

  1. 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

    ResponderExcluir
    Respostas
    1. Sergio, 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.

      []s

      Excluir
  2. Fabio, no meu log alert tenho o seguinte registro

    Thu 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?

    ResponderExcluir
    Respostas
    1. 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.

      Quanto à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

      Excluir