แบบจำลองการกู้คืนง่ายหรือเต็มสำหรับฐานข้อมูล


38

ฉันควรใช้แบบจำลองการกู้คืนแบบเต็มเมื่อใดและเมื่อใดควรใช้แบบจำลองการกู้คืนอย่างง่ายสำหรับฐานข้อมูล

ฉันใช้รูปแบบการกู้คืนแบบเต็มเสมอเพราะเป็นค่าเริ่มต้น แต่วันนี้ฉันพบข้อผิดพลาดนี้:

ผู้ให้บริการ Microsoft OLE DB สำหรับ SQL Server (0x80040E14) บันทึกธุรกรรมสำหรับฐานข้อมูล 'DATABASE NAME' เต็ม หากต้องการค้นหาสาเหตุที่พื้นที่ในบันทึกไม่สามารถนำกลับมาใช้ใหม่ได้ให้ดูคอลัมน์ log_reuse_wait_desc ใน sys.database

จริง ๆ แล้วฐานข้อมูลเฉพาะนั้นเป็นหนึ่งในฐานข้อมูลที่เล็กที่สุดและไม่ได้ใช้งานมากที่สุดบนเซิร์ฟเวอร์ของฉันดังนั้นฉันจึงไม่รู้เลยว่าจะสามารถบันทึกข้อมูลได้เต็มรูปแบบในฐานข้อมูลนี้ได้อย่างไร

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

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

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

แก้ไข:

ทุกคืนเวลา 1 นาฬิกาเรากำลังสำรองข้อมูลสคริปต์ทุกฐานข้อมูลบนเซิร์ฟเวอร์ สิ่งนี้กำลังดำเนินการโดยสคริปต์บรรทัด 31 ซึ่งส่วนที่สำคัญที่สุดคือ

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

รูปแบบการกู้คืนใหม่และ databaseshrink จะขัดแย้งกับสคริปต์นี้หรือไม่

เราไม่ได้ทำการสำรองฐานข้อมูลชนิดอื่น ๆ ดังนั้นจึงไม่ใช่การบันทึกธุรกรรม


สิ่งที่ควรค่าตอนนี้คือตอนนี้นี่ไม่ใช่ตัวเลือกใน Azure SQL - มันใช้การกู้คืนแบบเต็มเสมอ azure.microsoft.com/en-us/blog/…
jocull

คำตอบ:


60

ฉันควรใช้แบบจำลองการกู้คืนแบบเต็มเมื่อใดและเมื่อใดควรใช้แบบจำลองการกู้คืนอย่างง่ายสำหรับฐานข้อมูล

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

ผู้ให้บริการ Microsoft OLE DB สำหรับ SQL Server (0x80040E14) บันทึกธุรกรรมสำหรับฐานข้อมูล 'DATABASE NAME' เต็ม หากต้องการค้นหาสาเหตุที่พื้นที่ในบันทึกไม่สามารถนำกลับมาใช้ใหม่ได้ให้ดูคอลัมน์ log_reuse_wait_desc ใน sys.database

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

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

......

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

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

ข้อความที่ตัดตอนมา / อ้างอิงที่นำมาจากการอ้างอิง MSDN นี้ :

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

จากนั้นคุณทำการย่อขนาดแฟ้มฐานข้อมูลจริงและเนื่องจากมีพื้นที่ว่างในบันทึกธุรกรรมของคุณตอนนี้คุณสามารถย่อขนาดแฟ้ม NTFS ได้จริง

การอ่านควรใช้เวลาสักครู่ใน:

  1. แบบจำลองการกู้คืน
  2. การจัดการบันทึกการทำธุรกรรม (Gail Shaw)
  3. ปัจจัยที่อาจทำให้การตัดทอนล่าช้า

แก้ไขหลังจากแก้ไข :

รูปแบบการกู้คืนใหม่และ databaseshrink จะขัดแย้งกับสคริปต์นี้หรือไม่

ว่าBACKUP DATABASEคำสั่งจะทำงานร่วมกับแบบจำลองการกู้คืนอย่างใดอย่างหนึ่ง สำหรับฐานข้อมูลประจำหดตัว ... ไม่ทำมัน !!!! ปรับขนาดฐานข้อมูลของคุณอย่างจริงจังและถ้าคุณใช้แบบจำลองการกู้คืนเต็มรูปแบบจากนั้นตรวจสอบให้แน่ใจว่าคุณกำลังทำไฟล์บันทึกประจำและประจำธุรกรรมไม่ใช่เพียงเพื่อรักษาขนาดของบันทึกธุรกรรมที่เบย์

เราไม่ได้ทำการสำรองฐานข้อมูลชนิดอื่น ๆ ดังนั้นจึงไม่ใช่การบันทึกธุรกรรม

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

สำหรับรูปแบบการกู้คืนที่จะใช้ (เรียบง่ายกับเต็มรูปแบบ) เราไม่สามารถทำการตัดสินใจนั้นได้ คุณเท่านั้นทีมธุรกิจของคุณและ SLA ของคุณสามารถ


คุณอาจต้องการเพิ่มว่าหากคุณใช้การทำมิเรอร์ฐานข้อมูลคุณจำเป็นต้องใช้ Full Recovery Model เนื่องจากใช้ไฟล์บันทึกเพื่อปรับปรุงมิเรอร์
Holger

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