การลดขนาดไฟล์บันทึกไม่ลดขนาด


23

ฉันมีฐานข้อมูลที่มีไฟล์ข้อมูล 350 MB (.mdf) และไฟล์บันทึก 4.9 GB (.ldf) FULLรุ่นการกู้คืนจะถูกกำหนดให้

เมื่อฉันพยายามที่จะลดขนาดไฟล์บันทึกก็ไม่หดตัว

ฉันรู้ว่าการลดขนาดฐานข้อมูลไม่ดีและไม่ควรทำ แต่ก็ยังฉันพยายามทำเพื่อลดขนาดไฟล์บันทึก

เมื่อฉันวิ่ง

DBCC SQLPerf(logspace) 

ฉันพบว่าขนาดบันทึกเป็น4932 MBและพื้นที่บันทึกที่ใช้คือ98.76% !

จากนั้นฉันลองคำสั่งนี้

USE <databasename>;
DBCC loginfo;

ตอนนี้ VLF เกือบทั้งหมดเป็น "สถานะ 2" ซึ่งหมายความว่าทั้งหมดใช้งานอยู่

ฉันพยายามที่จะสำรองข้อมูลบันทึกแล้วลดขนาดไฟล์บันทึก การลดขนาดไม่ลดขนาด

ฉันเปลี่ยนรูปแบบการกู้คืนSIMPLEและลองลดขนาดอีกครั้ง แต่สิ่งนี้ก็ไม่ได้ช่วย

ฉันตรวจสอบธุรกรรมที่เปิดอยู่

DBCC opentran (database);

และพบว่าไม่มีธุรกรรมใดเปิดอยู่

อะไรทำให้ฉันไม่สามารถย่อขนาดไฟล์ล็อกได้ ฉันจะแก้ปัญหานี้ได้อย่างไร

คำตอบ:


12

นี่คือคำตอบสำหรับคำถามของฉันเอง

เรียกใช้แบบสอบถามด้านล่างเพื่อรับข้อมูลเกี่ยวกับการรอการใช้ซ้ำของล็อกไฟล์:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

ฉันได้ผลลัพธ์ต่อไปนี้:

log_reuse_wait_desc
-------------------
REPLICATION 

มีบางวัตถุที่เกี่ยวข้องกับการจำลองแบบที่เหลืออยู่ในฐานข้อมูลแม้หลังจากลบการจำลองแบบ

เพื่อลบการจำลองแบบจากฐานข้อมูลsp_removedbreplicationสามารถใช้ แต่มันไม่ได้ผลสำหรับเราเนื่องจากการจำลองแบบไม่ได้ใช้งานอยู่ในขณะนั้นและการจำลองแบบได้ถูกลบไปนานแล้ว

วิธีแก้ไขคือการนำเข้าเนื้อหาฐานข้อมูลไปยังฐานข้อมูลอื่นโดยใช้ตัวเลือกการนำเข้าของ SQL Server


ฉันมีปัญหาเดียวกันและใช้สิ่งนี้เพื่อดูว่ามีธุรกรรมที่ใช้งานอยู่ในฐานข้อมูล ให้log_reuse_wait_desc ACTIVE_TRANSACTIONทันทีที่การทำธุรกรรมเสร็จสิ้นการลดขนาดก็ใช้ได้ดี
squillman

10

ขั้นตอนในการลดขนาดบันทึกจะเป็นไปได้

ธุรกรรมการสำรองข้อมูลเข้าสู่ระบบผ่าน SSMS หรือ T-SQL จากนั้นทำการย่อขนาด

คำสั่งสำหรับ SSMS อยู่ภายใต้งานถ้าคุณคลิกขวาที่ชื่อฐานข้อมูล

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

คุณอาจต้องทำหลาย ๆ ครั้ง

หากมีการทำธุรกรรมหรืองานที่ปิดกั้นการกระทำให้ใช้การตรวจสอบกิจกรรมเพื่อระบุกระบวนการและฆ่ามันหรือใช้การตรวจสอบกิจกรรมงานของ บริษัท ตัวแทนของ SQL เพื่อจบงาน

แหล่งที่มา: http://support.microsoft.com/kb/907511


แต่ปัญหาที่ฉันพบแตกต่างกันโปรดดูคำตอบของฉันด้านล่าง
Navaneet

ดีใจที่ได้ยินว่าคุณเข้าใจแล้วขอบคุณสำหรับการอัพเดท!
Cougar9000

ไวยากรณ์ไม่ถูกต้อง - เครื่องหมายเท่ากับหายไป: BACKUP LOG <Databasename> เพื่อ DISK = N '<path \ database_log.ldf';
วิศวกรที่กลับรายการเมื่อ

9

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


0

คุณต้องสร้างการสำรองข้อมูลก่อนขึ้นอยู่กับรุ่นการสำรองข้อมูลที่ตั้งค่าไว้สำหรับฐานข้อมูลก่อนที่คุณจะสามารถลดขนาดฐานข้อมูล

คุณสามารถลองใช้งานสิ่งนี้:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

หรือคุณสามารถทำได้จาก SSMS และใช้เครื่องมือกราฟิกที่มีอยู่ (ดูที่นี่สำหรับรายละเอียด: http://msdn.microsoft.com/en-us/library/ms187510.aspx )

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

หวังว่านี่จะช่วยได้


ฉันรู้วิธีการสำรองข้อมูลและตัดทอนบันทึกและลดขนาดไฟล์บันทึก แต่สำหรับฐานข้อมูลนี้ฉันมีปัญหาฉันเพิ่งเรียกใช้แบบสอบถามเลือก log_reuse_wait_desc จาก sys.database โดยที่ name = 'dbname' และพบว่าการจำลองแบบทำให้เกิดปัญหา แต่ฉันไม่ได้ตั้งค่าการจำลองแบบไว้ ดังนั้นวิธีการลบ repliaction จาก db นี้ซึ่งจะแสดงใน log reuse wait_desc?
Navaneet

คุณใช้ SQL Server เวอร์ชันใดอยู่
Toni Kostelac

การจำลองแบบอาจถูกตั้งค่าเป็นงานดังนั้นเปิดโฟลเดอร์ตัวแทนของเซิร์ฟเวอร์ SQL และขยายโฟลเดอร์งานตรวจสอบเพื่อดูว่ามีการตั้งค่างานการจำลองแบบหรือไม่และปิดโดยคลิกขวาและเลือกหยุดงาน
Toni Kostelac

หากคุณใช้ SQL Server 2005 ขึ้นไป sp_removedbreplication 'DB_NAME' จะลบการจำลองแบบ สำหรับเซิร์ฟเวอร์ sql 2000 .. อ้างถึงblogs.msdn.com/b/repltalk/archive/2010/11/17/…
Kin Shah

แต่ปัญหาที่ฉันพบแตกต่างกันโปรดดูคำตอบของฉัน
Navaneet

0

ฉันพบว่าฉันต้องทำการสำรองข้อมูล 2 หรือ 3 ครั้งของทั้งฐานข้อมูลและบันทึกธุรกรรมเพื่อรับบันทึกธุรกรรมเพื่อลดขนาดจริง ฉันมีฐานข้อมูลที่สร้างขึ้นด้วยแบบจำลองการกู้คืนเต็ม ทุกคืนจะมีการสำรองข้อมูลของฐานข้อมูลและบันทึกธุรกรรม แต่ย่อมมีบันทึกการทำธุรกรรมที่เติบโตอย่างต่อเนื่องในช่วง 2-3 สัปดาห์ที่ผ่านมา เมื่อพื้นที่ว่างในดิสก์เหลือเพียง 1GB ฉันจะเห็นว่าบันทึกธุรกรรมประมาณ 30GB ฉันทำตามขั้นตอนที่แนะนำโดย Microsoft และหลังจากการทำซ้ำครั้งที่ 4 หรือครั้งที่ 5 ของการสำรองทั้งฐานข้อมูลและบันทึกธุรกรรมทรานแซกชันบันทึกจะปล่อยพื้นที่พิเศษและลดขนาดลง จากนั้นฉันกลับไปและลบข้อมูลสำรองหลายรายการที่ฉันสร้างขึ้น


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

-8

ฉันทำงานรอบ ๆ สำหรับการจำลองแบบที่บล็อกไฟล์บันทึกการหดตัวคือ:

  1. ตั้งค่า DB Recovery Model เป็นSimple
  2. ใช้ DB ออฟไลน์
  3. สร้างการสำรองข้อมูลของไฟล์บันทึก (ในกรณี)
  4. ลบไฟล์บันทึก
  5. นำ DB ออนไลน์

ในกรณีของฉันมันใช้งานได้ หลังจากนำบันทึกฐานข้อมูลออนไลน์ถูกสร้างขึ้นโดยอัตโนมัติและมีขนาด 512kb แทนที่จะเป็น 70GB แต่นี่เป็นเพียงวิธีแก้ปัญหา ปัญหารากไม่ได้รับการแก้ไข ในกรณีของฉันเรากำลังใช้การจำลองแบบ


4
นี่คือคำแนะนำที่น่ากลัวอย่าลบบันทึกการทำธุรกรรมของคุณปัญหาทุกประเภทสามารถมาจากสิ่งนี้ได้เช่นการทุจริต
Tom V - Team Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.