miércoles, 29 de marzo de 2017

Liberar Espacio de Archivado


A veces, cuando se realizan cargas masivas se genera gran cantidad de archivado que puede llegar a llenarse el directorio que asignamos para dichos ficheros. Y al entrar en la BBDD nos podemos encontrar con el error ORA-00257 (en el alert podrías encontrar errores relacionados como ORA-19809, ORA-19804, ORA-16038).





Lo primero que hay que saber es en qué directorio se almacena el archivado y cuánto es el máximo que se permite.

SQL>  show parameter db_recovery

NAME                                   TYPE             VALUE
------------------------------------ -----------        ------------------------------
db_recovery_file_dest          string            +DATOS
db_recovery_file_dest_size big integer     30G

En nuestro caso se trata de una BBDD con almacenamiento ASM (en caso de no ser así vendría la ruta completa) y con una capacidad de 30Gb. Existen 2 posibilidades:

1.- Borrar el archivado obsoleto/expirado
2.- Ampliar el espacio asignado

1.- Lo que primero intentaría borrar el archivado obsoleto/expirado.

/home/oracle> rman target /
RMAN> crosscheck archivelog all;
using target database control file instead of recovery catalog
...
RMAN> delete expired archivelog all;
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
...
Do you really want to delete the above objects (enter YES or NO)? yes

/test01/archive/TEST01/archivelog/2011_06_10/o1_mf_1_26650_6z3q5vmm_.arc deleted.

Puede que no se libere y en ese caso podríamos aumentar el tamaño del directorio en las propiedades de la BBDD.

2.- Ampliar el espacio asignado
SQL> alter system set db_recovery_file_dest_size=50G scope=BOTH;
SQL>  show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      +DATOS
db_recovery_file_dest_size           big integer 50G

Este parámetro se cambia dinamicamente, no hace falta reiniciar. A continuación hacemos un switch del fichero para ver si ya se ha solucionado el problema.

SQL> alter system switch logfile;

Y ya debería funcionar, se podría volver a cambiar el tamaño del directorio. Pero si este problema se repite habitualmente, puede que se tenga que dejar el valor del parametro db_recovery_file_dest_size.

¿Como saber el tamaño ocupado del directorio?
Si tienes un entorno ASM, Debes hacer:
Cargar variables de entorno para ASM
/home/oracle> . .profile_asm
Entrar en la consola de ASM
/home/oracle> asmcmd
Saber espacio global de los discos
ASMCMD> lsdg


State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Voting_files  Name
MOUNTED  EXTERN  N         512   4096  1048576   4544800   104783                0          104783              0             N  DATOS/

MOUNTED  EXTERN  N         512   4096  1048576     49152    44190                0           44190              0             N  CONTROL/
MOUNTED  EXTERN  N         512   4096  1048576     49152    44190                0           44190              0             Y  OCRVOT/


¿Como saber que ficheros de archivado hay en el directorio?
Cargar variables de entorno para ASM
/home/oracle> . .profile_asm
Entrar en la consola de ASM
/home/oracle> asmcmd
Saber espacio global de los discos
ASMCMD> cd /DATOS/NombreInstancia/DATAFILE
Para ver lo que contiene cada directorio
ASMCMD> ls
2017_01_01/
2017_01_02/
ASMCMD> cd 2017_01_01
ASMCMD> ls
thread_1_seq_104017.3677.99990003
thread_1_seq_104018.8532.99550003
...

No hay comentarios:

Publicar un comentario