dblinkを介したOracleからDB2へのクエリは、DB2テーブルをブロックできますか?

StackOverflow https://stackoverflow.com/questions/1033046

  •  06-07-2019
  •  | 
  •  

質問

DBLinkを介してOracleからDB2システムに500.000レジスタを持つミドルサイズのクエリがあります。このクエリはDB2テーブルをブロックできるので、DBLinkを閉じるか、クエリ(Oracleテーブルへのinsert-select)でジョブを完了するまで更新できます

役に立ちましたか?

解決 2

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

フォーラム

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

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

代わりに、ORACLEとProgressの間のバッファーとしてSQLServerを使用しました。 SQLServerを使用すると、コミットされていない状態を読み取るように分離レベルを設定できます。そのため、SQLServerリンクサーバー経由で進行状況テーブルのSQLServerビューを作成し、それらのビューからoracleからSQLServerへのDB_Linkから選択します。

これは正常に機能しているようです"

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top