-
ในกระบวนการใช้ SQL Server เรามักจะพบกับสถานการณ์ที่บันทึกฐานข้อมูลมีขนาดใหญ่มาก เมื่อพบปัญหานี้ เราจะแนะนำสองวิธีในการแก้ปัญหา
วิธีที่หนึ่ง
ภายใต้สถานการณ์ปกติ การลดขนาดฐานข้อมูล SQL ไม่สามารถลดขนาดฐานข้อมูลได้มากนัก หน้าที่หลักของมันคือการลดขนาดบันทึกการทำงานควรดำเนินการเป็นประจำเพื่อป้องกันไม่ให้บันทึกฐานข้อมูลมีขนาดใหญ่เกินไป
1. ตั้งค่าโหมดฐานข้อมูลเป็นโหมดธรรมดา: เปิด SQL Enterprise Manager คลิก Microsoft SQL Server ในไดเรกทอรีรากคอนโซล -> กลุ่มเซิร์ฟเวอร์ SQL -> ดับเบิลคลิกเพื่อเปิดเซิร์ฟเวอร์ของคุณ -> ดับเบิลคลิกเพื่อเปิดฐานข้อมูล ไดเรกทอรี-- >เลือกชื่อฐานข้อมูลของคุณ (เช่น ฟอรัมฐานข้อมูลฟอรัม)-->จากนั้นคลิกขวาและเลือก คุณสมบัติ-->เลือกตัวเลือก-->เลือก "แบบง่าย" ในโหมดเฟลโอเวอร์ จากนั้นกด ตกลง เพื่อบันทึก
2. คลิกขวาที่ฐานข้อมูลปัจจุบันและดูฐานข้อมูลที่ย่อขนาดในทุกงาน โดยทั่วไป ไม่จำเป็นต้องปรับการตั้งค่าเริ่มต้น
3. หลังจากลดขนาดฐานข้อมูลแล้ว ขอแนะนำให้รีเซ็ตคุณสมบัติฐานข้อมูลของคุณเป็นโหมดมาตรฐาน วิธีดำเนินการจะเหมือนกับจุดแรก เนื่องจากบันทึกมักเป็นพื้นฐานสำคัญในการกู้คืนฐานข้อมูลภายใต้สถานการณ์ที่ผิดปกติบางประการ
ตั้งหมายเลขเป็น
ประกาศชื่อระบบ @LogicalFileName
@MaxMinutes INT,
@NewSizeINT
USE tablename -- ชื่อของฐานข้อมูลที่จะดำเนินการ
SELECT @LogicalFileName = 'tablename_log', -- ชื่อไฟล์บันทึก
@MaxMinutes = 10, -- จำกัดเวลาที่อนุญาตให้ตัดบันทึก
@NewSize = 1 -- ขนาดของไฟล์บันทึกที่คุณต้องการตั้งค่า (M)
--ตั้งค่า/เริ่มต้น
ประกาศ @OriginalSize int
เลือก @OriginalSize = ขนาด
จาก sysfiles
ชื่อที่ไหน = @LogicalFileName
เลือก 'ขนาดดั้งเดิมของ ' + db_name() + ' LOG คือ ' +
แปลง(VARCHAR(30),@OriginalSize) + ' หน้า 8K หรือ ' +
แปลง(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
จาก sysfiles
ชื่อที่ไหน = @LogicalFileName
สร้างตาราง DummyTrans
(ถ่าน DummyColumn (8000) ไม่ใช่ค่าว่าง)
ประกาศ @Counter INT,
@StartTime DATETIME,
@TruncLog วาร์ชาร์ (255)
เลือก @StartTime = GETDATE()
@TruncLog = 'บันทึกการสำรองข้อมูล ' + db_name() + ' พร้อม TRUNCATE_ONLY'
DBCC SHRINKFILE (@LogicalFileName, @NewSize)
EXEC (@TruncLog)
-- ห่อท่อนไม้ถ้าจำเป็น
ในขณะที่ @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- เวลายังไม่หมดอายุ
และ @OriginalSize = (เลือกขนาดจาก sysfiles โดยที่ name = @LogicalFileName)
และ (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- วงนอก
เลือก @ตัวนับ = 0
ในขณะที่ ((@Counter < @OriginalSize / 16) และ (@Counter < 50000))
เริ่มต้น -- อัปเดต
แทรกค่า DummyTrans ('กรอกบันทึก')
ลบ DummyTrans
เลือก @Counter = @Counter + 1
จบ
EXEC (@TruncLog)
จบ
เลือก 'ขนาดสุดท้ายของ ' + db_name() + ' LOG คือ ' +
แปลง(VARCHAR(30),ขนาด) + ' หน้า 8K หรือ ' +
แปลง(VARCHAR(30),(ขนาด*8/1024)) + 'MB'
จาก sysfiles
ชื่อที่ไหน = @LogicalFileName
วางตาราง DummyTrans
ตั้งค่าหมายเลขเป็นปิด