การสำรองข้อมูลบางส่วนให้เล็กเมื่อใช้ SQL Server FILESTREAM


12

ฉันมีฐานข้อมูลที่มีข้อมูลเกือบ 1TB FILESTREAMที่ฉันไม่ต้องการสำรองข้อมูล (หากข้อมูลถูกลบมันจะถูกสร้างขึ้นใหม่โดยอัตโนมัติภายในสองสามชั่วโมงดังนั้นมันจึงไม่สำคัญ) ข้อมูลส่วนใหญ่มีการเปลี่ยนแปลงทุกสองสามวันดังนั้นการสำรองข้อมูลส่วนต่างจะไม่ช่วยลดขนาดลง

ฉันได้ทำการสำรองข้อมูลตามที่ฉันต้องการโดยการตั้งค่าโหมดการกู้คืนเป็นFullสร้างแยกต่างหากFILEGROUPสำหรับFILESTREAMการสำรองข้อมูลจาก "หลัก" FILEGROUPเท่านั้น ปัญหานี้เกิดจากการที่ล็อกไฟล์ (ซึ่งได้รับการสำรอง) ตอนนี้มีขนาดใหญ่โดยไม่จำเป็นเพราะมันรวมถึงFILESTREAMข้อมูล

SIMPLEโหมดการกู้คืนทำให้ความสามารถในการสำรองข้อมูลเฉพาะFILEGROUPของฉันลดลงดังนั้นฉันจึงไม่คิดว่าจะเป็นตัวเลือก

ความคิดของฉันคือการย้ายFILESTREAMข้อมูลไปยังฐานข้อมูลแยกจากกัน แต่ตอนนี้ฉันสูญเสียความสมบูรณ์ของการอ้างอิงและแน่นอนว่าได้รับมรดกจากปัญหาอื่น ๆ เช่นกัน

มีวิธีใดในการสร้างการสำรองข้อมูลบางส่วนในSimpleโหมดการกู้คืน (โดยไม่ต้องตั้งค่าFILESTREAMตารางให้อ่านอย่างเดียว)? ถ้าไม่มีวิธีแก้ไขปัญหาอื่นที่มีเหตุผลสำหรับปัญหาของฉันหรือไม่

คำตอบ:


3

ปัญหานี้เกิดจากการที่ล็อกไฟล์ (ซึ่งได้รับการสำรอง) ตอนนี้มีขนาดใหญ่โดยไม่จำเป็นเพราะมันรวมถึงข้อมูล FILESTREAM

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

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

หากเป็นแบบหลัง - ฟังดูเหมือนว่าคุณยินดีที่จะดำเนินการกับแบบจำลองการกู้คืนข้อมูลอย่างง่าย ๆ และไม่มีเวลาในการคืนค่าหากมันช่วยให้คุณมีการสำรองข้อมูลที่น้อยลง ซึ่งในกรณีนี้จะอยู่ในโหมดเต็มรูปแบบและยกเลิกการสำรองข้อมูลบันทึกของคุณ


ฉันไม่ได้ตระหนักถึงการสำรองข้อมูลบันทึกที่มักไม่ได้ผิดปกติ! "ทำไมไฟล์บันทึกขนาดใหญ่ถึงมีปัญหาอีกครั้ง" คำถามทำให้ฉันคิดอย่างนั้นจริง ๆ แล้วฉันไม่มีคำตอบ ดังนั้น 100 ให้กับคุณ!
David Murdoch

3

โซลูชันสำหรับฐานข้อมูลที่ตั้งค่าเป็นโหมดการกู้คืน SIMPLE กำลังมีข้อมูล FILESTREAM ในกลุ่มไฟล์แบบอ่านอย่างเดียว (ซึ่งไม่ใช่ตัวเลือกในอุดมคติของคุณ) จากนั้นสำรองข้อมูลเฉพาะกลุ่มไฟล์อ่าน / เขียนที่มีความแตกต่างดังนี้:

BACKUP DATABASE [name] READ_WRITE_FILEGROUPS TO DISK = '' WITH DIFFERENTIAL, COMPRESSION;

มันจะได้รับข้อมูลใด ๆ ที่มีการเปลี่ยนแปลงในกลุ่มไฟล์อ่าน / เขียน นั่นเป็นวิธีที่ง่ายที่สุดที่คุณสามารถเก็บการสำรองข้อมูลบางส่วนไว้ได้โดยไม่ต้องรับข้อมูล FILESTREAM อย่างไรก็ตามมันต้องการให้กระบวนการโหลดสำหรับข้อมูลดังกล่าวจะต้องแก้ไขกลุ่มไฟล์เพื่อให้สามารถอ่าน / เขียนโหลดข้อมูลเพิ่มเติมใด ๆ แล้วตั้งให้อ่านได้อีกครั้ง ไม่เหมาะอย่างแน่นอน


สิ่งนี้จะสมบูรณ์แบบหากระบบอัตโนมัติของเราถูกออกแบบมาเพื่อจัดการกับ FILESTREAM ที่ถูกปรับใช้ในบางครั้ง น่าเสียดายที่การเปลี่ยนการให้บริการทั้งหมดจะใช้เวลานานเกินไปโดยเฉพาะอย่างยิ่งเนื่องจากเราสามารถทิ้งฮาร์ดไดรฟ์ที่มีปัญหาได้ในขณะนี้ ขอบคุณสำหรับคุณในอนาคตการบริการใหม่ทั้งหมดจะได้รับการออกแบบโดยคำนึงถึงสิ่งนี้และวางแผนที่จะอัปเดตบริการเก่าเมื่อเวลาผ่านไป (ฉันหวังว่าฉันจะให้รางวัลคุณครึ่งหนึ่งของความโปรดปราน!
David Murdoch

2

ฉันรู้สึกสกปรกที่ให้สิ่งนี้เป็นตัวเลือก แต่ถ้าคุณเลือกที่จะแยกข้อมูล FILESTREAM ออกเป็นฐานข้อมูลของตัวเองคุณสามารถรักษา RI ระหว่างตารางในฐานข้อมูลแยกต่างหากด้วยวิธีการทริกเกอร์ :

ทริกเกอร์ -> ข้อสังเกต -> ข้อ จำกัด :
ทริกเกอร์จะถูกสร้างขึ้นในฐานข้อมูลปัจจุบันเท่านั้น อย่างไรก็ตามทริกเกอร์สามารถอ้างอิงวัตถุนอกฐานข้อมูลปัจจุบัน

คาดว่าปัญหาเรื่องประสิทธิภาพและส่วนหนึ่งของหนังศีรษะของคุณจะไม่มีขนหลังจากดึงกระจุกขนของคุณออกมาด้วยความหงุดหงิด แต่ในทางทฤษฎีคุณสามารถทำสิ่งนี้ได้ ฉันไม่แนะนำวิธีนี้ในทุกระดับ แต่ฉันขอแนะนำอย่างยิ่งให้คุณเพิ่มความถี่ของการสำรองข้อมูล tlog และ / หรือเปลี่ยนเป็นรูปแบบการกู้คืนข้อมูลที่บันทึกจำนวนมากและดูว่ามีพื้นที่ว่างเท่าใดที่ช่วยคุณประหยัด แต่นี่เป็นวิธีแก้ปัญหาที่เป็นไปได้ จริงๆแล้วคุณต้องคำนึงถึงประโยชน์ของการแยกข้อมูลนี้และจัดการกับการออกแบบฐานข้อมูล Frankensteinian แต่เป็นตัวเลือก

... ฉันต้องไปอาบน้ำตอนนี้ ...


1

ฉันรู้ว่าคำถามนี้ได้รับคำตอบแล้ว แต่มีวิธีแก้ไขปัญหาอื่นที่อาจช่วยเหลือผู้อื่น เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้จากบล็อกของ Brent Ozar ว่ามีตัวเลือกให้ยกเลิกการสำรองข้อมูลบันทึกของคุณทันที:

BACKUP LOG MyDb TO DISK='NUL:'

ดังนั้นคุณสามารถออกจากฐานข้อมูลของคุณในFullโหมดการกู้คืนและทำการสำรองข้อมูลของกลุ่มไฟล์ เมื่อบันทึกธุรกรรมของคุณใหญ่เกินไปให้ออกคำสั่งบันทึกการสำรองข้อมูลและดำเนินการเสร็จสิ้น


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