ORA-29283:l'operazione su file non validi è un errore abbastanza comune.
Succede principalmente per i due motivi
(1) La directory e il file devono disporre dell'autorizzazione appropriata a livello di sistema operativo per lo stesso utente che ha avviato il database Oracle
Ad esempio
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
Ciò accade anche se la directory non dispone dell'autorizzazione appropriata per l'utente Oracle da cui viene avviato il database.
Se stai apportando modifiche a livello di gruppo su Unix e sono coinvolti utenti Oracle, si consiglia di eseguire il rimbalzo sia del database che del listener
Questo può succedere anche se hai creato una directory Oracle come questa
SQL> create directory TESTDIR as '/u555/oracle/tmp'; SQL> grant read,write on directory TESTDIR to public;
Ma non esiste nel sistema operativo
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
Questo può accadere anche quando stai leggendo il file e l'utente oracle del sistema operativo non dispone dell'autorizzazione per farlo
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 seconda ragione principale di questo errore è l'impostazione di ORA_NLS10 nel database Oracle e nell'ambiente listener.
Se abiliti il truss sul processo, il file Truss mostra che un blocco del file è stato letto e i blocchi successivi non possono essere letti o danneggiati a causa delle impostazioni NLS (ORA_NLS10).
Il seguente errore potrebbe essere visualizzato nel 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
Si consiglia di avere impostazioni coerenti nel database e nel listener.
Sia il database che Listener hanno lo stesso ORA_NLS10 impostato o entrambi hanno i valori non impostati.
Impostazione ORA_NLS10
ORACLE_SID=TEST ORA_NLS10=< > sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Disimpostazione di ORA_NLS10
ORACLE_SID=TEST unset ORA_NLS10 sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Se il database e il listener vengono avviati utilizzando il cluster Oracle, possiamo eseguire questa impostazione in srvctl.
Possiamo controllare l'impostazione di ORA_NLS usando il comando seguente nel sistema operativo
Trova il 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
Trova il processo di ascolto
ps -ef|grep list|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
Esempio
Possiamo fare quanto segue per riprodurre il 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
Spero ti piaccia questo post su Come risolvere ORA-29283:operazione su file non valida e questo aiuta nella risoluzione dei problemi
Inoltre, leggi
Come modificare la password delle app in R12.2
FNDLOAD Command:FNDLOAD command/loader è un'utilità generica che sposta i dati strutturati tra un file di testo e un database in un ambiente EBS.
ORA-29280:percorso della directory non valido
ORA-29285:errore di scrittura del file