Mostrando entradas con la etiqueta delete expired archivelog all. Mostrar todas las entradas
Mostrando entradas con la etiqueta delete expired archivelog all. Mostrar todas las entradas

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