인터넷에서 수집하여 정리하고 사용합니다.
SQL2005에는 1GB가 넘는 로그가 있으며 때로는 지울 수 없는 경우도 있습니다. 그래서 이 코드를 찾았습니다.
가끔 클리닝 로그가 1M로 지워지지 않는 경우가 있으니 여러번 실행해 보세요. 일반적인 상황에서는 한 번만 실행할 수 있습니다.
두 번 실행해야 하는 상황에 직면했습니다.
1 @LogicalFileName = 'Test_log' 선택,
Test_log는 로그의 논리적 이름입니다.
4
5
6 -- =============================================
7 -- 작성자: 전투기
8 -- 생성 날짜: 2009-3-15
9 -- 설명: SQL 로그 지우기
10 -- ============================================
11 절차 생성 [dbo].[tools_ClearSqlLog]
12
13AS
14 시작
15
16 카운트 없음 설정
17 @LogicalFileName 시스템 이름 선언,
18 @MaxMinutes INT,
19 @뉴사이즈INT
20
21 SELECT @LogicalFileName = '테스트_로그',
22 @MaxMinutes = 1,
23 @새크기 = 1
스물넷
25 -- 설정/초기화
26 @OriginalSize 정수 선언
27 SELECT @OriginalSize = sysfiles의 크기 WHERE name = @LogicalFileName
28 SELECT '원본 크기' + db_name() + ' LOG는 ' +
29 CONVERT(VARCHAR(30),@OriginalSize) + ' 8K 페이지 또는 ' +
30 CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
31 sysfiles에서
32 WHERE 이름 = @LogicalFileName
33
34 테이블 생성 DummyTrans
35(DummyColumn char(8000)은 null이 아님)
36
37
38 @카운터 INT 선언,
39 @시작시간 DATETIME,
40 @TruncLog VARCHAR(255)
41 SELECT @StartTime = GETDATE(),
42 @TruncLog = '백업 로그' + db_name() + ' WITH TRUNCATE_ONLY'
43
44 DBCC SHRINKFILE(@LogicalFileName, @NewSize)
45 EXEC(@TruncLog)
46 -- 필요한 경우 로그를 래핑합니다.
47 WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- 시간이 만료되지 않았습니다.
48 AND @OriginalSize = (이름 = @LogicalFileName인 경우 sysfiles에서 크기 선택)
49 AND (@OriginalSize * 8 /1024) > @NewSize
50 BEGIN - 외부 루프.
51 선택 @카운터 = 0
52 WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
53 시작 -- 업데이트
54 DummyTrans 값 삽입('채우기 로그')
55 DummyTrans 삭제
56 SELECT @카운터 = @카운터 + 1
57END
58 EXEC(@TruncLog)
59END
60 SELECT '최종 크기' + db_name() + ' LOG는 ' +
61 CONVERT(VARCHAR(30),size) + ' 8K 페이지 또는 ' +
62 CONVERT(VARCHAR(30),(크기*8/1024)) + 'MB'
63 sysfiles에서
64 WHERE 이름 = @LogicalFileName
65
66 드롭 테이블 DummyTrans
67 카운트 없음 설정
68
69엔드
70
71