★ LOCK 충돌 및 해결방법

SESSION 1

SQL> UPDATE EMP
  2   SET SAL=0
  3   WHERE ENAME='SCOTT';

1 행이 갱신되었습니다.

 

SESSION 2

SQL> UPDATE EMP
  2   SET DEPTNO=10
  3   WHERE ENAME='SCOTT';

-- LOCK 충돌

 

** LOCK은 하나의 ROW 단위로 적용되기 때문에 다른 필드값을 변경하려 해도 LOCK 충돌 발생 

 

SQL을 사용하여 lock 충돌 해결

 

SQL> SELECT SID, SERIAL#
  2   FROM V$SESSION
  3   WHERE SID IN(SELECT BLOCKING_SESSION FROM V$SESSION);

       SID    SERIAL#
---------- ----------
       199       3167

SQL> ALTER SYSTEM KILL SESSION '199, 3167' IMMEDIATE;

시스템이 변경되었습니다.

 

 

 

★ 데드락(DEADLOCK)

SESSION 1

SQL> CONNECT SCOTT/TIGER
연결되었습니다.


SQL> UPDATE EMP
  2   SET SAL=9000
  3   WHERE ENAME='JONES';

1 행이 갱신되었습니다.

 

SQL> UPDATE EMP
  2   SET DEPTNO=10
  3   WHERE ENAME='SCOTT';

1 행이 갱신되었습니다.

SESSION 2

SQL> CONNECT SCOTT/TIGER
연결되었습니다.


SQL> UPDATE EMP SET SAL = 0
  2  WHERE ENAME='SCOTT';

1 행이 갱신되었습니다.

 

SQL> UPDATE EMP
  2   SET DEPTNO=20
  3   WHERE ENAME='JONES';
UPDATE EMP
       *
1행에 오류:
ORA-00060: 자원 대기중 교착 상태가 검출되었습니다


SQL> COMMIT;

커밋이 완료되었습니다.                   -- COMMIT 또는 ROLLBACK

 

 COMMIT 이후 결과 - DATA는 모두 다 변경

SQL> SELECT ENAME, DEPTNO, SAL
  2   FROM EMP
  3   WHERE ENAME IN ('JONES','SCOTT');

ENAME          DEPTNO        SAL
---------- ---------- ----------
JONES              20       2975
SCOTT              20          0

 


사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

+ Recent posts