米O社データベース(業界人なら言わずと知れた・・・)のシステム開発でハマリました。やっとリリースしたバッチプログラムがある日突然・・・「ORA-02049:タイムアウト:分散トランザクションがロックを待機しています。」というメッセージを残して落ちてしまいました。リモートデータベースにDMLを発行しているところはないし、訳がわからず半日調査。やっとわかりました、原因が。。。分散トランザクションはDMLの発行で形成されるとばかり思っていたのですが、リモートへのselectでも形成されるとのこと。最初は疑心暗鬼でしたが実験!!1)selectsysdatefromdual@リモート2)別セッションでLocalテーブルAのレコードをLOCK3)LocalテーブルAのレコードをUPDATE60秒後に出ましたORA-02049ざっと説明を読む限り、O社データベースのデッドロックの検出機構はLocal環境のみに対応していて分散環境には対応できないため、タイムアウトを設けているとか・・・このタイムアウト値は初期化パラメータ(distributed_lock_timeout)で調整可能です。今回の対応はトランザクション単位に影響が出ないため、リモートselect後にcommitを発行することにより対応しました。やれやれ・・・Netで調べると、同様の障害にハマッタ記事が散見されました。私だけではないと思いちょっとホッとしています。
まだ知らないの?安心のオンライントレード選びが不安なら、こちら。オンライントレード詳しく調べるならオンライントレードのサイトはこちらです。
