ORA-29283:Neplatná operace se souborem je docela běžná chyba.
Stává se to většinou ze dvou důvodů
(1) Adresář a soubor by měly mít příslušná oprávnění na úrovni operačního systému pro stejného uživatele, který spustil databázi Oracle
Například
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
To se také stane, pokud adresář nemá příslušné oprávnění pro uživatele Oracle, ze kterého je databáze spuštěna.
Pokud provádíte jakoukoli změnu na úrovni skupiny na Unixu a jsou zapojeni uživatelé oracle, doporučuje se odrazit také databázi a posluchače
To se také může stát, pokud jste vytvořili adresář oracle, jako je tento
SQL> create directory TESTDIR as '/u555/oracle/tmp'; SQL> grant read,write on directory TESTDIR to public;
Ale v OS
neexistujeSQL> 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
To se také může stát, když čtete soubor a uživatel OS oracle k tomu nemá oprávnění
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) Druhým nejčastějším důvodem tohoto selhání je nastavení ORA_NLS10 v prostředí databáze a posluchače Oracle.
Pokud v procesu povolíte truss, soubor truss ukazuje, že je přečten blok souboru a následné bloky nelze číst nebo poškodit kvůli nastavení NLS (ORA_NLS10).
V vazníku se může zobrazit následující chyba
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
Doporučuje se mít konzistentní nastavení napříč databází a posluchačem.
Buď databáze i Listener mají nastavenou stejnou hodnotu ORA_NLS10, nebo obě nemají nastavené hodnoty.
Nastavení ORA_NLS10
ORACLE_SID=TEST ORA_NLS10=< > sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Zrušení nastavení ORA_NLS10
ORACLE_SID=TEST unset ORA_NLS10 sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Pokud se databáze a posluchač spouští pomocí clusteru Oracle, můžeme toto nastavení provést v srvctl.
Nastavení ORA_NLS můžeme zkontrolovat pomocí níže uvedeného příkazu v OS
Najděte proces 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
Najděte proces posluchače
ps -ef|grep list|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
Příklad
Pro reprodukování problému můžeme provést následující
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
Doufám, že se vám líbí tento příspěvek na téma Jak vyřešit ORA-29283:neplatná operace se souborem a pomůže vám to při odstraňování problémů
Také si přečtěte
Jak změnit heslo aplikace v R12.2
Příkaz FNDLOAD:Příkaz/zavaděč FNDLOAD je univerzální nástroj, který přesouvá strukturovaná data mezi textovým souborem a databází v prostředí EBS.
ORA-29280:neplatná cesta k adresáři
ORA-29285:chyba zápisu souboru