インターネットから収集し、整理して使用します。
SQL2005 には 1 GB を超えるログがあり、場合によってはクリアできないことがあります。そこでこのコードを見つけました。
クリーニングログが1Mまでクリアされない場合がありますので、何度か実行してください。通常の状況では、これは 1 回実行できます。
2 回実行しなければならない状況に遭遇したことがあります。
1 SELECT @LogicalFileName = 'テストログ',
Test_log はログの論理名です。
4
5
6 -- ============================================
7 -- 作者: ファイター
8 -- 作成日: 2009-3-15
9 -- 説明: SQL ログをクリアします
10 -- ============================================
11 プロシージャの作成 [dbo].[tools_ClearSqlLog]
12
13AS
14 始まり
15
16 ノーカウントをオンに設定
17 DECLARE @LogicalFileName システム名、
18 @MaxMinutes INT、
19 @NewSizeINT
20
21 SELECT @論理ファイル名 = 'テストログ',
22 @MaxMinutes = 1、
23 @NewSize = 1
24
25 -- セットアップ/初期化
26 @OriginalSize int を宣言します
27 SELECT @OriginalSize = サイズ FROM sysfiles WHERE name = @LogicalFileName
28 SELECT '元のサイズ ' + db_name() + ' LOG は ' +
29 CONVERT(VARCHAR(30),@OriginalSize) + ' 8K ページまたは ' +
30 CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
31 FROM sysfiles
32 WHERE 名 = @LogicalFileName
33
34 テーブルの作成 DummyTrans
35 (DummyColumn 文字 (8000) が null ではない)
36
37
38 宣言@カウンターINT、
39 @StartTime DATETIME、
40 @TruncLog VARCHAR(255)
41 SELECT @StartTime = GETDATE()、
42 @TruncLog = 'バックアップ ログ ' + db_name() + ' TRUNCATE_ONLY 付き'
43
44 DBCC SHRINKFILE (@LogicalFileName、@NewSize)
45 実行 (@TruncLog)
46 -- 必要に応じてログをラップします。
47 WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- 時間は経過していません
48 AND @OriginalSize = (sysfiles WHERE 名からサイズを選択 = @LogicalFileName)
49 AND (@OriginalSize * 8 /1024) > @NewSize
50 BEGIN -- 外側のループ。
51 SELECT @カウンター = 0
52 WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
53 開始 -- 更新
54 INSERT DummyTrans VALUES ('Fill Log')
55 ダミートランスの削除
56 SELECT @カウンター = @カウンター + 1
57END
58 実行 (@TruncLog)
59END
60 SELECT '最終サイズ ' + db_name() + ' LOG は ' +
61 CONVERT(VARCHAR(30),size) + ' 8K ページまたは ' +
62 CONVERT(VARCHAR(30),(サイズ*8/1024)) + 'MB'
63 システムファイルから
64 WHERE 名 = @LogicalFileName
65
66 ドロップテーブルダミートランス
67 カウントをオフに設定する
68
69エンド
70
71