sql >> Database teknologi >  >> RDS >> Oracle

Sådan løses ORA-29283:ugyldig filoperation

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


  1. Oracle DB citat kolonnenavne

  2. Sådan eksporteres SQL Server-data fra tabel til en CSV-fil

  3. Sådan fungerer ROW_NUMBER() i SQL Server

  4. Hvad er forskellen mellem et Oracle- og et Microsoft-skema?