sql >> Databasteknik >  >> RDS >> Oracle

Så här löser du ORA-29283:ogiltig filoperation

ORA-29283:ogiltig filoperation är ett ganska vanligt fel.

Det händer mest på grund av de två anledningarna

(1) Katalogen och filen bör ha lämplig behörighet på OS-nivå för samma användare som startade Oracle-databasen

Till exempel

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

Detta händer också om katalogen inte har rätt behörighet för Oracle-användaren som databasen startas från.

Om du gör någon förändring på gruppnivå på Unix och Oracle-användare är inblandade, rekommenderas det att du även studsar både databasen och lyssnaren

Detta kan också hända om du har skapat en oracle-katalog som denna

SQL> create directory TESTDIR as '/u555/oracle/tmp';

SQL> grant read,write on directory TESTDIR to public;

Men det finns inte 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

Detta kan också hända när du läser filen och OS Oracle-användaren inte har behörighet att göra 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äst största orsaken till detta misslyckande är inställningen av ORA_NLS10 i Oracle-databasen och lyssnarmiljön.

Om du aktiverar truss på processen visar truss-filen att ett block av filen är läst och att efterföljande block inte kan läsas eller skadas på grund av NLS (ORA_NLS10)-inställningar.

Följande fel kan visas 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 rekommenderas att ha konsekventa inställningar i databasen och lyssnaren.

Antingen har både databasen och Listener samma ORA_NLS10 inställda eller båda har värdena avaktiverade.

Ställa in ORA_NLS10

ORACLE_SID=TEST
ORA_NLS10=< >
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Avaktivera ORA_NLS10

ORACLE_SID=TEST
unset ORA_NLS10
sqlplus / as sysdba
shutdown immediate
startup
lsnrctl stop TEST
lsnrctl start TEST

Om databasen och lyssnaren startas med Oracle-kluster, kan vi göra den här inställningen i srvctl.

Vi kan kontrollera inställningen av ORA_NLS med kommandot nedan i OS

Hitta 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

Hitta lyssnarprocessen

ps -ef|grep list|grep TEST

For Linux:

$ strings /proc/<pmon process ID>/environ | grep NLS

For Solaris:

$ pargs -e <process ID> | grep NLS

Exempel
Vi kan göra följande för att återskapa 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

Jag hoppas att du gillar det här inlägget om Hur man löser ORA-29283:ogiltig filoperation och detta hjälper till med din felsökning

Läs även

Så här ändrar du applösenord i R12.2
FNDLOAD-kommando:FNDLOAD-kommando/lastare är ett allmänt verktyg som flyttar strukturerad data mellan en textfil och en databas i en EBS-miljö.
ORA-29280:ogiltig katalogsökväg
ORA-29285:filskrivfel


  1. Uppdatera med Join-fråga i Oracle

  2. Ansluter till Heroku Postgres från Spring Boot

  3. SQL-frågeoptimering:Bästa metoder för förbättrad prestanda

  4. SQL Server BIT Datatype – Ultimate Guide