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

ORA02063DG4ODBCエラーの調査

    最近、SQL ServerODBCドライバーを使用してOracleをSQLServerに接続していたお客様から、次のエラーが報告されました。

    ORA-28545: error diagnosed by Net8 when connecting to an agent
    Unable to retrieve text of NETWORK/NCR message 65535
    	ORA-02063: preceding 2 lines from SQLSERVERLINK

    この「キャッチオール」エラーは、次の場合に発生する可能性があります。

    • 環境が正しく設定されていません(たとえば、LD_LIBRARY_PATHがunixODBCライブラリディレクトリを指していないか、ODBCSYSINIがターゲットODBC DSNが定義されているodbc.iniのコピーを含むディレクトリを指していない)。
    • >
    • 64ビットのDG4ODBCライブラリは32ビットのODBCライブラリで使用されており、その逆も同様です。
    • DG4ODBC構成で指定されたSIDが、tnsnames.oraで指定されたホストで実行されていません。

    ただし、調査の結果、これらの問題はいずれも適用されませんでした。原因はOracleの設定ミスの問題であると考えられます。これは、DG4ODBCデバッグが有効になっているにもかかわらず、DG4ODBCデバッグファイルが生成されていないためです。つまり、OracleがDG4ODBCライブラリをロードするまでに到達していませんでした。

    このような場合、お客様のOracle構成ファイルを要求します。これにより、.oraファイルで角かっこが欠落している、または置き忘れているのを見つけるのが難しいため、お客様の設定を再現できます。

    お客様のエラーを再現できませんでした。提供された構成ファイルは完全に機能しました。

    次のステップは、straceを使用することでした Oracleリスナーの起動時にロードされていた構成ファイルを「内部」で確認します。これを行うために、お客様に次のことを依頼しました:

    1. Oracleユーザーとして2つのシェルセッションを開始します。
    2. シェル1で、Oracleリスナーを停止します。
    3. 次のコマンドでリスナーを起動します:
      strace -f -o /tmp/easysoft.log -s 512 lsnrctl start
    4. シェル2で、SQL * PLusを起動し、DG4ODBC /SQLServerデータベースリンクに対してSQLステートメントを実行します。
    5. シェル2で、Oracleリスナーを停止します。

    straceログ/tmp/easysoft.logは、根本的な問題を明らかにしました。当初、Oracleリスナーはlistener.oraをロードして読み取ることができました:

    53049 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = 3
    53049 read(3, "#/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Network Configuration File:
    \n# Generated by Oracle configuration tools.\n\nLISTENER =\n (DESCRIPTION_LIST =\n (DESCRIPTION =\n (ADDRESS
    = (PROTOCOL = TCP)..., 4096) = 577

    ただし、顧客のOracleセットアップは次のとおりです。ユーザーAがリスナーを起動してユーザーBになりました。straceで明らかになったのは、ユーザーBにその.oraファイルをロードするための十分なアクセス許可がないことです。

    53051 open("/u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora", O_RDONLY) = -1
    EACCES (Permission denied)

    最終的に、これがお客様の「ORA02063」の原因でした。


    1. Rails4で生のSQLをサニタイズする方法

    2. 画像をデータベースに直接保存しますか、それともbase64データとして保存しますか?

    3. ファイル名をExcel接続文字列に動的に割り当てます

    4. ClusterControlを使用してHAProxyメトリックを監視する方法