sql >> Base de Datos >  >> RDS >> Oracle

Cómo resolver ORA-29283:operación de archivo no válida

ORA-29283:La operación de archivos no válidos es un error bastante común.

Ocurre principalmente por dos razones

(1) El directorio y el archivo deben tener el permiso adecuado en el nivel del sistema operativo para el mismo usuario que inició la base de datos de Oracle

Por ejemplo

The directory does not exists on OS

ls  /u555/app/oracle

No such file or directory

SQL> declare
F_LOG utl_file.file_type;
begin
F_LOG := utl_file.fopen('/u555/app/oracle','k', 'w');
end;
/ 2 3 4 5 6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Esto también sucede si el directorio no tiene el permiso adecuado para el usuario de Oracle desde el que se inicia la base de datos.

Si está realizando algún cambio a nivel de grupo en Unix y los usuarios de Oracle están involucrados, se recomienda rebotar tanto la base de datos como el oyente también

Esto también puede suceder si ha creado un directorio de Oracle como este

SQL> create directory TESTDIR as '/u555/oracle/tmp';

SQL> grant read,write on directory TESTDIR to public;

Pero no existe en OS

SQL> declare
F_LOG  utl_file.file_type;
begin
F_LOG := utl_file.fopen('TESTDIR','k', 'w');
end;
/  2    3    4    5    6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Esto también puede suceder cuando está leyendo el archivo y el usuario del sistema operativo Oracle no tiene permiso para hacerlo

SQL> declare
F_LOG utl_file.file_type;
begin
F_LOG := utl_file.fopen('/u555/app/oracle','k', 'r');
end;
/ 2 3 4 5 6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

(2) La segunda razón más importante de este error es la configuración de ORA_NLS10 en la base de datos Oracle y el entorno de escucha.

Si habilita truss en el proceso, el archivo de truss muestra que se lee un bloque del archivo y los bloques posteriores no se pueden leer o corromper debido a la configuración de NLS (ORA_NLS10).

El siguiente error podría mostrarse en el truss

file read error
file write error
internal error
invalid maximum line size
invalid file name
directory access denied
invalid offset specified for seek
file remove operation failed
file rename operation failed
A stream error occurred during compression or uncompression.
A data error occurred during compression or uncompression.
invalid mime header tag
invalid encoded string
The compressed representation is too big

Se recomienda tener configuraciones consistentes en la base de datos y el oyente.

Tanto la base de datos como el Listener tienen el mismo ORA_NLS10 configurado o ambos tienen los valores sin configurar.

Configuración de ORA_NLS10

ORACLE_SID=TEST
ORA_NLS10=< >
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Desactivar ORA_NLS10

ORACLE_SID=TEST
unset ORA_NLS10
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Si la base de datos y el agente de escucha se inician con el clúster de Oracle, podemos realizar esta configuración en srvctl.

Podemos verificar la configuración de ORA_NLS usando el siguiente comando en el sistema operativo

Encuentra el proceso PMON

ps -ef|grep pmon|grep TEST

For Linux:

$ strings /proc/<pmon process ID>/environ | grep NLS

For Solaris:

$ pargs -e <process ID> | grep NLS

Encuentra el proceso de escucha

ps -ef|grep list|grep TEST

For Linux:

$ strings /proc/<pmon process ID>/environ | grep NLS

For Solaris:

$ pargs -e <process ID> | grep NLS

Ejemplo
Podemos hacer lo siguiente para reproducir el problema

ORA_NLS10=< >
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Now unset ORA_NLS10
Now Setup Bequeath connection
sqlplus / as sysdba
SQL> declare
F_LOG  utl_file.file_type;
begin
F_LOG := utl_file.fopen('TESTDIR','k', 'w');
end;
/  2    3    4    5    6
declare
*
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 4

Espero que te guste esta publicación sobre Cómo resolver ORA-29283:operación de archivo no válida y que esto te ayude en la solución de problemas

También, Leer

Cómo cambiar la contraseña de las aplicaciones en R12.2
Comando FNDLOAD:El comando/cargador FNDLOAD es una utilidad de propósito general que mueve datos estructurados entre un archivo de texto y una base de datos en un entorno EBS.
ORA-29280:ruta de directorio no válida
ORA-29285:error de escritura de archivo