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