http://www.aspkorea.org

SQL 2000 부터는 트랜잭션 로그를 지우는 명령어가 없다.

트랜잭션 로그는 어떤 작업을 수행하고 있을 때, 만일 그 작업이 중간에 중단된 경우 프로그램은 자동으로 데이터를 원점으로 되돌리기 위해 사용되는 특수한 로그이다. 예를 들어, 데이터의 인덱스를 새로 매기는 등의 작업을 수행할 때, 중간에 컴퓨터의 전원이 꺼졌다면 데이터는 부팅 이후 원점으로 복귀된다. 이러한 기능을 트랜잭션 로그가 수행하는 것이다.

그런데, 트랜잭션 로그는 또한 쓸 데 없이 자리를 차지하는 경우도 많다. 따라서, 주기적으로 로그를 삭제해 주어야 할 필요가 있다. 또한, 방대한 데이터베이스에서 작업을 수행할 경우 한 번 늘어난 데이터베이스 파일, 특히 로그파일이 줄어들지 않고 용량을 잠식하는 경우가 있다. 이러한 때 다음 명령어를 사용하여 로그를 줄인다.

먼저, 트랜잭션 로그를 삭제하는 명령어이다.

BACKUP LOG [데이터베이스명] WITH TRUNCATE_ONLY

트랜잭션 로그 등은 백업 명령어로 자동으로 삭제된다. 이 때 백업을 실제 수행하지 않고 로그만을 지우라는 명령어이다.

그러나, 로그의 증가로 인해 파일 자체의 용량이 커졌을 수 있다. 이 때 다음 명령어를 수행하여 파일 자체의 용량을 줄여 준다.

DBCC SHRINKFILE(데이터베이스명_LOG, 1)
--> 로그를 1MB로 줄이라는 명령어이다.

또한, 데이터베이에서 많은 내용을 지워 덜어낸 경우, DB에 할당된 파일의 크기가 실제 사용량보다 커진 경우가 있다 이럴 때는 다음과 같이 용량을 줄여 준다.

DBCC SHRINKFILE(데이터베이스명_DATA, 최종 크기)

그러나, 데이터베이스나 로그가 항상 일정 크기 이상을 사용할 경우, 무턱대고 용량을 줄이는 것은 성능상의 문제를 야기할 수도 있다. 특히 로그의 경우 순차적으로 액세스를 하기 때문에 저장 공간의 조각으로 인한 피해를 볼 수 있다.
2005/06/15 13:39 2005/06/15 13:39

트랙백 주소 :: http://thinkit.or.kr/database/trackback/136