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