web-dev-qa-db-ja.com

ORA-02049およびORA-02063エラー

Select For UPDATE NOWAIT

テーブル上で20プロセスが並行して実行されます

以下のエラーは、20のうち4つのプロセスによって返されます(16プロセスは成功)

SQL_UPDATE_ERROR- : SQL update error ORA-02049: timeout: distributed transaction 
waiting for lock ORA-02063

Oracleには、データベースリンクを使用してテーブルに接続できる数を定義するいくつかのパラメーターがありますか?

ステップの順序は選択です

2
Avnish Garg

これは必ずしもトランザクション数ではなく、タイムアウトです。パラメータdistrubuted_lock_timeoutはデフォルトで60秒に設定されています。このパラメーターの目的は、他の何かがその行で作業を実行している間、分散トランザクションが長時間実行待機状態になるのを回避することです。トランザクションは60秒間待機してから、Oracleによって強制終了されます。

このパラメーターは(インスタンスの再起動が必要です)必要に応じて(秒単位で)変更できます。

2
captjackvane

解決策を得た。 INITRANSの値を増やし、役立つインデックスを再構築します。 DB_LINKを介してアクセスされたテーブルのINITRANS = 1は、ITL待機が200を超え、行ロック待機が100000を超えます。

現在、INITRANS値は20に増加しており、その結果、分散/同時トランザクションの行ロック待機はありません。

1
Avnish Garg