Oracle_Lock
입문자 사유 :
update 문을 전송하고 commit을 안한 상황 : 해당 상황이 더욱 Lock을 길게 만드는 상황을 초래 할 수 있다.
운영되고 있는 서버에 작업을 할 때 수동 update 문 작성 후 항상 commit을 날려야 한다. 그렇지 않으면 lock에 걸려 내 session과 SID가 날리는 쓰기,수정하기,지우기 문을 무시 할 수 있다. 이런 상황을 lock 이 걸렸다고 표현하는데, 단순히
사람의 실수에서만 비롯되는 것은 아니다. Auto Commit 기능이 없는 API 또는 언어를 사용 할 때 항상 확인 해야하는 습관을 들여야한다. code를 작성하는 일도 사람이 작성하는 지라, (사람에게서 비롯되네요 ㅎㅎ) 조심해야 할 것이다.
확인하는 방법은 lock의 원인이 되는 session 및 sid를 확인해서 제거하거나 죽여주는 것.
sqltools 에 보면 session을 확인할 수 있는데, 그것을 확인 함으로 어느 명령에서 lock이 잡혔는지 알 수 있다.
또한, 누가 그랬는지도 알 수 있다.
======================================2022.07.01.============================================
lock 의 원인 :
코드상 JSP 파일에서 executeUpdate(); 를 쓰는 구문이 있는데
해당 JDBC API가 제대로 읽혀지지 않아 AutoCommit이 정상작동하지 않은 것으로 확인 됐다.
lock의 해결 :
ExecuteUpdate() 구문에 AutoCommit의 기능의 오작동을 확인 했으므로, 해당 구문의 정상작동 원리를 파악하여 시간을 사용하는 것 보다는, 사용자의 입장에서 일단 기능을 정상작동을 하게 해놓고 파악해 보는 것이 좋겠다 생각돼, 코드에 먼저 Commit을 강제로 실행하게 했다.
<%
Connection conn = ds.getConnection();
conn.commit() %>
lock은 해결 되었고, 해당 구문이 이상없이 commit을 나중에 한번 찍더라도 문제가 되지 않는지 모니터링 했다.
<<< A few moments later >>>
이상없이 잘 작동 되었다.
이상 주절주절 글 읽어주셔서 감사합니다.