Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como resolver ORA-29283:operação de arquivo inválida


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