0

DBLink を介して Oracle から DB2 システムへの 500.000 レジスタを持つ中規模のクエリがあります。このクエリは DB2 テーブルをブロックして、DBLink を閉じるまで、またはクエリ (Oracle テーブルへの挿入選択) でジョブを終了するまで更新できるようにすることはできますか?

4

2 に答える 2

0

DBLINK を READ UNCOMMITED として定義することはできないため、Oracle dblinks を介した選択でテーブルをブロックすることは可能ですが、SQLServer などのその機能をサポートする別の DB システムで問題を解決できます。このフォーラムの最後の投稿は次のように述べています。

フォーラム

「DB_LINKを介して外部データベースからデータを選択する場合でも、コミットされていない読み取りで選択するようにオラクルを設定またはだます方法はありません

これを回避するために私たちがしたことは、オラクルから odbc ドライバーをバイパスしてすべて一緒に進行することでした。これは、トランザクションを読み取り専用に設定した場合でも、DB_LINK を選択すると進行側のロックされた列が爆破されるためです。

代わりに、ORACLE と Progress の間のバッファとして SQLServer を使用しました。SQLServer では、分離レベルを非コミット読み取りに設定できます。そのため、SQLServer Linked サーバーを介して進行状況テーブルの SQLServer ビューを作成し、Oracle から SQLServer への DB_Link からそれらのビューから選択します。

これでうまくいきそうです」

于 2009-06-25T15:58:30.557 に答える
0

DB2 エンジンは、DBLink を select ステートメントを実行するリモート アプリケーションとして認識します。そのアプリケーションがカーソル安定性 (CS) または同様の適切な分離レベルを使用している場合、DB2 データベースは行を非常に長い間ロックするべきではありません。せいぜい、DBLink からのカーソルが DB2 クエリの結果セットを反復処理するときに、一連の非常に短い行レベル ロックが発生する可能性があります。DBLink によって DB2 側が変更されない場合、DB2 で重大なロックが発生することはないため、他のアプリケーションは DB2 に接続して更新を実行できるはずです。あなたの質問について何か誤解していた場合はお知らせください。回答を明確にします。

于 2009-06-24T21:50:32.633 に答える