본문 바로가기

개발&컴퓨터/DB

데이터베이스 'tempdb'의 트랜잭션 로그가 꽉 찼습니다. (80040e14)

반응형

데이터베이스 문제 해결하기


데이터베이스 'tempdb'의 트랜잭션 로그가 꽉 찼습니다.

로그의 공간을 다시 사용할 수 없는 이유를 확인하려면 sys.databases의 log_reuse_wait_desc 열을 참조하십시오.


예전에도 이와 유사한 에러 관련하여 포스팅을 한 적이 있습니다. 오류 메시지에 조금 차이는 있지만, 증상이 발생한 원인은 거의 같고, 해결법도 유사합니다. (단 이번 오류와 관련된 특징에 대해서 좀 더 추가적인 내용을 작성할 예정입니다. 관련 포스팅 URL은 이 게시물의 가장 하단에서 바로가실 수 있습니다.^^)



잘 관리하지 않던 데이터베이스를 사용하는 (오랫만에 접속.. ㅎㅎㅎ) 관리자 페이지에 접속하였는데 아래와 같은 메시지가 떴습니다.




데이터베이스 'tempdb'의 트랜잭션 로그가 꽉 찼습니다.

로그의 공간을 다시 사용할 수 없는 이유를 확인하려면 sys.databases의 log_reuse_wait_desc 열을 참조하십시오.


문제를 해결하기 위해 서버에 접속하여 해당 데이터베이스의 속성을 열어보거나 어떠한 동작을 취하려고 해도 동일한 오류 메시지가 뜨는 것을 보실 수 있습니다.






사실 원인은 뻔합니다. tempdb 로그가 꽉 찼기 때문입니다.. ㅡ.ㅡ;;;;;


tempdb는 MSSQL 에서 제공되는 시스템 데이터베이스로 MS SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 글로벌 리소스를 관리하는 DB입니다. tempdb에서는 다음의 것들을 보관, 관리합니다.


간단하게 tempdb는 MSSQL에서 SQL Server를 가동할 때마다 새로 생성하며, DB이름 그대로 임시로 사용하는 데이터베이스입니다.



* 전역 또는 로컬 임시 테이블, 임시 저장 프로시저, 테이블 변수, 커서 등 명시적으로 생성된 임시 사용자 개체 

* 스풀 또는 정렬의 중간 결과를 저장하기 위한 작업 테이블 등 SQL Server 데이터베이스 엔진에서 만든 내부 개체  

* 행 버전 관리 격리를 사용하여 커밋된 읽기 또는 스냅숏 격리 트랜잭션을 사용하는 데이터베이스의 데이터 수정 트랜잭션에서 생성된 행 버전 

* 온라인 인덱스 작업, MARS(Multiple Active Result Sets), AFTER 트리거 등의 기능을 위해 데이터 수정 트랜잭션에서 생성된 행 버전



tempdb에 대해 더 자세히 알아보기 : https://msdn.microsoft.com/ko-kr/library/ms190768(v=sql.120).aspx



tempdb 시스템 데이터베이스는 기본 설정으로 2TB(2000GB)의 용량에 도달할때까지 10%씩 자동 증가되도록 되어 있습니다.

그렇기 때문에 tempdb 에 별도 설정을 하지 않았다면 2TB 용량에 도달할 때까지 위와 같은 에러메시지가 뜨지 않는게 정상입니다. 그런데 아마 2TB까지 로그 파일을 사용하는 경우는 흔치 않을 텐데요. 그럼 왜 이문제가 발생한 것일까요?


아마 99%로 로그 파일의 용량을 확장할 만한 공간이 하드디스크드라이브(HDD)에 남아있지 않기 때문입니다.



templog.ldf 파일 자체의 용량이 크다면 별도로 백업(???)하신 후, 해당 로그 파일을 축소해 주셔도 됩니다.

그런데 사실 tempdb는 DB 재시작 할때마다 MSSQL에서 자동으로 새로 생성(용량을 초기화)하므로 사실 특별한 경우가 아니라면 백업이 큰 의미가 없습니다.

그리고 정확하게는 백업에 큰 의미가 없다기 보다는 (다른 방법이 있는지는 모르겠지만), 사실 시스템 데이터베이스인 tempdb 는 백업 및 복원 작업이 허용되지 않는 것으로 알고 있습니다. (SQL Server 2008 R2 버전)



대신 tempdb의 용량을 축소하는 방법에 대해서는 아래의 게시물을 참조해주세요~


* 참조 페이지(Microsoft Support) : https://support.microsoft.com/ko-kr/kb/307487


* 참조 게시물([MSSQL] DB 로그 파일 축소하기) : http://ozit.tistory.com/103






tempdb의 구성을 좀 살펴볼까요?


sp_helpdb tempdb 명령으로 해당 DB의 용량을 체크해봅니다.


log 파일 용량이 크기 않군요..





만약 tempdb 의 로그 파일이 너무 커서 발생했다기 보다는 HDD 용량 자체가 너무 부족한 상태라면...


바로 아래처럼요..;;




당연한 이야기이겠지만^^ 하드디스크 공간의 여유분을 늘려야 합니다.


HDD를 더 큰것으로 교체하던지(이건 작업량이 좀 될 것 같네요..), 일부 데이터를 다른 하드디스크로 백업 또는 이전하는 것을 권장합니다.


그럼 위의 문제가 해결될 것입니다.^^



유사한 사례의 관련 포스팅

http://ozit.tistory.com/233


반응형