ฉันจำเป็นต้องเก็บไฟล์. LDF จริงๆหรือไม่


9

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

ฉันต้องการลบ.LDFไฟล์และเพิ่มพื้นที่ว่างบนเซิร์ฟเวอร์ มีเหตุผลใดบ้างที่ฉันจำเป็นต้องจัดเก็บ.LDFไฟล์?

ชี้แจง:

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

กระบวนการกลางคืน:
จากสิ่งที่ฉันสามารถบอกได้ ...
แต่ละคืนตาราง databse จะถูกตัดทอน
ตารางจะถูกเติมผ่านชุดคำสั่งแทรกจำนวนมาก
ดัชนีจะถูกสร้างใหม่

คำตอบ:


16

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

กินพื้นที่และไม่ลบไฟล์บันทึกของคุณ คุณกำลังถามปัญหากับสิ่งนั้น

ดูบทความนี้เกี่ยวกับบันทึกธุรกรรมโดยเฉพาะอย่างยิ่งส่วน "บันทึกการจัดการผิด"


9

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

USE master;
GO
ALTER DATABASE databasename SET READ_ONLY;
GO

คุณสามารถแก้ไขฐานข้อมูลกลับไปREAD_WRITEเป็นทำการเปลี่ยนแปลงที่จำเป็นจากนั้นตั้งค่าเป็นREAD_ONLYเวลาใดก็ได้ที่คุณต้องการ

ไฟล์บันทึกยังคงจำเป็นต้องมีเพื่อรักษาคุณสมบัติ ACID ของฐานข้อมูล


2

ความจริงก็คือคุณสามารถสร้างฐานข้อมูลเพียงแค่ใช้ไฟล์ mdf มันคือคำสั่งsp_attach_single_file_db (Transact-SQL) โปรดทราบว่าจะถูกลบใน Microsoft SQL Server เวอร์ชันในอนาคต แต่มันก็ไม่ฉลาดที่จะลบไฟล์ LDF ของคุณ ฉลามถูกต้อง 'คุณกำลังถามปัญหานี้' อีกมุมมองหนึ่ง - ไฟล์ ldf ของคุณใหญ่หรือไม่? หากเป็นเช่นนั้นคุณสามารถทำอะไรกับพวกเขาได้

  1. ตั้งฐานข้อมูลของคุณรูปแบบการกู้คืนง่าย คุณสามารถทำได้เฉพาะในกรณีที่คุณไม่ต้องการย้อนกลับการทำธุรกรรม
  2. แทนที่จะสร้างไฟล์ MDF และ LDF ให้สร้างไฟล์สำรองฐานข้อมูลเต็มรูปแบบ (.BAK) มันจะมีขนาดเล็กกว่า tnan MDF + LDF

-3

นี่เป็นวิธีแก้ปัญหาที่ฉันสร้างขึ้นเพื่อลดขนาดไฟล์ LDF

  1. แยกฐานข้อมูล
  2. เปลี่ยนชื่อไฟล์ LDF เป็น * _old.ldf
  3. แนบฐานข้อมูล
  4. ลบการอ้างอิงไปยัง LDF ที่หายไป

สิ่งนี้จะสร้างไฟล์ LDF ที่มีขนาด 504K

  1. ลบ * _old.ldf
  2. ถังขยะที่ว่างเปล่า

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

อัพเดท 2019-09-24:ใช่ฉันเห็นด้วยว่านี่เป็นความคิดที่เลวจริงๆ ฉันหยุดทำเช่นนี้เกือบจะในทันที ฉันได้สร้างดัชนีทั้งหมดใหม่โดยใช้ตัวคูณการเติมที่ 100 ย่อขนาดไฟล์. ldf เท่านั้น และเปลี่ยนฐานข้อมูลทั้งหมดให้เป็นแบบอ่านอย่างเดียว


6
ว้าวนี่เป็นความคิดที่แย่จริงๆ เกิดอะไรขึ้นถ้าฐานข้อมูลแยกไม่สำเร็จหรือเกิดการสูญหายหรือเสียหายระหว่าง 1 ถึง 3 คุณถูกสกรู คุณมีสำเนาศูนย์ข้อมูลของคุณ
Aaron Bertrand

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