วิธีไม่ปิดการใช้งานทริกเกอร์ระหว่างการปรับใช้ใน SQL Server

เมื่อปรับใช้โครงการฐานข้อมูลเซิร์ฟเวอร์ SQL (โดยใช้ตัวช่วยสร้างการเผยแพร่ SSDT หรือการปรับใช้ DACPAC) สคริปต์ SQL อัตโนมัติจะเริ่มต้นด้วยการปิดใช้งานทริกเกอร์ทั้งหมด

ฉันจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร?

และผลข้างเคียงของการไม่ปิดการใช้งานทริกเกอร์มีอะไรบ้าง?

PRINT N'Disabling all DDL triggers...'
GO
DISABLE TRIGGER ALL ON DATABASE
GO
<ALL DB CHANGES>
GO
PRINT N'Reenabling DDL triggers...'
GO
ENABLE TRIGGER [LogSchemaChanges] ON DATABASE
GO
PRINT N'Update complete.';

ทำไมฉันถึงทำเช่นนี้? เรามีทริกเกอร์ที่จะบันทึกการเปลี่ยนแปลงสคีมาทั้งหมดไปยังบันทึกการตรวจสอบ ...และมันไม่ใช่เรื่องน่าขันใช่ไหม คุณไม่คิดว่า...


person Martin Thøgersen    schedule 07.01.2019    source แหล่งที่มา
comment
นี่เป็นตัวเลือกที่คุณสามารถเปิดหรือปิดได้อย่างแน่นอน   -  person Martin Smith    schedule 07.01.2019
comment
ผลข้างเคียงคือทริกเกอร์เหล่านั้นจะเริ่มทำงาน... และคุณจะเห็นประสิทธิภาพที่ได้รับผลกระทบ   -  person scsimon    schedule 07.01.2019


คำตอบ (1)


สำหรับการปรับใช้ ตัวช่วยสร้างการเผยแพร่ ด้วยตนเอง ให้เปลี่ยนลักษณะการทำงานภายใต้:

  1. การตั้งค่าการเผยแพร่ขั้นสูง > ทั่วไป > ตัวเลือกการปรับใช้ขั้นสูง
  2. ยกเลิกการเลือกปิดใช้งานและเปิดใช้งานทริกเกอร์ DDL อีกครั้ง

สำหรับการปรับใช้ DACPAC อัตโนมัติผ่าน SQLPackage ให้ตั้งค่า เผยแพร่คุณสมบัติ:

/p:DisableAndReenableDdlTriggers=False

ระบุว่าทริกเกอร์ Data Definition Language (DDL) ถูกปิดใช้งานเมื่อเริ่มต้นกระบวนการเผยแพร่และเปิดใช้งานอีกครั้งเมื่อสิ้นสุดการดำเนินการเผยแพร่หรือไม่

person Martin Thøgersen    schedule 07.01.2019
comment
** โปรดทราบว่าการใช้การตั้งค่าสถานะ DisableAndReenableDdlTriggers ทำให้ทริกเกอร์เปิดใช้งานอีกครั้งก่อนที่สคริปต์หลังการปรับใช้จะเริ่มขึ้น ** ซึ่งหมายความว่าสคริปต์หลังการปรับใช้จะถูกดำเนินการโดยที่ทริกเกอร์ทั้งหมดเปิดใช้งานอีกครั้ง - person gsubiran; 30.06.2020
comment
ฉันต้องใช้เวลาสองสามครั้งในการคิดออก แต่บรรทัดคำสั่งไม่ชอบช่องว่างรอบ ๆ = ฉันต้องใช้: /p:DisableAndReenableDdlTriggers=False - person JoeLeBaron; 20.11.2020