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

LinuxでのDG40DBCデバッグツールとしてのstraceの使用

    最近、SQL ServerODBCドライバーを使用してOracleをSQLServerに接続していたお客様が、問題を解決するのが難しいという問題を経験しました。

    お客様は、DG4ODBCが使用されるたびにODBC Driver Managerログを取得していたため、パフォーマンスが低下しました。ODBC呼び出しのログには、パフォーマンスコストがかかります。顧客は、ログを有効にするエントリについてodbcinst.iniファイルを確認しました。これらのエントリは存在しませんでした。

    この問題を解決するために、straceツールを使用して、DG4ODBCが使用されているときに「舞台裏」で何が起こっていたかを発見しました。

    DG4ODBCはアプリケーションではなくライブラリであるため、DG4ODBCに関連付けられた操作をトレースするには、Oracleリスナープロセス(DG4ODBCの「親」アプリケーション)にstraceをアタッチする必要がありました。

    トレースファイルには、odbcinst.iniのどのコピーがロギングを有効にしているかが示されていました。

    straceをOracleリスナーにアタッチするために実行した手順は次のとおりです。

    $ ps -aef | grep tns*
    oracle   16242     1  0 15:02 ?        00:00:00 /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr LISTENER -inherit
    
    $ sudo strace -p 16242 -f -o /tmp/mytracefile

    (別のターミナルウィンドウ内):

    $ ./sqlplus / as sysdba
    
    $ select * from mytable@mylink;

    Oracleが「内部で」行ったことは、/ tmp/mytracefileにキャプチャされるようになりました。次に、ctrl-cを使用してstraceを停止し、/ tmp / mytracefileでsql.log(ODBC Driver Managerログファイル)を検索しました。私たちの場合、これは次のことを示しています:

    16436 open("/etc/odbcinst.ini", O_RDONLY) = 7
    16436 fstat(7, {st_mode=S_IFREG|0644, st_size=1365, ...}) = 0
    16436 read(7, "[ODBC]\nTrace=Yes\nTraceFile=/tmp/"..., 4096) = 1365
    16436 read(7, "", 4096)                 = 0
    16436 close(7)                          = 0
    16436 open("/u01/app/oracle/.odbcinst.ini", O_RDONLY) = -1 ENOENT (No such file or directory)
    16436 open("/tmp/sql.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 7 

    1. MySQLビューを作成して使用する方法

    2. SQLの順序:プロのようにデータを並べ替える5つの推奨事項と禁止事項

    3. LinqtoOracleを使用する方法はありますか

    4. 可変列名を使用した動的更新ステートメント