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