본문 바로가기

배우기/기록의 중요성

[SQL, Oracle] DML(Data Manipulation Language)의 lock 발생 관련 내용 정리

728x90
반응형

DML의 경우, transaction이 commit 또는 rollback으로 정리가 되어야 한다.

그렇지 않을 경우 lock이 발생하기 때문이다.

 

여기서 말하는 lock 매커니즘은, 동시 자원을 획득하고자 할 때(동시에 데이터를 수정하려는 시도가 있을 경우) 먼저 들어온 세션에 대한 데이터 수정을 허가하고 나중에 뒤늦게 들어온 세션에 대해서는 앞선 작업이 완료가 되지 않으면 먼저 수행된 transaction을 보호하기 위하여 다른 transaction에서 해당 데이터의 수정을 막는 제어장치이다.

Oracle은 lock 매커니즘이 잘 만들어져있다.

 

예를 들어, 아래 창을 살펴보자.

 

상단의 Orange 창에서 update emp set sal = 5000; 하고 commit이나 rollback을 안 하고 있는 경우,

다른 Orange 창을 켜서

update emp

   set sal = 1000

 where ename = 'SMITH';

하면 계속 running이 뜬다(맨 하단 왼쪽)

 

그 동안 다시 본래 작업창에 돌아와 commit 이나 rollback을 하면 running 되던 게 진행 완료가 된다.

 

단기로 끝나야 하는 쿼리가 오래 걸린다면 자원의 영향을 받을 수는 있겠으나 90% 확률로 lock 걸린 확률이 높다.

그러므로 창 여러 개 열고 작업하면 헷갈릴 수 있기 때문에 여러 개의 창을 열지 말자.

세션이 완료되어버리면 lock도 안풀려서 commit도 못 찍게 된다.

이런 경우에는 kill로 작업을 중단해야하며, 마지막 commit 시점부터 현재까지의 자료는 날아가게 되는 것이다.

회사마다 정해진 시간이 있어 특정 세션에 어떠한 작업도 없는 경우이거나 할 때 세션이 자동종료된다.

그러므로 중요한 작업을 할 땐 자리를 비우지 말아야겠다.

 

728x90
반응형