트랜잭션 로그가 커져서 디스크 공간이 없을 때 해결방안

[문제]
특정 트랜잭션 로그 파일이 커져서 디스크에 용량이 부족한 상황.

[원인]
트랜잭션 로그는 말 그대로 트랜잭션 처리시 발생한 모든 기록을 저장합니다.
예를 들어 백만건의 데이터를 수정했다면 백만건에 관한 기록을 저장하게 되죠.
따라서 데이터베이스가 처리하는 데이터의 양에 따라 트랜잭션 로그의 크기도 조정해야 합니다.

만약에 트랜잭션 로그파일의 크기가 처리할 트랜잭션보다 작다면
‘트랜잭션 로그의 크기가 설정치를 초과했습니다’라면서 작업이 실패하게 됩니다.
그렇기 때문에 트랜잭션 로그는 롤백을 가능하게 할 정도의 크기로 설정해야 합니다.

ORACLE의 경우 이런 작업이 테이블스페이스 관리 화면을 통해 조정이 가능합니다.
새로운 테이블 스페이스를 만들거나 크기를 줄이는 등의 작업이 가능합니다.

MSSQL의 경우는 엔터프라이즈 매니저를 이용해서 할 수 있습니다.
해당 데이터베이스의 속성을 보면 ‘트랜잭션 로그’라는 탭이 있는데 여기서 조정합니다.

트랜잭션 로그는 강제로 비워도 상관 없습니다. 롤백할게 없는 상황이라면 말이죠.
데이터베이스의 데이터파일을 줄이는 방법은 우선 실제 사용되는 페이지의 양을 줄이고
설정 크기를 줄이는 순서로 조치를 취하면 됩니다.

[해결]
* MSSQL을 기준으로 설명합니다.

1. 데이터베이스 – 속성 – 트랜잭션 로그 화면을 펼칩니다.
*아래 그림의 경우 처음에는 메인 트랜잭션 로그파일인 ‘CLICKMIND_Log’밖에 없었습니다.
그리고 크기제한을 걸지 않아 4GB까지 확장된 상태였습니다. 하필 C드라이브라 더 문제였죠.

2. 트랜잭션 로그를 비웁니다.
BACKUP LOG <데이터베이스명> WITH NO_LOG
예) BACKUP LOG CLICKMIND WITH NO_LOG

3. 적정한 트랜잭션 크기로 다른 트랜잭션 파일을 생성합니다. (생략가능)
* 그림의 경우 C드라이브가 아닌 넉넉한 D드라이브를 사용하고자 1GB짜리 2개를 생성하였습니다.
생성한 트랜잭션 파일들의 최대 크기를 설정합니다. 각 1024MB로.. 하나로 큰거 해서 좋을건 없습니다.
성능을 고려한다면 적절한 크기로 서로다른 디스크에 분산 시키는 것이 좋습니다.

4. 문제가 되는 트랜잭션 로그파일을 축소합니다.
* 쿼리 애널라이져에서 다음 명령어를 수행합니다.
한번에 안되는 경우가 있으므로 반복해서 수행후 크기를 확인합니다.
DBCC SHRINKFILE (<데이터파일명>, <원하는 크기 (MB)>)
예) DBCC SHRINKFILE (CLICKMIND_Log, 100)


5. 줄어든 트랜잭션 로그파일의 최대치를 줄여 놓아 다시는 커지지 못하게 합니다.

[출처] 박상민 (http://tomowind.egloos.com/1544330)


코멘트 쓰기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.

다음의 HTML 태그와 속성을 사용할 수 있습니다:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>



배송정보
배송조회를 하시려면 송장번호를 클릭하세요
배송조회
상품명
주문번호
택배사
송장번호