안녕하세요.
현재 MFC로 간단한 프로그램을 개발 하였는데요..
특정 Table에서 FLAG 값이 'N' 인 것을 가져와서 프로그램 내부적으로 처리를 한 후
처리한 ROW를 'Y'로 Update 하는데요.. (ODBC API 이용)
약 50만건 정도를 처리 한 후 5000건 정도가 잘못 되어 다시 처리해야 하는 상황이 발생하였습니다.
그래서 프로그램 종료 후 재 전송 할 Data의 Flag 값을 'N'으로 Update 하고 프로그램을 실행 하니...
LOCK이 걸려 Update 부분에서 멈춰 버리더라고요.. (프로그램은 수정 한 것이 없습니다. )
그래서 과거 질문 사항들을 확인하다 보니 SELECT * FROM TABLE(NOLOCK) WHERE FLAG = 'N' 으로
(NOLOCK) 부분을 추가해서 하면 된다고 하더라고요...
제가 궁금한 것은....
왜 갑자기 LOCK이 걸렸는지가 궁금하구요...
(질문 내용으로 정확한 원인을 알 수 없다면... 원인을 찾아 보는 방법이나, 필요한 자료를 요청하시면 올려드리겠습니다.)
(NOLOCK) 이외의 방법이 있는지....
그리고 (NOLOCK)을 사용할 경우 DB에 별 다른 문제가 발생하지 않는지...
답변 부탁드리겠습니다.
감사합니다. |