sql >> Database >  >> RDS >> Oracle

Hoe ORA-29283 op te lossen:ongeldige bestandsbewerking

ORA-29283:ongeldige bestandsbewerking is een veel voorkomende fout.

Het gebeurt meestal om de twee redenen

(1) De directory en het bestand moeten de juiste machtigingen op OS-niveau hebben voor dezelfde gebruiker die de Oracle-database heeft gestart

Bijvoorbeeld

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

Dit gebeurt ook als de directory niet de juiste toestemming heeft voor de Oracle-gebruiker van waaruit de database wordt gestart.

Als u wijzigingen aanbrengt op groepsniveau op Unix en er zijn Oracle-gebruikers bij betrokken, wordt geadviseerd om zowel de database als de luisteraar te bouncen

Dit kan ook gebeuren als u een orakelmap zoals deze heeft aangemaakt

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

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

Maar het bestaat niet in 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

Dit kan ook gebeuren wanneer u het bestand aan het lezen bent en de OS oracle-gebruiker geen toestemming heeft om dit te doen

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) De op één na meest voorkomende reden voor deze fout is de instelling van ORA_NLS10 in de Oracle-database en listeneromgeving.

Als u truss op het proces inschakelt, toont het Truss-bestand dat een blok van het bestand is gelezen en dat volgende blokken niet kunnen worden gelezen of beschadigd vanwege NLS (ORA_NLS10)-instellingen.

De volgende fout kan worden weergegeven in de 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

Het wordt aanbevolen om consistente instellingen te hebben voor de database en de luisteraar.

Ofwel hebben zowel de database als de listener dezelfde ORA_NLS10 ingesteld of beide hebben de waarden niet ingesteld.

ORA_NLS10 instellen

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

ORA_NLS10 uitschakelen

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

Als de database en listener worden gestart met Oracle-cluster, kunnen we deze instelling in de srvctl doen.

We kunnen de instelling van ORA_NLS controleren met behulp van de onderstaande opdracht in het besturingssysteem

Vind het PMON-proces

ps -ef|grep pmon|grep TEST

For Linux:

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

For Solaris:

$ pargs -e <process ID> | grep NLS

Vind het luisterproces

ps -ef|grep list|grep TEST

For Linux:

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

For Solaris:

$ pargs -e <process ID> | grep NLS

Voorbeeld
We kunnen het volgende doen om het probleem te reproduceren

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

Ik hoop dat je dit bericht leuk vindt over het oplossen van ORA-29283:ongeldige bestandsbewerking en dit helpt bij het oplossen van problemen

Lees ook

Het wachtwoord van apps wijzigen in R12.2
FNDLOAD-opdracht:FNDLOAD-opdracht/lader is een hulpprogramma voor algemeen gebruik dat gestructureerde gegevens verplaatst tussen een tekstbestand en een database in een EBS-omgeving.
ORA-29280:ongeldig mappad
ORA-29285:schrijffout bestand


  1. Een msdb-gebruikerstoegang verlenen tot een database-e-mailprofiel in SQL Server (T-SQL)

  2. Wijzig limiet voor Mysql Rijgrootte te groot

  3. Voorbeeld van een lus in MySQL

  4. Een titel toevoegen aan een rapportkoptekst in Microsoft Access