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.