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 시점부터 현재까지의 자료는 날아가게 되는 것이다.
회사마다 정해진 시간이 있어 특정 세션에 어떠한 작업도 없는 경우이거나 할 때 세션이 자동종료된다.
그러므로 중요한 작업을 할 땐 자리를 비우지 말아야겠다.
'배우기 > 기록의 중요성' 카테고리의 다른 글
[R]key-value를 이해하기 위한 과정 (0) | 2023.11.22 |
---|---|
[SQL, Oracle] 이해한대로 써보는 delete와 truncate의 차이(High Water Mark, HWM) (0) | 2023.11.12 |
이해한대로 적어보는 SQL 표준이 중요한 이유 (1) | 2023.11.05 |
orange(oracle tool)에서의 몇 가지 단축키 (0) | 2023.11.05 |
oracle(11g) 오라클 설치 방법 (0) | 2023.11.05 |