Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment résoudre ORA-29283 :opération de fichier invalide

ORA-29283 :une opération de fichier non valide est une erreur assez courante.

Cela se produit principalement pour les deux raisons

(1) Le répertoire et le fichier doivent disposer des autorisations appropriées au niveau du système d'exploitation pour le même utilisateur qui a démarré la base de données Oracle

Par exemple

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

Cela se produit également si le répertoire ne dispose pas des autorisations appropriées pour l'utilisateur Oracle à partir duquel la base de données est démarrée.

Si vous effectuez des modifications au niveau du groupe sur Unix et que des utilisateurs Oracle sont impliqués, il est conseillé de faire rebondir à la fois la base de données et l'écouteur

Cela peut également arriver si vous avez créé un répertoire oracle comme celui-ci

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

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

Mais il n'existe pas dans le système d'exploitation

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

Cela peut également se produire lorsque vous lisez le fichier et que l'utilisateur Oracle du système d'exploitation n'a pas l'autorisation de le faire

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) La deuxième raison la plus importante de cet échec est le paramètre de ORA_NLS10 dans la base de données Oracle et l'environnement d'écoute.

Si vous activez le treillis sur le processus, le fichier Truss indique qu'un bloc du fichier est lu et que les blocs suivants ne peuvent pas être lus ou corrompus en raison des paramètres NLS (ORA_NLS10).

L'erreur suivante peut s'afficher dans le treillis

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

Il est recommandé d'avoir des paramètres cohérents dans la base de données et l'écouteur.

Soit la base de données et l'écouteur ont le même ensemble ORA_NLS10, soit les deux ont les valeurs non définies.

Paramètre ORA_NLS10

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

Désactiver ORA_NLS10

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

Si la base de données et l'écouteur sont démarrés à l'aide du cluster Oracle, nous pouvons définir ce paramètre dans le srvctl.

Nous pouvons vérifier le réglage de ORA_NLS en utilisant la commande ci-dessous dans le système d'exploitation

Trouver le processus PMON

ps -ef|grep pmon|grep TEST

For Linux:

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

For Solaris:

$ pargs -e <process ID> | grep NLS

Trouver le processus d'écoute

ps -ef|grep list|grep TEST

For Linux:

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

For Solaris:

$ pargs -e <process ID> | grep NLS

Exemple
Nous pouvons faire ce qui suit pour reproduire le problème

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

J'espère que vous aimez ce post sur Comment résoudre ORA-29283 :opération de fichier invalide et cela vous aidera dans votre dépannage

Aussi, lisez

Comment changer le mot de passe des applications dans R12.2
Commande FNDLOAD :la commande/chargeur FNDLOAD est un utilitaire polyvalent qui déplace des données structurées entre un fichier texte et une base de données dans un environnement EBS.
ORA-29280 :chemin de répertoire invalide
ORA-29285 :erreur d'écriture de fichier