ORA-29283:operação de arquivo inválido é um erro bastante comum.
Isso acontece principalmente por causa das duas razões
(1) O diretório e o arquivo devem ter a permissão apropriada no nível do SO para o mesmo usuário que iniciou o banco de dados Oracle
Por exemplo
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
Isso também acontece se o diretório não tiver a permissão apropriada para o usuário Oracle a partir do qual o banco de dados foi iniciado.
Se você estiver fazendo alguma alteração em nível de grupo no Unix e usuários oracle estiverem envolvidos, é aconselhável devolver o banco de dados e o ouvinte também
Isso também pode acontecer se você criou um diretório oracle como este
SQL> create directory TESTDIR as '/u555/oracle/tmp'; SQL> grant read,write on directory TESTDIR to public;
Mas não existe no sistema operacional
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
Isso também pode acontecer quando você está lendo o arquivo e o usuário do sistema operacional oracle não tem permissão para fazê-lo
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) A segunda maior razão para essa falha é a configuração de ORA_NLS10 no banco de dados Oracle e no ambiente do ouvinte.
Se você habilitar o truss no processo, o arquivo Truss mostrará que um bloco do arquivo foi lido e os blocos subsequentes não podem ser lidos ou corrompidos devido às configurações de NLS (ORA_NLS10).
O seguinte erro pode ser mostrado na treliça
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
É recomendável ter configurações consistentes no banco de dados e no ouvinte.
Tanto o banco de dados quanto o Listener têm o mesmo conjunto ORA_NLS10 ou ambos têm os valores não definidos.
Configurando ORA_NLS10
ORACLE_SID=TEST ORA_NLS10=< > sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Desativando ORA_NLS10
ORACLE_SID=TEST unset ORA_NLS10 sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Se o banco de dados e o listener estiverem sendo iniciados usando o cluster Oracle, podemos fazer essa configuração no arquivo srvctl.
Podemos verificar a configuração de ORA_NLS usando o comando abaixo no sistema operacional
Encontre o processo 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
Encontre o processo do ouvinte
ps -ef|grep list|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
Exemplo
Podemos fazer o seguinte para reproduzir o 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 você goste deste post sobre Como resolver ORA-29283:operação de arquivo inválido e isso ajuda na sua solução de problemas
Além disso, leia
Como alterar a senha de aplicativos no R12.2
Comando FNDLOAD:O comando/carregador FNDLOAD é um utilitário de uso geral que move dados estruturados entre um arquivo de texto e um banco de dados em um ambiente EBS.
ORA-29280:caminho de diretório inválido
ORA-29285:erro de gravação de arquivo