Social Icons


Aprenda Oracle investindo pouco, por assinatura, no "Portal ABC do Oracle"

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

 

LINKS ÚTEIS

Suporte remoto alunos

Seguidores

Meu One Drive (antigo Sky Drive)