私は、SFSとSSDTの両方でTFS /ソース管理を使用する大規模なETLおよびDWプロジェクトで働いています。
今日、SSISパッケージがデータベーステーブルへの一括挿入を実行している間、そのデータベースに対してSSDTスキーマ比較を実行できないことがわかりました。一部のパッケージの完了には非常に長い時間がかかるため、これは残念です。データベースのバージョン管理のためにSSDTプロジェクトに保存するために、スキーマ比較機能を使用してデータベース構造への変更を検出します。
これについてもう少し詳しく調べたところ、SSDTのスキーマ比較関数が、データベース内のテーブルでOBJECTPROPERTY()
システム関数を呼び出すSQLスクリプトを実行していることがわかりました。具体的には、私の場合、OBJECTPROPERTY(<object_id>, N'IsEncrypted')
への呼び出しは、<object_id>
は、現在一括挿入されているテーブルを参照します。
Visual Studioでは、SSDTスキーマ比較はしばらくするとタイムアウトし、違いが検出されなかったと主張します。
SSDTでこの問題の回避策はありますか、それともMS Connectバグレポートを提出する必要がありますか?
または、BULK INSERTはSSISパッケージから行われるため、テーブルのOBJECTPROPERTY
- callsをロックせずにこの挿入を行う方法はありますか? 編集: SSISでOLE DBデスティネーション)、「ロックテーブル」からチェックマークを削除できます。 。一部のオブジェクトがロックされている場合でも、SSDTスキーマ比較でその機能を実行できるようにするソリューションの方がはるかに興味があります。
OBJECTPROPERTY
呼び出しには、スキーマの安定性(Sch-S)ロックが必要です。これは、スキーマの変更(Sch-M)ロックがある 非互換 のみです。
BULK INSERT
は、状況によってはSch-Mロックを取得します。これらは、Books Onlineの 一括インポートを最適化するためのガイドライン の「一括インポート時のテーブルロックとログ」セクションに記載されています。
宛先テーブルがクラスター化されている場合、有効にする トレースフラグ61 が役立つことがあります。これらの一連の投稿と データ読み込みパフォーマンスガイド を読み、この方法を選択する場合は十分にテストしてください。
SSDTがテーブルのIsEncrypted
プロパティをチェックする理由がわかりません。それが理にかなっているシナリオを想像することはできませんが、それはSSDTの人々にとっての問題です。