ORA-29283:ugyldig filoperation er en ganske almindelig fejl.
Det sker mest på grund af de to årsager
(1) Biblioteket og filen skal have passende tilladelse på OS-niveau for den samme bruger, som startede Oracle-databasen
For eksempel
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
Dette sker også, hvis biblioteket ikke har den passende tilladelse til den Oracle-bruger, som databasen er startet fra.
Hvis du laver en ændring på gruppeniveau på Unix, og Oracle-brugere er involveret, tilrådes det også at hoppe både databasen og lytteren
Dette kan også ske, hvis du har oprettet en oracle-mappe som denne
SQL> create directory TESTDIR as '/u555/oracle/tmp'; SQL> grant read,write on directory TESTDIR to public;
Men det findes ikke i OS
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
Dette kan også ske, når du læser filen, og OS Oracle-brugeren ikke har tilladelse til at gøre det
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) Den næststørste årsag til denne fejl er indstillingen af ORA_NLS10 i Oracle-databasen og lyttermiljøet.
Hvis du aktiverer truss på processen, viser truss-filen, at en blok af filen er læst, og efterfølgende blokke kan ikke læses eller beskadiges på grund af NLS (ORA_NLS10)-indstillinger.
Følgende fejl kan blive vist i 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
Det anbefales at have ensartede indstillinger på tværs af databasen og lytteren.
Enten har både databasen og Listener det samme ORA_NLS10 indstillet, eller begge har værdierne deaktiveret.
Indstilling af ORA_NLS10
ORACLE_SID=TEST ORA_NLS10=< > sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Frakobling af ORA_NLS10
ORACLE_SID=TEST unset ORA_NLS10 sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
Hvis databasen og lytteren startes ved at bruge Oracle-klyngen, kan vi foretage denne indstilling i srvctl.
Vi kan kontrollere indstillingen af ORA_NLS ved at bruge nedenstående kommando i OS
Find PMON-processen
ps -ef|grep pmon|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
Find lytteprocessen
ps -ef|grep list|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
Eksempel
Vi kan gøre følgende for at genskabe problemet
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
Jeg håber, du kan lide dette indlæg om Sådan løses ORA-29283:ugyldig filoperation, og dette hjælper med din fejlfinding
Læs også
Sådan ændres apps-adgangskode i R12.2
FNDLOAD-kommando:FNDLOAD-kommando/indlæser er et værktøj til generelle formål, der flytter strukturerede data mellem en tekstfil og en database i et EBS-miljø.
ORA-29280:ugyldig mappesti
ORA-29285:filskrivefejl