1

Informixからデータを取得し、それをOracleのテーブルに挿入し、元のテーブルのフラグを更新する単純なデータインポーター/アップデーターに問題があります。セットアップはこれです

Pro*C program calls a PL/SQL procedure
The procedure 
  opens a cursor on Informix, 
  loops through each row
    insert the data into an oracle table
    commit
    update the "new data" flag in Informix (i.e. stop a re-import)
    commit

特定のOracleエラーを停止するには、2つのコミットが必要です(どちらかを忘れましたが、更新されるテーブルが2つのデータベースにあり、1つのコミットでは処理できないためです)。このコードは、ソーステーブルの少数のレコード(5〜10)に対しては正常に機能しますが、1000を超えるとフォールオーバーします。Oracleログディレクトリのアラートログに、「リモートエージェントへのRPC接続が失われました」というエラーが表示されます。Informixディレクトリに対応するエラーがないため、ドライバに障害があると思われます。RedHatのunixODBCドライバーでOracle10.2を使用しています。

誰かが回避策や実際にそれを修正する方法について何かアイデアがありますか?このエラーメッセージに関する有用な情報はないようです。ほとんどのページは、「Oracleの問題ではありません」という行に沿って何かを言っているだけです。

4

1 に答える 1

1

通常、COMMITは開いているカーソルを閉じます。InformixのカーソルをHOLD付きのカーソルにする必要がある場合があります(ESQL / Cの専門用語-ODBCに変換する必要があります)。バッファリングが原因で、いくつかの行が機能する場合があります。1回のフェッチ操作でInformixから複数の(おそらく10を超える)レコードが収集される場合があります。この問題に気付くのは、データベースに戻ってさらにカーソルを閉じたときだけです。

説明として、私はこれに完全に満足しているわけではありません。UPDATEとCOMMITは、カーソルを閉じたものとしてマークする必要があります。

Informix ODBCドライバーを使用していると仮定すると(Informix用の他のベンダーのODBCドライバーとは対照的に)、プログラムが開始する前に環境でSQLIDEBUG = 2:xyzを設定することでこれをデバッグできる可能性があります。これにより、名前が「xyz _ ###」で始まるファイルが生成されます。ここで、「###」は一連の数字、場合によっては16進数です。このファイルは、によって解釈できますsqliprint。アプリケーションとInformixデータベースサーバー間で伝達される情報が表示されます。また、ネットワーク経由で送信されるデータのグループ化なども表示される場合があります。

于 2009-06-08T20:47:17.653 に答える