SQL 서버에서 로그 파일이 커져서 줄이려고 합니다.
사이즈 줄이는 쿼리문에서 진행이 되질 않습니다.
SQL 버전은 SQL 2008R2 입니다.
사용한 쿼리문은 아래와 같습니다.
-------------------------------------------
ALTER DATABASE TEST SET RECOVERY SIMPLE
GO
DBCC SHRINKFILE(TEST_LOG, 100)
GO
ALTER DATABASE TEST SET RECOVERY FULL
GO
-------------------------------------------
위와 같은 쿼리문중 DBCC SHRINKFILE(TEST_LOG, 100)
실행시 메시지가 다음과 같이 나오면서 로그 파일이 줄어들지 않습니다.
---메시지--
필요한 최소 로그 공간 때문에 로그 파일 2(TEST_Log)을(를) 축소할 수 없습니다.
(1개 행이 영향을 받음)
DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오.
Comment 1
-
초짜해커
2013.09.16 09:44
SQL Server 데이터베이스 엔진은 내부족으로 트랜잭션 로그를 여러 개의 "가상 로그 파일"로 나눕니다.
자세한 설명은.... (msdn 발췌)
SQL Server 데이터베이스 엔진은 내부적으로 각 물리 로그 파일을 여러 개의 가상 로그 파일로 나눕니다. 가상 로그 파일의 크기는 고정되어 있지 않으며 물리 로그 파일에 대해 고정된 수의 가상 로그 파일이 있는 것도 아닙니다. 데이터베이스 엔진은 로그 파일을 만들거나 확장할 때 동적으로 가상 로그 파일의 크기를 선택합니다. 데이터베이스 엔진은 적은 수의 가상 파일을 유지하려고 합니다. 로그 파일 확장 후 가상 파일 크기는 기존 로그 크기와 새 파일 증가 크기를 합한 크기입니다. 관리자가 가상 로그 파일의 크기 또는 수를 구성하거나 설정할 수 없습니다.
이 가상 로그 파일이 최소한 두개는 유지되어야 해서 그 이하로 로그가 줄어들지 않습니다.
만약 더 작은 크기로 로그를 줄이고 싶으면 가상로그의 크기를 줄이면 되는데
그 방법은.... (msdn 발췌)
트랜잭션 로그 파일은 축소할 수 있는 한도가 있습니다. 로그 내에 있는 가상 로그 파일의 크기에 따라 축소 가능한 크기가 결정됩니다. 따라서 로그 파일을 가상 로그 파일의 크기보다 작게 축소할 수는 없습니다. 또한 로그 파일은 가상 로그 파일의 크기와 동일한 증분으로 축소됩니다. 예를 들어 1GB의 트랜잭션 로그 파일은 200MB의 가상 로그 파일 5개로 구성될 수 있습니다. 트랜잭션 로그 파일을 축소하면 사용되지 않는 가상 로그 파일이 삭제되지만 적어도 두 개의 가상 로그 파일은 남게 됩니다. 이 예에서는 가상 로그 파일의 크기가 각각 200MB이므로 트랜잭션 로그를 최소 400MB까지만 축소할 수 있고 200MB의 증분으로만 축소할 수 있습니다. 트랜잭션 로그 파일을 더 작은 크기로 축소하려면 한 번에 큰 트랜잭션 로그 파일을 만드는 대신 작은 트랜잭션 로그를 만들어 자동으로 증가하도록 해야 합니다.