เครื่องมือข้อมูล SQL Server และฟังก์ชั่นพาร์ติชัน


16

ฉันกำลังสร้างสถานการณ์การโหลดหน้าต่างบานเลื่อนและฟังก์ชันพาร์ติชันจะเปลี่ยนขอบเขตตลอดเวลา

ฉันได้สร้างฟังก์ชั่นพาร์ติชั่นบางตัวในโครงการฐานข้อมูล SQL Server Data Tools (SSDT) ​​ที่มีขอบเขตเริ่มต้นบางอย่างฮาร์ดโค้ดไว้

อย่างไรก็ตามเมื่อเวลาผ่านไปและการเปลี่ยนแปลงขอบเขตของฟังก์ชั่นพาร์ติชั่นฐานข้อมูล SSDT ในอนาคตจะเผยแพร่กลับไปเป็นขอบเขตดั้งเดิม

มีวิธีการจัดการสถานการณ์นี้อย่างสง่างามอาจปิดการใช้งานการเผยแพร่ฟังก์ชั่นพาร์ทิชันหรือไม่

ฉันได้ลองเปลี่ยนคุณสมบัติBuild Actionของฟังก์ชั่นพาร์ติชันใน SSDT จากค่าเริ่มต้นBuildเป็นNoneแต่แล้วโครงการล้มเหลวในการสร้างเนื่องจากการอ้างอิงที่ขาดหายไปในวัตถุที่ขึ้นกับ


4
ฉันมักจะบอกว่าการใช้งานแบบ diff นั้นเสียโดยพื้นฐานแล้ว การโยกย้ายนั้นเป็นอุปมาที่ดีเยี่ยมอย่างมาก!
Remus Rusanu

'ตัวเลือกละเว้นดัชนี'ควรจะตั้งยังเพื่อหลีกเลี่ยงการสร้างดัชนีใหม่ SSDT แบ่งพาร์ติชันของคุณในแต่ละเวลาการใช้งานจะถูกเรียก

คำตอบ:


16

ฉันสามารถค้นหาวิธีแก้ไขปัญหาของฉันได้ - หวังว่านี่จะช่วยคนอื่นได้

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

จากคำอธิบายของตัวเลือก (เหมืองที่เน้น):

ระบุความแตกต่างในโครงร่างพาร์ติชัน ชั่นและฟังก์ชั่นควรละเว้นหรืออัพเดทเมื่อคุณเผยแพร่ไปยังฐานข้อมูล

อย่างไรก็ตามหากคุณได้กำหนดวัตถุพาร์ติชัน (ตารางหรือดัชนี) ด้วยการบีบอัดหน้าหรือแถวแม้ว่า ตัวเลือกIgnore partition schemesจะไม่สร้างฟังก์ชันพาร์ติชันอีกต่อไป แต่วัตถุที่แบ่งพาร์ติชั่นจะถูกสร้างขึ้นใหม่

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

WITH ( DATA_COMPRESSION = PAGE ON PARTITIONS (1)
     , DATA_COMPRESSION = PAGE ON PARTITIONS (2)
     , ...

เพื่อไม่ให้เกิดเหตุการณ์เช่นนี้คุณสามารถเลือกตัวเลือกละเว้นตารางได้ในกล่องโต้ตอบการตั้งค่าการเผยแพร่ขั้นสูงเดียวกัน- โปรดทราบว่าคุณจะไม่สนใจตัวเลือกอื่น ๆ เช่นALLOW_ROW_LOCKSและALLOW_PAGE_LOCKS( อ้างอิงตัวเลือกตาราง )

กล่องโต้ตอบการตั้งค่าการเผยแพร่ขั้นสูง


1
Google เพิ่งพาฉันไปที่นี่ ข้อมูลที่ยอดเยี่ยมขอบคุณสำหรับการแบ่งปัน
jamiet

โปรดทราบว่าหากคุณใช้กล่องโต้ตอบที่คล้ายกันในคุณสมบัติโครงการ -> หน้าแก้ไขข้อบกพร่องการเปลี่ยนแปลงจะถูกบันทึกลงในไฟล์. sqlproj.user แต่จะใช้เฉพาะเมื่อยกเลิกการโหลดโครงการเท่านั้น
Taran

3

อุ๊ยนั่นไม่ใช่สถานการณ์ที่ดี เท่าที่ฉันรู้ SSDT ไม่สนับสนุนสิ่งนี้ วิธีแก้ปัญหาที่ดีที่สุดที่ฉันคิดได้คือใช้สคริปต์ Pre-Deployment เพื่อจัดเก็บขอบเขตในตารางจากนั้นเปลี่ยนฟังก์ชันพาร์ติชันโดยใช้ค่าเหล่านั้นในสคริปต์ Post-Deployment


เพิกเฉยการตอบกลับของฉันที่นี่การตัดสินคำตอบของ Gonsalu ข้างต้นฉันผิดอย่างชัดเจน
jamiet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.