quinta-feira, 1 de setembro de 2016

ERRO: ORA-00257: Archiver error


O processo de backup recebeu o erro ORA-00257 ao tentar fazer o "arquivamento" da log do banco de dados.


Esse erro ocorre na maioria das vezes por falta de espaço no local destino do archive (log file dest).


Caso esse problema não seja resolvido, essa área de archive poderá encher e causar a paralisação do banco de dados.

Para analisarmos a causa do problema, precisamos em primeiro lugar, verificar a log de execução do backup.

Verificando a log de execução do RMAN, obtivemos a seguinte mensagem:


RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-00554: initialization of internal recovery manager package failed

RMAN-04004: error from recovery catalog database: ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.




Em seguida, encontramos no alert log do banco de dados, o erro abaixo:


You have following choices to free up space from recovery area:

Mon Jul 04 11:13:51 2016

Errors in file /u01/app/oracle/diag/rdbms/.../.../trace/banco_arc2_6750260.trc:

ORA-19809: limit exceeded for recovery files

ORA-19804: cannot reclaim 44040192 bytes disk space from 15728640000 limit

1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
Mon Jul 04 11:13:51 2016
ARC2: Error 19809 Creating archive log file to '+DG_FRA'
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
Mon Jul 04 11:13:51 2016
Errors in file /u01/app/oracle/diag/rdbms/.../.../trace/banco_arc3_6422546.trc:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 34603008 bytes disk space from 15728640000 limit
Mon Jul 04 11:13:51 2016
ARC3: Error 19809 Creating archive log file to '+DG_FRA'
Mon Jul 04 11:13:51 2016
Errors in file /u01/app/oracle/diag/rdbms/.../.../trace/banco_arc0_11534440.trc:
ORA-19815: WARNING: db_recovery_file_dest_size of 15728640000 bytes is 100.00% used, and has 0 remaining bytes available.

Mon Jul 04 11:13:51 2016


Após a verificação das logs, percebemos que o motivo do erro ORA-00257 é a geração / armazenamento de archives que atingiu o limite máximo definido em db_recovery_file_dest.


Para verificarmos os valores definidos e a utilização do espaço, podemos seguir o roteiro abaixo:


1) Verificar o valor do db_recovery_file_dest


SQL> show parameter db_recovery_file_dest;



NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      +DG_FRA

db_recovery_file_dest_size           big integer 15000M




2) Verificar a utilização do espaço definido em db_recovery_file_dest


SQL> select name,space_limit/1024/1024/1024 as space_limit_GB, space_used/1024/1024/1024 as space_used_GB, space_reclaimable/1024/1024/1024 as space_reclaimable_GB, number_of_files FROM V$RECOVERY_FILE_DEST;

     Name       Space_limit_GB   Space_used_GB  Space_reclaimble_GB   Number_of_files
     +DG_FRA              14,828125                     14,7880859                                   0                                       1120



Se o valor encontrado em SPACE_USED for igual ou bem próximo do valor definido em SPACE_LIMIT, esta é a causa do erro ORA-00257.


Para corrigirmos esse problema, devemos:

1) Aumentar o valor destinado para db_recovery_file_dest_size

Para isso, podemos executar o comando:

      SQL> alter system set db_recovery_file_dest_size=60000M scope=both;



O valor 60000M é apenas um exemplo, e esse valor vai depender de cada ambiente.
Após alterar esse parâmetro, devemos checar novamente o espaço utilizado e verificar se não há necessidade de aumentar novamente esse valor, até que o valor do espaço definido como limite seja maior que o espaço usado.

Obs.: Este é apenas um primeiro passo para "liberar" o banco de dados para a geração de archives.
Obs.: O ideal é que o tamanho do space_limit seja igual ao espaço que o DG_FRA possua, mas um valor maior do space_limit será aceito pelo Oracle.


2) Fazer os backups arquives

Após aumentado o espaço limite, o banco de dados estará novamente livre para fazer os backups arquives.

É recomendável que sejam executados backups archive / crosscheck arquivelog.

Após a realização normal do backup arquive, poderemos verificar que o espaço utilizado (space_used) irá diminuir, ficando próximo a zero, da mesma forma que o DG_FRA (Disk Group onde são gerados os archives) também terá o seu tamanho utilizado diminuído.

Após esta constatação, podemos voltar o valor do db_recovery_file_dest_size para nosso valor original ou fazer uma adequação de tamanho, deixaondo com um tamanho diferente e que atenda a necessidade do ambiente em questão.


3) Aumentar o tamanho do DG (Disk Group)

Uma outra solução, que também podemos adotar é em conjunto com a alterarção do valor do db_recovery_file_dest_size, também aumentarmos o tamanho do DG onde os archives são armazenados.

Para esta solução, além da alteração dos parâmetros indicados acima, será necessário adicionar disco no DG (Disk Group).

Neste caso, com a adição de disco no DG, o valor definido para db_recovery_file_dest_size, não precisará retornar ao "original" e sim ficar igual ao novo valor do DG onde o disco for alocado.



4) Catálogo RMAN

Esse erro também pode ocorrer quando o banco de dados catálogo do RMAN está com problema. 

Esse mesmo erro "ORA-00257: Archiver error. Connect AS SYSDBA only until resolved" já ocorreu quando o catálogo RMAN estava com problema de acesso e a solução foi reiniciar o banco de dados catálogo RMAN.