1. 장애 내용
㉠ 한달에 1번씩 DB명을 변경하는 Job 스케줄러 존재함. DB명이 변경이 안되고 이전 DB명으로 커넥션을 맺어도 안된다는 장애 접수
㉡ 확인을 위해서 DB 속성을 보려 하였는데 다음과 같은 메시지 출력
2. 확인 사항
㉠ Job 스케줄러 정상 작동 여부 확인 (확인 결과 실패함)
㉡ DB 상태 확인
SELECT name,state,state_desc FROM SYS.DATABASES WHERE NAME = '201412' |
확인 했는데 별달리 특이점이 없는 듯 보였으며, ONLINE 상태
㉢ 어떠한 프로세스가 점유하고 있는지 확인
SELECT * FROM SYS.sysprocesses WHERE DBID = 15 |
확인해보니 60번 세션이 뭔가를 잡고 있는듯 하여, 확인
㉣ 확인 위해서 INPUTBUFFER , SP_WHO2
sp_who2 DBCC INPUTBUFFER(60) |
SP_WHO2를 했는데 60번 세션은 현재 동작중이 아니고, sleeping 상태로 확인
KILL을 시켜도 무방 할 것으로 보이는 쿼리문으로 보여 KILL 단행
KILL 진행 이후 Job스케줄러가 정상으로 동작하여, DB명이 잘 변경 되는 것을 확인
3. 원인
㉠ DB명을 변경 하기 전에 모든 세션을 제거하기 위해서 DB를 싱글모드로 변경 하는 작업을 합니다.
그런데 싱글 모드로 변경 하려 할때 여러 세션이 DB를 점유하고 있어서 싱글모드로 변경되지 못하고, 계속해서 교착 상태가 지속되어 DB를 엑세스 하지 못 한 것으로 보여 집니다.
㉡ 그래서 해당 프로세스를 확인하고, KILL로 세션을 종료 시켰습니다.
4. 주의 사항
㉠ 이번에 장애의 경우 해당 DB가 로그DB이므로, 조회로만 활용 됩니다. 하여, 모든 쿼리가 SELECT만 수행 되고 있습니다. 그래서 KILL을 시켜도 무방하다고 판단하여, KILL을 시켰으며, 만약에 다른 DDL의 경우 ROLLBACK을 감안 해야 합니다.