รวบรวมจากอินเตอร์เน็ต จัดระเบียบและนำไปใช้
SQL2005 มีบันทึกมากกว่า 1 กิกะไบต์ และบางครั้งไม่สามารถล้างข้อมูลได้ ฉันก็เลยพบรหัสนี้
บางครั้งบันทึกการทำความสะอาดไม่ได้รับการล้างถึง 1M โปรดดำเนินการหลายครั้ง ภายใต้สถานการณ์ปกติ จะดำเนินการได้ครั้งเดียว
ฉันพบสถานการณ์ที่ต้องดำเนินการสองครั้ง
1 เลือก @LogicalFileName = 'Test_log',
Test_log คือชื่อทางตรรกะของบันทึก
4
5
6 -- =============================================
7 -- ผู้แต่ง: นักสู้
8 -- วันที่สร้าง: 15-3-2552
9 -- คำอธิบาย: ล้างบันทึก sql
10 -- =============================================
11 สร้างขั้นตอน [dbo].[tools_ClearSqlLog]
12
13AS
14 เริ่มต้น
15
16 ตั้งหมายเลขเป็น
17 ประกาศชื่อระบบ @LogicalFileName
18 @MaxMinutes INT,
19 @NewSizeINT
20
21 SELECT @LogicalFileName = 'Test_log',
22 @MaxMinutes = 1,
23 @ขนาดใหม่ = 1
ยี่สิบสี่
25 -- ตั้งค่า/เริ่มต้น
26 ประกาศ @OriginalSize int
27 SELECT @OriginalSize = ขนาดจาก sysfiles โดยที่ name = @LogicalFileName
28 SELECT 'ขนาดดั้งเดิมของ ' + db_name() + ' LOG คือ ' +
29 แปลง(VARCHAR(30),@OriginalSize) + ' หน้า 8K หรือ ' +
30 แปลง(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
31 จาก sysfiles
32 โดยที่ชื่อ = @LogicalFileName
33
34 สร้างตาราง DummyTrans
35 (ถ่าน DummyColumn (8000) ไม่ใช่ค่าว่าง)
36
37
38 ประกาศ @เคาน์เตอร์ INT
39 @เวลาเริ่มต้น DATETIME,
40 @TruncLog วาร์ชาร์ (255)
41 เลือก @StartTime = GETDATE(),
42 @TruncLog = 'บันทึกการสำรองข้อมูล ' + db_name() + ' พร้อม TRUNCATE_ONLY'
43
44 DBCC SHRINKFILE (@LogicalFileName, @NewSize)
45 EXEC (@TruncLog)
46 -- ห่อท่อนไม้ถ้าจำเป็น
47 WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- เวลายังไม่หมดอายุ
48 และ @OriginalSize = (เลือกขนาดจาก sysfiles โดยที่ชื่อ = @LogicalFileName)
49 และ (@OriginalSize * 8 /1024) > @NewSize
50 BEGIN -- วงนอก
51 เลือก @ตัวนับ = 0
52 ในขณะที่ ((@Counter < @OriginalSize / 16) และ (@Counter < 50000))
53 เริ่มต้น -- อัปเดต
54 ใส่ค่า DummyTrans ('กรอกบันทึก')
55 ลบ DummyTrans
56 เลือก @ตัวนับ = @ตัวนับ + 1
57END
58 EXEC (@TruncLog)
59END
60 SELECT 'ขนาดสุดท้ายของ ' + db_name() + ' LOG คือ ' +
61 แปลง(VARCHAR(30),ขนาด) + ' หน้า 8K หรือ ' +
62 แปลง(VARCHAR(30),(ขนาด*8/1024)) + 'MB'
63 จาก sysfiles
64 โดยที่ชื่อ = @LogicalFileName
65
66 วางตาราง DummyTrans
67 ตั้งค่าหมายเลขปิด
68
69END
70
71