บทนำใน Microsoft SQL Server 2005 คุณสามารถย่อขนาดไฟล์บันทึกธุรกรรมในฐานข้อมูลเพื่อลบเพจที่ไม่ได้ใช้ เอ็นจิ้นฐานข้อมูลจะนำพื้นที่กลับมาใช้ใหม่อย่างมีประสิทธิภาพ อย่างไรก็ตาม เมื่อไฟล์บันทึกธุรกรรมขยายโดยไม่คาดคิด อาจจำเป็นต้องย่อขนาดไฟล์บันทึกธุรกรรมด้วยตนเอง
บทความนี้อธิบายวิธีการใช้คำสั่ง DBCC SHRINKFILE เพื่อลดขนาดไฟล์บันทึกธุรกรรมในฐานข้อมูล SQL Server 2005 ในรูปแบบการกู้คืนแบบเต็มด้วยตนเอง วิธีที่คุณใช้ลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2005 อาจแตกต่างจากวิธีที่คุณใช้ลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2000 สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการย่อขนาดแฟ้มบันทึกธุรกรรมใน SQL Server 2000 คลิกหมายเลขบทความด้านล่างเพื่อดูบทความที่เกี่ยวข้องในฐานความรู้ของ Microsoft:
272318 ( http://support.microsoft.com/kb/272318/ ) INF: การลดขนาดบันทึกธุรกรรมใน SQL Server 2000 โดยใช้ DBCC SHRINKFILE
กลับไปด้านบน
ข้อมูลเพิ่มเติม ใน SQL Server 2005 การดำเนินการย่อขนาด (DBCC SHRINKFILE) จะพยายามย่อขนาดไฟล์บันทึกธุรกรรมที่ระบุให้มีขนาดที่ต้องการทันที หากต้องการย่อขนาดไฟล์บันทึกธุรกรรมด้วยตนเองในรูปแบบการกู้คืนแบบเต็ม ให้สำรองไฟล์บันทึกธุรกรรมก่อน จากนั้น ใช้คำสั่ง DBCC SHRINKFILE เพื่อลดขนาดไฟล์บันทึกธุรกรรม
โดยทั่วไป การลดขนาดแฟ้มบันทึกธุรกรรมใน SQL Server 2005 จะเร็วกว่าการลดขนาดแฟ้มบันทึกธุรกรรมใน SQL Server 2000 เหตุผลก็คือ SQL Server 2005 Log Manager สร้างหรือนำไฟล์บันทึกเสมือนที่ไม่ได้ใช้งานกลับมาใช้ใหม่ตามลำดับการจัดเก็บฟิสิคัลดิสก์ ดังนั้น ส่วนที่ไม่ทำงานของไฟล์บันทึกธุรกรรมมักจะอยู่ที่ส่วนท้ายของไฟล์
ตัวอย่างเช่น ไฟล์บันทึกธุรกรรมอาจมีไฟล์บันทึกเสมือน 100 ไฟล์ แต่ใช้ไฟล์บันทึกเสมือนเพียง 2 ไฟล์เท่านั้น SQL Server 2000 จัดเก็บไฟล์บันทึกเสมือนไฟล์แรกที่ใช้ที่จุดเริ่มต้นของไฟล์บันทึกธุรกรรม และไฟล์บันทึกเสมือนไฟล์ที่สองที่ใช้ตรงกลางของไฟล์บันทึกธุรกรรม เพื่อที่จะย่อขนาดไฟล์บันทึกธุรกรรมให้เหลือเพียง 2 ไฟล์บันทึกเสมือน SQL Server จะเติมส่วนที่เหลือของไฟล์บันทึกเสมือนที่สองด้วยรายการบันทึกเสมือน SQL Server ย้ายจุดเริ่มต้นของบันทึกแบบลอจิคัลไปยังไฟล์บันทึกเสมือนถัดไปที่มีอยู่ซึ่งระบุโดยตัวจัดการบันทึก ตัวจัดการบันทึกอาจสร้างไฟล์บันทึกเสมือนที่อยู่ตรงกลางของไฟล์บันทึกธุรกรรม ก่อนไฟล์บันทึกเสมือนที่ใช้งานล่าสุด ในกรณีนี้ ต้องใช้การดำเนินการสำรองข้อมูลบันทึกหลายรายการและการดำเนินการลดขนาดหลายรายการเพื่อลดขนาดไฟล์บันทึกธุรกรรมให้เป็นไฟล์บันทึกเสมือน 2 ไฟล์ได้สำเร็จ สถานการณ์กรณีที่เลวร้ายที่สุด คุณอาจต้องใช้การดำเนินการสำรองข้อมูลบันทึก 50 รายการและการดำเนินการลดขนาด 50 รายการเพื่อลดขนาดไฟล์บันทึกธุรกรรมเป็นไฟล์บันทึกเสมือน 2 ไฟล์ได้สำเร็จ
อย่างไรก็ตาม ใน SQL Server 2005 คุณสามารถย่อขนาดไฟล์บันทึกธุรกรรมเป็นไฟล์บันทึกเสมือน 2 ไฟล์ได้ทันทีโดยดำเนินการคำสั่ง DBCC SHRINKFILE นี่เป็นเพราะว่าตัวจัดการบันทึกของ SQL Server 2005 สร้างไฟล์บันทึกเสมือน 2 ไฟล์ตามลำดับที่เก็บไว้บนฟิสิคัลดิสก์ ไฟล์บันทึกเสมือนทั้งสองอยู่ที่จุดเริ่มต้นของไฟล์บันทึกธุรกรรม
เมื่อคุณพยายามที่จะย่อขนาดแฟ้มบันทึกธุรกรรมที่มีเนื้อที่ว่างน้อยมากใน SQL Server 2005 คุณต้องดำเนินการสำรองข้อมูลบันทึกอื่น การดำเนินการสำรองข้อมูลบันทึกเพิ่มเติมนี้ตัดทอนแฟ้มบันทึกธุรกรรมให้มีขนาดเล็กลง เมื่อย่อขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2000 นอกเหนือจากการดำเนินการสามขั้นตอนข้างต้นแล้ว คุณต้องดำเนินการสำรองข้อมูลบันทึกนี้ด้วย สำหรับข้อมูลเพิ่มเติม ให้ดูบทความฐานความรู้ของ Microsoft ที่กล่าวถึงในส่วน "บทนำ" เมื่อต้องการย่อขนาดไฟล์บันทึกธุรกรรมโดยมีพื้นที่ว่างน้อยมากใน SQL Server 2005 ให้ทำตามขั้นตอนเหล่านี้: 1. สำรองไฟล์บันทึกธุรกรรมเพื่อให้ไฟล์บันทึกเสมือนที่ใช้งานอยู่ส่วนใหญ่ไม่ได้ใช้งาน ดังนั้นจึงสามารถลบไฟล์บันทึกเสมือนที่ไม่ได้ใช้งานได้ในขั้นตอนภายหลัง เมื่อต้องการทำเช่นนี้ ให้เรียกใช้คำสั่ง Transact-SQL ที่คล้ายกับคำสั่ง Transact-SQL ต่อไปนี้ บันทึกการสำรองข้อมูล <ชื่อฐานข้อมูล> ไปยังดิสก์ = '<ไฟล์สำรอง>'
หมายเหตุ: ในคำสั่งนี้ <DatabaseName> คือตัวยึดสำหรับชื่อของฐานข้อมูลที่จะสำรองข้อมูล ในคำสั่งนี้ <BackupFile> คือตัวยึดสำหรับเส้นทางแบบเต็มไปยังไฟล์สำรองข้อมูล
ตัวอย่างเช่น เรียกใช้คำสั่ง Transact-SQL ต่อไปนี้ บันทึกการสำรองข้อมูล TestDB ไปยัง DISK='C:TestDB1.bak'
2. ย่อขนาดไฟล์บันทึกธุรกรรม เมื่อต้องการทำเช่นนี้ ให้เรียกใช้คำสั่ง Transact-SQL ที่คล้ายกับคำสั่ง Transact-SQL ต่อไปนี้ DBCC SHRINKFILE (<ชื่อไฟล์>, <ขนาดเป้าหมาย>) ด้วย NO_INFOMSGS
หมายเหตุ: ในคำสั่งนี้ <FileName> คือตัวยึดสำหรับชื่อของไฟล์บันทึกธุรกรรม ในคำสั่งนี้ <TargetSize> คือตัวยึดสำหรับขนาดเป้าหมายของไฟล์บันทึกธุรกรรม ขนาดเป้าหมายต้องเหมาะสม ตัวอย่างเช่น คุณไม่สามารถย่อขนาดไฟล์บันทึกธุรกรรมเป็นไฟล์บันทึกเสมือนน้อยกว่า 2 ไฟล์ได้
3. ถ้าคำสั่ง DBCC SHRINKFILE ไม่ย่อขนาดไฟล์บันทึกธุรกรรมให้เหลือขนาดเป้าหมาย ให้เรียกใช้คำสั่ง BACKUP LOG ที่กล่าวถึงในขั้นตอนที่ 1 เพื่อทำให้ไฟล์บันทึกเสมือนเพิ่มเติมไม่ทำงาน
4. เรียกใช้คำสั่ง DBCC SHRINKFILE ที่กล่าวถึงในขั้นตอนที่ 2 หลังจากทำเช่นนี้ แฟ้มบันทึกธุรกรรมควรจะใกล้เคียงกับขนาดเป้าหมาย
โดยสรุป มีการเปลี่ยนแปลงอัลกอริทึมที่ Log Manager ใช้เพื่อเลือกไฟล์บันทึกเสมือนถัดไปใน SQL Server 2005 ดังนั้น การลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2005 จึงแตกต่างจากการลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2000 ด้วยวิธีต่อไปนี้: • หากไฟล์บันทึกมีพื้นที่ว่างจำนวนมาก การลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2005 จะเร็วกว่า ย่อขนาดแฟ้มบันทึกธุรกรรมใน SQL Server 2000 ย่อขนาดแฟ้มบันทึกธุรกรรมจะเร็วขึ้น
• การลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2005 จะเหมือนกับการลดขนาดไฟล์บันทึกธุรกรรมใน SQL Server 2000 หากไฟล์บันทึกไม่มีพื้นที่ว่าง
• การลดขนาดแฟ้มบันทึกธุรกรรมใน SQL Server 2005 จำเป็นต้องมีการดำเนินการสำรองข้อมูลบันทึกมากกว่าหนึ่งการดำเนินการนี้ใน SQL Server 2000 ถ้าแฟ้มบันทึกมีพื้นที่ว่างน้อยมาก