OS : Microsoft Windows 2000 Advanced Server
SQL : Microsoft SQL Server 2005 Standard
운영중인 메일서버에서 최근에 아래 오류와 함께 서비스가 죽는 문제가 발생합니다.
--------------아래와 같은 오류 발생----------------------------------------------------------------
Database Error: CPop3CmdQuit::Execute
Code = 80004005
Code meaning = 지정되지 않은 오류입니다.
Source = Microsoft OLE DB Provider for SQL Server
Description = 트랜잭션(프로세스 ID 58)이 잠금 | 통신 버퍼 리소스에서 다른 프로세스와의 교착 상태가 발생하여 실행이 중지되었습니다. 트랜잭션을 다시 실행하십시오.
------------------------------------------------------------------------------------------------------------
장황하게 설명을 드리자면....(최초 문제 발생시부터 말씀드리겠습니다.)
1. 관리의 부주의(?)로 인해 서버가 비정상적으로 종료되었습니다.(OS 및 하드웨어의 문제)
2. 위 OS 및 하드웨어의 문제를 해결하여 DB를 연결하는데 '주의대상'이라고 나오면서 연결이 안되는겁니다.
EXEC sp_resetstatus 'yourDBname';
ALTER DATABASE yourDBname SET EMERGENCY
DBCC checkdb('yourDBname')
ALTER DATABASE yourDBname SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('yourDBname', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE yourDBname SET MULTI_USER
3. 위의 구문으로 '주의대상'을 해결하였으며 정상적으로 메일 서비스를 시작하였습니다.
4. 정상적인줄로만 알았던 DB가 뭔가 이상하여 확인하였더니 트랜잭션 로그파일이 엄청나게 커져버린것입니다
기존10MB 이내였던것이 4GB..줄이려고 시도해봐도 줄지가 않고 계속 늘어나 8GB 까지 되어버렸습니다.
(로그파일의 사이즈가 성능 저하의 원인이 될 수 있다고 들었습니다)
5. 로그파일이 계속 커지는 문제를 해결하려고 알아보니
위 '주의대상' 복구 관련 쿼리중 DBCC CHECKDB('myDBname', REPAIR_ALLOW_DATA_LOSS)를 실행함으로 인해
'복제'를 하지 않는데도 데이터베이스가 복제를 기다리고 있는 상태(replication)가 되버려서 그렇다고 합니다.
그리하여 임시로 복제구성을 해놓고 sp_repldone 쿼리를 사용해 복제 완료를 수동으로 reset 하였습니다.
6. 이제 로그파일은 정상적으로 줄였구요 하지만 여전히 DB에 무엇인가 문제가 있습니다
쿼리가 느려진것 같습니다...특히 DELETE가.
불규칙적으로 어느정도 부하가 걸린다 싶으면 가장위의 오류를 뱉어내구요..
이 DB는 1번 문제가 발생하기 이전시점에는 전혀 문제가 없던 것입니다
스크립트의 문제는 아닌것 같습니다 어떤 문제점이 있을수 있을지
도움이 될만한 내용을 알고 계시다면 지나가시다 한마디라도 해주시면 감사하겠습니다
그 DB를 재구성해보시는건 어떠실련지요? suspect 로 변경되서 여러번 진행했었는데..
저도 동일한 문제가 발생하여서 모든DATA들을 BCP OUT하여 재 구성 하여 사용했었습니다.