0

SQL Server 2008 R2 で定義されたビューがあり、そのビューは、リンク サーバーを使用して Oracle 10g のテーブルを「探しています」。

これを行う必要があります (SqlServer 側のストア プロシージャを使用):

  1. ビューから分子を取得します。
  2. SQL Server テーブルに影響を与えるいくつかのことを行います。
  3. ビューの分子を更新します。

これには少し時間がかかりますが、他のプログラムがテーブルを使用する可能性があるため、すべてのプロセスで oracle テーブルをロックしたいと考えています。だから、私がやりたいことは次のとおりです。

  1. Oracle テーブルをロックする
  2. ビューから分子を取得します。
  3. SQL Server テーブルに影響を与えるいくつかのことを行います。
  4. ビューの分子を更新します。
  5. ロックを解除する

手順 1 と 4 の実行方法がわかりません。

前もって感謝します。

4

1 に答える 1

0

私はオラクルで次のことを行います:

create materialized view foo_View  
as  
--select statement that has the data sql server is looking for

次に、このビューを一定間隔で再構築/更新するスケジューラ タスクを Oracle で実行します。

SQL Server が Oracle に何かを指示する必要はありません。アプリケーションが本来あってはならないところにあふれているように思えます。Oracle マテリアライズド ビューの利点は、この SQL Server プロセスの実行中に Oracle をシャットダウンせずにクエリを実行できることです。

コメントから

私のプロセスは SQL Server で実行されていますが、Oracle テーブルをロックする必要があります。

これが、具体化されたビューの使用を提案した理由です。SQL Server がアクセスできる唯一のデータはそのスナップショット (マテリアライズド ビュー) であるため、別のプロセスが基になるテーブルを変更しても気にしません。そのため、リソースの競合や、SQL Server プロセスを破壊する可能性のある途中の更新について心配する必要はありません。ここで重要なのは、具体化されたビューを介して利用可能なスナップショットによって定義されたnow場所に、どのデータが存在するかだけを気にすることです。now

于 2012-12-27T18:56:04.283 に答える