ฉันกำลังทำงานในโครงการ ETL และ DW ขนาดใหญ่ที่เราใช้ TFS / แหล่งควบคุมร่วมกับทั้ง SSIS และ SSDT
วันนี้ฉันค้นพบว่าในขณะที่แพคเกจ SSIS กำลังทำ BULK INSERT ในตารางฐานข้อมูลเป็นไปไม่ได้ที่จะทำการเปรียบเทียบ SSDT Schema กับฐานข้อมูลนั้น นี่เป็นสิ่งที่โชคไม่ดีเนื่องจากแพ็คเกจบางรายการของเราใช้เวลาค่อนข้างนานในการดำเนินการให้เสร็จสมบูรณ์ เราต้องการใช้ฟังก์ชั่น Schema Compare เพื่อตรวจจับการเปลี่ยนแปลงโครงสร้างฐานข้อมูลเพื่อบันทึกไว้ในโครงการ SSDT ของเราสำหรับการควบคุมเวอร์ชันของฐานข้อมูล
เมื่อดูเพิ่มเติมเล็กน้อยฉันพบว่าฟังก์ชัน Schema Compare ใน SSDT เรียกใช้งานสคริปต์ SQL ที่เรียกใช้OBJECTPROPERTY()
ฟังก์ชันระบบบนตารางในฐานข้อมูล โดยเฉพาะอย่างยิ่งในกรณีของฉันการโทรใด ๆ ที่OBJECTPROPERTY(<object_id>, N'IsEncrypted')
ดูเหมือนว่าจะถูกบล็อกเมื่อ<object_id>
อ้างถึงตารางที่กำลังถูกแทรกจำนวนมากในปัจจุบัน
ใน Visual Studio นั้น SSDT Schema เปรียบเทียบจะหมดเวลาเพียงครู่เดียวและอ้างว่าไม่มีการตรวจพบความแตกต่าง
มีวิธีแก้ไขปัญหานี้ใน SSDT หรือฉันควรลองรายงานข้อผิดพลาด MS Connect หรือไม่
อีกทางหนึ่งเนื่องจาก BULK INSERT เกิดขึ้นจากแพ็คเกจ SSIS อาจมีวิธีใดวิธีหนึ่งในการแทรกโดยไม่ต้องล็อคOBJECTPROPERTY
-calls บนโต๊ะ? แก้ไข:ใน SSIS OLE DB Destinations เราสามารถลบเครื่องหมายถูกออกจาก "Lock Table" ซึ่งทำตามที่ระบุไว้ แต่สิ่งนี้อาจส่งผลกระทบต่อประสิทธิภาพการทำงานในบางสถานการณ์ ฉันสนใจโซลูชันที่ช่วยให้ SSDT Schema เปรียบเทียบทำงานได้มากขึ้นแม้ว่าวัตถุบางอย่างจะถูกล็อค