# Oracle Errors

Antes de poder solucionar un problema, es necesario saber qué ha pasado.

Oracle nos proporciona códigos de error que nos ayudan a identificar la causa del fallo.

*Pero… ¿y si no sabes interpretar esos códigos?*

Fue lo primero que pensé cuando empecé a pelearme con la infrastructura. Asi decidí crear mi propia documentación de errores, tan útil como la documentación de soluciones.

**ORA-00265**

```sql

SQL> alter database archivelog;

    ERROR at line 1:

    ORA-00265: instance recovery required, cannot set ARCHIVELOG mode
```

*   la BD no se apagó correctamente
    

**ORA-02097 & ORA-19802**

```sql
SQL> alter system set db_recovery_file_dest='/mnt/oracle/fast_recovery_area';

    ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid
ORA-19802: cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE
```

*   Antes de especificar un destino para los ARCHIVE LOGs necesitamos especificar un tamaño, eso se hace definiendo el parámetro *db\_recovery\_file\_dest\_size*
    

**ORA-01261 & ORA-01262**

Estos errores están relacionados con el parámetro ***db\_recovery\_file\_dest*.**

*   Oracle no puede acceder o encontrar el directorio especificado para *db\_recovery\_file\_dest*, ubicación de la **Fast Recovery Area (FRA)**. Esto puede deberse a:
    
    *   Directorio no existe
        
    *   problemas de permisos
        
    *   ruta mal configurada
        
    *   FRA apunta a una ruta mal montada, Oracle verifica permisos y acceso físico
        
*   Verifica el contenido de tu archivo *init.ora* y busca el parámetro *db\_recovery\_file\_dest* .
    
    *   Asegúrate de que el directorio especificado exista en el sistema operativo
        
    *   usuario oracle tenga permisos para acceder y escribir en ese directorio.
        

```sql
SQL> startup

ORA-01261: Parameter db_recovery_file_dest destination string is not valid
ORA-01262: Parameter db_recovery_file_dest destination cannot be translated
Errors in file /u01/app/oracle/diag/rdbms/orcl/trace/orcl_ora_12345.trc:
ORA-19802: cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE

-- el arranque se detiene en NOMOUNT O MOUNT, sin llegar a abrirse la BD
-- Oracle hace esto antes de abrir los datafiles, si no puede garantizar el acceso al destino
-- de la FRA, no continua el arranque


--Verificalos parametros
show parameter db_recovery_file_dest
show parameter db_recovery_file_dest_size



ALTER SYSTEM SET db_recovery_file_dest_size=10G; 
ALTER SYSTEM SET db_recovery_file_dest='/mnt/oracle/fast_recovery_area'; 
```

*   **Error al montar el Filesystem en la FRA**
    

Oracle intenta acceder a una ruta que sí existe como carpeta, pero **en realidad está vacía** porque el volumen no está montado.

```sql
ORA-01261: Parameter db_recovery_file_dest destination string is not valid
ORA-01262: Parameter db_recovery_file_dest destination cannot be translated
```

Incluso si la BD logra abrirse, los procesos ARC o RMAN intentarán escribir en la FRA. Si en ese momento el filesystem se desmonta o no tiene acceso correcto, se repiten estos errores en el *alert.log*:

```sql
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory
```

**ORA-19809**

Cuando se excede el espacio asignado a la FRA (db\_recovery\_file\_dest\_size) , y Oracle no puede liberar espacio automáticamente.

**ORA-19804**

Oracle RMAN (Recovery Manager) no puede reclamar espacio necesario para completar el backup. annot reclaim the space needed to complete the backup.

*   Ampliar tamaño
    
*   Eliminar backups antiguos
    

**DPI-1080: connection was closed by ORA-03113**

**ORA-03113:** indica que la conexión se perdió abruptamente entre cliente y servidor.

*   Oracle cierra las sesiones de usuarios inactivos (idle). Este error se da en el lado del cliente, no en el servidor.
    

**DPI-1080:** es el error correspondiente en el cliente **cx\_Oracle** o **ODPI-C** (usado por Python, Node.js, etc.).

*   Causas comunes:
    
    *   Sesión matada por inactividad
        
    *   Timeout
        
    *   Fallo en el listener o reinicio del servidor
        
*   Revisar en el lado del cliente si el firewall tiene timeouts/idle time en:
    
    *   Firewall
        
    *   VPN setup
        
    *   Load balancer
        

**ORA-12170 Connection Timeout**

Indica que el cliente intentó conectarse a la base de datos Oracle, pero no recibió respuesta dentro del tiempo límite configurado. Es básicamente un timeout en la conexión inicial.

*   Verificar la conectividad:
    

```powershell
# Si usas hostname
ping <nombre_servidor>
# O directamente la IP
ping <ip_servidor>

#Conectividad a nivel de puerto
telnet <host> <puerto>
nc -vz <host> <puerto>
Test-NetConnection -ComputerName <host> -Port <puerto> # (Windows)

# Verificar que el listener esté arriba
lsnrctl status

# Verificar conectividad TNS desde cliente a traves de la capa TNS de Oracle
tnsping <alias_tns>

# Verificar ruta
traceroute <host>
# o en Windows:
tracert <host>
```

**ORA-00600: internal error code, arguments: \[...\]\[...\]\[...\]\[...\]**

Error interno del motor de Oracle. Indica un fallo en una verificación interna o corrupción lógica.

Puedes encontrar mas informacion en *alert.log*, buscar el *trace file* en *$ORACLE\_BASE/diag ,* e interpretar los *arguments* para diagnosticar corrupción de bloques, errores de redo o bugs.

*   ORA-00600 \[2662\]: ocurre cuando el SCN leído es menor al SCN requerido, generalmente por un recovery inconsistente.
    

**ORA-01555: snapshot too old**

Ocurre cuando una consulta larga intenta leer versiones antiguas de bloques del *undo tablespace*, pero esos bloques ya fueron sobrescritos.

Vistas que pueden dar mas información:

*   *v$undostat*
    
*   *v$transaction*
    

**ORA-19502 / ORA-19504**

Error en la escritura de backup (RMAN o exportación). Puede ser por:

*   Espacio
    
*   Permisos
    
*   Fallos en disco/NFS
    

Recomendación, verificar:

*   Permisos en el destino de backup
    
*   Configuración del *db\_recovery\_file\_dest* y *rman channels*
    

Este post se actualizará periódicamente.

*Y tú, que errores conoces?*
