ORA-29283:無効なファイル操作は非常に一般的なエラーです。
これは主に2つの理由で発生します
(1)ディレクトリとファイルには、Oracleデータベースを起動したのと同じユーザーに対してOSレベルで適切な権限が必要です。
例
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
これは、データベースの開始元であるOracleユーザーに対する適切な権限がディレクトリにない場合にも発生します。
Unixでグループレベルの変更を行っていて、Oracleユーザーが関与している場合は、データベースとリスナーの両方をバウンスすることをお勧めします
これは、次のようなOracleディレクトリを作成した場合にも発生する可能性があります
SQL> create directory TESTDIR as '/u555/oracle/tmp'; SQL> grant read,write on directory TESTDIR to public;
ただし、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
これは、ファイルを読み取っていて、OSoracleユーザーにそれを実行する権限がない場合にも発生する可能性があります
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)この失敗の2番目に多い理由は、Oracleデータベースおよびリスナー環境でのORA_NLS10の設定です。
プロセスでトラスを有効にすると、トラスファイルには、ファイルのブロックが読み取られたことが示され、NLS(ORA_NLS10)設定のため、後続のブロックを読み取ったり破損したりすることはできません。
トラスに次のエラーが表示される場合があります
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
データベースとリスナー全体で一貫した設定を行うことをお勧めします。
データベースとリスナーの両方に同じORA_NLS10が設定されているか、両方の値が設定されていません。
ORA_NLS10の設定
ORACLE_SID=TEST ORA_NLS10=< > sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
ORA_NLS10の設定を解除する
ORACLE_SID=TEST unset ORA_NLS10 sqlplus / as sysdba shutdown immediate startup lsnrctl stop TEST lsnrctl start TEST
データベースとリスナーがOracleクラスターを使用して開始されている場合は、srvctlでこの設定を行うことができます。
OSで以下のコマンドを使用してORA_NLSの設定を確認できます
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
リスナープロセスを見つける
ps -ef|grep list|grep TEST For Linux: $ strings /proc/<pmon process ID>/environ | grep NLS For Solaris: $ pargs -e <process ID> | grep NLS
例
問題を再現するために次の手順を実行できます
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
ORA-29283を解決する方法に関するこの投稿を気に入っていただければ幸いです:無効なファイル操作。これはトラブルシューティングに役立ちます
また、読む
R12.2でアプリのパスワードを変更する方法
FNDLOADコマンド:FNDLOADコマンド/ローダーは、EBS環境でテキストファイルとデータベースの間で構造化データを移動する汎用ユーティリティです。
ORA-29280:無効なディレクトリパス
ORA-29285:ファイル書き込みエラー