티스토리 뷰
전체 복구모델 데이터베이스에서 트랜잭션 로그의 Truncate 동작을 확인합니다.
**개인적인 결론
- 복구모델이 '전체'로 설정된 데이터베이스라도 첫 번째 전체백업을 받기 전까지는 단순모드와 비슷하게 트랜잭션 로그 파일을 자동으로 Truncate 하는 동작을 한다. 이때의 트랜잭션 로그는 '데이터무결성'을 위해서만 사용되며, 첫 번째 전체백업 전의 트랜잭션 로그는 복구 용도로는 무의미하다.
--TestDB 데이터베이스 생성
- 테스트를 위해 트랜잭션 로그파일의 자동 증가 값을 0으로 지정하고 MAXSIZE를 100MB로 제한
use master GO
IF DB_ID('TestDB') IS NOT NULL DROP DATABASE TestDB GO
CREATE DATABASE TestDB ON PRIMARY ( NAME = N'TestDB' , FILENAME = N'E:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\TestDB.mdf' , SIZE = 307200KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'TestDB_log' , FILENAME = N'E:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\TestDB_log.ldf' , SIZE = 102400KB , MAXSIZE = 102400KB , FILEGROWTH = 0) GO |
--데이터베이스 생성
--복구모델(전체), 트랜잭션 로그 파일의 Maxsize(10MB), growth(0) 설정 확인
--t1 테이블 생성
테스트)
#1. t1 테이블에 데이터를 INSERT하고 로그파일 사용량 체크
- 9000행 삽입 완료
- Log Space Used 약 80%
DECLARE @ctr INT SELECT @ctr = 0 BEGIN TRAN WHILE (@ctr < 9000) BEGIN INSERT t1 VALUES(@ctr, 'x') SELECT @ctr = @ctr + 1 END COMMIT TRAN Go |
#2. #1의 동작을 반복 수행 후 결과 체크
- 9000행 삽입 실패
- Log Space Used 약 23%
#3. #1의 동작을 반복 수행 후 결과 체크
- 9000행 삽입 성공
- Log Space Used 약 83%
**테스트 수행 결과 - 전체복구모드의 데이터베이스 로그가 마치 단순모드의 트랜잭션 로그처럼 동작한다.
의아한 생각이 들어 추가 테스트를 진행하였다.
#4. Checkpoint 수동 실행
- 예상대로 체크포인트를 실행하니 TestDB의 트랜잭션 로그가 Truncate 되었다.(단순모드와 같다.)
#5. TestDB 데이터베이스 전체 백업 수행 후
#6. 추가 데이터 INSERT
- 9000행 삽입 성공
- Log Space Used 약 81%
#7. Checkpoint 수동 실행
- 로그가 Truncate 되지 않음(그대로 유지)
#8. 데이터 추가 INSERT 실행
- 9000행 삽입 실패
- Log Space Used 약 100%
참조
Transaction Log Truncation (http://technet.microsoft.com/en-us/library/ms189085(v=sql.105).aspx)
Transaction Log Logical Architecture (http://technet.microsoft.com/en-us/library/ms180892(v=sql.105).aspx)
꽉 찬 트랜잭션 로그 문제 해결(오류 9002) (http://technet.microsoft.com/ko-kr/library/ms175495(v=sql.105).aspx)
'Microsoft SQL Server' 카테고리의 다른 글
SQL 제거 후 재 설치 시 LandingPage 에러 발생 (0) | 2013.12.08 |
---|---|
트랜잭션 로그 Full(오류: 9002) (0) | 2013.12.06 |
Single User Mode - Alter Database 실패 (0) | 2013.12.06 |
Truncate Table (0) | 2013.12.06 |
SELECT 결과를 테이블에 삽입(Insert) (0) | 2013.12.04 |