sql >> データベース >  >> RDS >> Oracle

ORA-29283の解決方法:無効なファイル操作

    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:ファイル書き込みエラー


    1. MySQL8の構成

    2. MySQLの複数のテーブルからのCOUNT(*)

    3. MicrosoftAccessで組み込みのCRMテンプレートにアクセスする方法

    4. Windows10でWorkbenchを使用してMySQL8をインストールする方法