web-dev-qa-db-ja.com

SSDTスキーマ比較は、BULK INSERTの進行中は機能しません

私は、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スキーマ比較でその機能を実行できるようにするソリューションの方がはるかに興味があります。

11
Dan

OBJECTPROPERTY呼び出しには、スキーマの安定性(Sch-S)ロックが必要です。これは、スキーマの変更(Sch-M)ロックがある 非互換 のみです。

BULK INSERTは、状況によってはSch-Mロックを取得します。これらは、Books Onlineの 一括インポートを最適化するためのガイドライン の「一括インポート時のテーブルロックとログ」セクションに記載されています。

Bulk Import Locking

宛先テーブルがクラスター化されている場合、有効にする トレースフラグ61 が役立つことがあります。これらの一連の投稿と データ読み込みパフォーマンスガイド を読み、この方法を選択する場合は十分にテストしてください。

SSDTがテーブルのIsEncryptedプロパティをチェックする理由がわかりません。それが理にかなっているシナリオを想像することはできませんが、それはSSDTの人々にとっての問題です。

19
Paul White 9