Saya bekerja di proyek ETL dan DW besar di mana kami menggunakan TFS / kontrol sumber bersama dengan SSIS dan SSDT.
Hari ini, saya menemukan bahwa sementara paket SSIS melakukan BULK INSERT ke dalam tabel database, tidak mungkin untuk melakukan Perbandingan Skema SSDT terhadap database itu. Ini sangat disayangkan, karena beberapa paket kami membutuhkan waktu yang cukup lama untuk diselesaikan. Kami ingin menggunakan fungsi Bandingkan Skema untuk mendeteksi perubahan pada struktur basis data untuk menyimpannya dalam proyek SSDT kami untuk kontrol versi dari basis data.
Melihat sedikit lebih dalam ini, saya menemukan bahwa fungsi Skema Bandingkan di SSDT mengeksekusi skrip SQL yang memanggil OBJECTPROPERTY()
fungsi sistem pada tabel dalam database. Khususnya dalam kasus saya, semua panggilan ke OBJECTPROPERTY(<object_id>, N'IsEncrypted')
tampaknya diblokir, ketika <object_id>
merujuk ke tabel yang saat ini sedang dimasukkan secara massal.
Dalam Visual Studio, Bandingkan Skema SSDT hanya keluar setelah beberapa saat dan mengklaim bahwa tidak ada perbedaan yang terdeteksi.
Apakah ada solusi untuk masalah ini di SSDT, atau haruskah saya mencoba mengajukan laporan bug MS Connect?
Atau, karena BULK INSERT terjadi dari paket SSIS, apakah mungkin ada beberapa cara untuk membuat penyisipan ini tanpa mengunci OBJECTPROPERTY
-panggilan di atas meja? Sunting: Di SSIS OLE DB Destinasi, kita dapat menghapus tanda centang dari "Lock Table", yang melakukan apa yang dikatakannya, tetapi ini mungkin merusak kinerja dalam beberapa situasi. Saya jauh lebih tertarik pada solusi yang memungkinkan SSDT Schema Compare untuk melakukan tugasnya, bahkan jika beberapa objek terkunci.
sumber
Jawaban:
The
OBJECTPROPERTY
panggilan membutuhkan stabilitas skema (Sch-S) kunci, yang hanya kompatibel dengan modifikasi skema (Sch-M) kunci.The
BULK INSERT
akan mengambil kunci Sch-M dalam beberapa keadaan. Ini tercantum di bagian "Mengunci Tabel dan Logging Selama Impor Massal" dari Pedoman untuk Mengoptimalkan Impor Massal di Buku Daring:Jika tabel tujuan dikelompokkan, Anda mungkin menemukan mengaktifkan jejak bendera 610 membantu. Harap baca seluruh rangkaian pos tersebut dan Panduan Kinerja Pemuatan Data dan uji secara menyeluruh jika Anda memutuskan untuk memilih rute ini.
Saya tidak tahu mengapa SSDT memeriksa
IsEncrypted
properti untuk tabel. Saya tidak bisa membayangkan skenario di mana itu masuk akal, tapi itu pertanyaan untuk orang-orang SSDT.sumber