0

アプリケーションで SQL Server 管理オブジェクトを使用しています。アプリケーション内の SMO オブジェクトに対するほとんどの操作は、UI から直接トリガーされます。たとえば、ユーザーがオブジェクトを操作すると、SMO オブジェクト (テーブル、ビューなど) からプロパティの読み取りまたは書き込みが行われます。

ここで、一部のオブジェクトを定期的にスキャンするバックグラウンド操作を導入したいと思います (読み取り専用)。

私の質問は、これが SMO で問題を引き起こす可能性があるかどうかです。ドキュメントから、オブジェクトのインスタンス メンバーがスレッド セーフではないことがわかります。そのため、私の計画では、UI またはバックグラウンド スレッドからアクセスするたびに、単一の SMO オブジェクトごとにロックを設定します。しかし、2 つの異なるオブジェクト (View と Table など) に同時にアクセスするとどうなるでしょうか。プロパティの読み取りのみを行ったとしても、オブジェクトが完全に初期化されていない可能性があり、データベースからロードする必要があります。したがって、最悪の場合、SMO は両方のオブジェクトを同時に初期化する必要があります。SMO がこれを内部でどのように処理しているかは知らないので、これが SMO によって許可されているかどうか、または問題が発生するかどうかを誰かが知っているかどうか疑問に思っていました。

これを解決する方法に関する他の提案はありますか? SMO ライブラリ全体のグローバル ロックを回避したいのですが...

ありがとう!

4

1 に答える 1

0

私はSMOを使用していますが、通常の操作(スクリプト...)を実行したい場合は便利ですが、データベースオブジェクトを実際に管理したい場合は、システムストアドプロシージャを使用することをお勧めします(したがって、SMOは理解するための別のレイヤーではありません)ストアドプロシージャを使用すると、データをロックするかどうかを指定でき、可能な解決策になります

于 2012-08-05T19:30:14.467 に答える