คำสั่งให้ตัดทอนไฟล์บันทึกของ SQL Server คืออะไร


คำตอบ:


130

ถ้าฉันจำได้ดี ... ในตัววิเคราะห์แบบสอบถามหรือเทียบเท่า:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
นี่เป็นการดีกว่าการตั้งค่ารูปแบบการกู้คืนฐานข้อมูลเป็น SIMPLE (ตามคำตอบของ Blorgbeard) เพราะหากรูปแบบการกู้คืนของคุณเต็มแล้วคุณได้ตั้งค่าด้วยวิธีนั้นด้วยเหตุผล
Scott Whitlock

53
truncate_only เลิกใช้แล้วใน SQL Server 2008 ดังนั้นคุณต้องเปลี่ยน db ไปเป็นการกู้คืนอย่างง่ายmsdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore

10
สำหรับ SQL Server 2012 งานนี้ WITH TRUNCATE_ONLYแต่ไม่มี
net_prog

4
การเพิ่มสิ่ง net_prog กล่าวว่าสำหรับ SQL Server 2012 BACKUP LOG DatabaseNameHere TO DISK='NUL:'ฉันแทนบรรทัดแรกสำหรับ
Aaron Newton

'TRUNCATE_ONLY' ไม่ใช่ตัวเลือกสำรองข้อมูลที่รู้จัก (SQL Server 2019 RC1)
Tomasz Gandor

304

ในสตูดิโอการจัดการ:

  • อย่าทำสิ่งนี้ในสภาพแวดล้อมแบบสด แต่เพื่อให้แน่ใจว่าคุณลดขนาดฐานข้อมูลได้มากเท่าที่จะทำได้:
    • คลิกขวาที่ฐานข้อมูลให้เลือกแล้วPropertiesOptions
    • ตรวจสอบให้แน่ใจว่า "รุ่นการกู้คืน" ถูกตั้งค่าเป็น "ง่าย" ไม่ใช่ "เต็ม"
    • คลิกตกลง
  • คลิกขวาที่ฐานข้อมูลอีกครั้งเลือกTasks-> Shrink->Files
  • เปลี่ยนประเภทไฟล์เป็น "บันทึก"
  • คลิกตกลง

อีกทางหนึ่งคือ SQL ที่จะทำ:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ref: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
คำตอบของคุณเพิ่งจะบันทึกวันของฉัน! ฉันไม่รู้จักตัวเลือก "คลิกขวา - งาน -> ย่อขนาด" ขอบคุณ!
René

7
คุณทำอะไรในสภาพแวดล้อมสด? สำรองข้อมูลบันทึกก่อนหรือไม่
John Bubriski

1
ฉันไม่ DBA แต่ใช่ผมเชื่อว่าการสำรองเข้าสู่ระบบจะตัดมันtechnet.microsoft.com/en-us/library/ms179478.aspx
Blorgbeard ออก

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

1
ใน SQL Server 2012 ฉันต้องuse mydatabaseดำเนินการก่อนdbcc shrinkfile
knb

62

สำหรับ SQL Server 2008 คำสั่งคือ:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

สิ่งนี้ทำให้ไฟล์บันทึก 14GB ลดลงเหลือ 1MB


5
เนื่องจากคำถามนั้นคลุมเครือว่าเวอร์ชันใดและคำตอบที่ยอมรับไม่สามารถใช้ได้กับ SQL Server 2008 คำตอบนี้ยังคงใช้ได้โดยไม่คำนึงถึงอายุ
James Law

ขอบคุณมันช่วยฉันลดไฟล์บันทึกขนาดใหญ่ที่ไม่ตอบสนองกับ DBCC SHRINKFILE
Christian Navelot

6
อย่าลืมเปลี่ยนรูปแบบการกู้คืนกลับเป็นเต็มเมื่อคุณทำเสร็จแล้ว!
Dan Bechard

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

37

สำหรับ SQL 2008 คุณสามารถสำรองข้อมูลบันทึกไปยังnulอุปกรณ์:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

จากนั้นใช้DBCC SHRINKFILEเพื่อตัดทอนไฟล์บันทึก


2
นี่เป็นสิ่งเดียวที่จบลงด้วยการทำงานในสถานการณ์ของฉัน ... ฉันได้รับข้อผิดพลาดเมื่อพยายามใช้การสำรองข้อมูลด้วย TRUNCATE_ONLY
TomXP411

หมายเหตุ: อาจใช้เวลาสักครู่แม้ใน SSD (จะต้องอ่านบันทึกเพื่อให้สามารถละทิ้งได้) สำหรับไฟล์บันทึก 30GB บน Azure VM ที่ใช้พลังงานปานกลางใช้เวลา 10 นาทีในการทำ 40% ตรวจสอบให้แน่ใจว่าได้เปลี่ยนเป็น 'ข้อความ' ใช้เวลาใน SSMS เพื่อดูเปอร์เซ็นต์ที่ประมวลผล
Simon_Weaver

3

ชื่อบันทึกการสำรองข้อมูลที่มี truncate_only ตามด้วยคำสั่ง dbcc shrinkfile


0

ตั้งแต่คำตอบสำหรับฉันถูกฝังอยู่ในความคิดเห็น สำหรับ SQL Server 2012 และอื่น ๆ คุณสามารถใช้สิ่งต่อไปนี้:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

ตัวเลือกอื่นทั้งหมดคือการแยกฐานข้อมูลผ่าน Management Studio จากนั้นเพียงลบไฟล์บันทึกหรือเปลี่ยนชื่อและลบในภายหลัง

กลับมาที่ Management Studio แนบฐานข้อมูลอีกครั้ง ในหน้าต่างแนบลบไฟล์บันทึกจากรายการไฟล์

DB แนบและสร้างไฟล์บันทึกว่างใหม่ หลังจากตรวจสอบทุกอย่างเรียบร้อยคุณสามารถลบไฟล์บันทึกที่เปลี่ยนชื่อ

คุณอาจไม่ควรใช้สิ่งนี้กับฐานข้อมูลการผลิต


4
อย่าทำอย่างนี้! อาจมีข้อมูลในบันทึกที่ยังไม่ได้ผูกมัดกับไฟล์ข้อมูล คุณจะสูญเสียข้อมูลดังกล่าว
Paul

หากในคำตอบของคุณคุณเตือนไม่ให้ลองใช้งานจริงมันไม่คุ้มค่าที่จะโพสต์เลย
Stan Shaw

9
ฉันไม่เห็นด้วยกับ downvoters - เป็นตัวเลือก ผู้ดูแลระบบต้องเข้าใจสถานการณ์ของพวกเขา ตัวอย่างเช่น - จะไม่มีข้อมูล 'ปราศจากข้อผูกมัด' หากไม่มีธุรกรรมเปิด
เจอราร์ดโอนีล

3
นี่เป็นทางออกเดียวที่ได้ผลสำหรับฉัน ไดรฟ์ของฉันเต็มและฉันไม่สามารถสำรองข้อมูลหรือลดขนาดได้และดูเหมือนว่าจะไม่มีอะไรทำงานอีก ขอบคุณ!
Brian

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