ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [펌] Oracle에서의 Lock
    DBMS/Oracle 2008. 10. 30. 10:10

    오라클에서는 테이블의 일부 레코드 또는 테이블에 대한 Lock을 걸수 있다.

    Lock이 걸린 Record(Table)에 대해서는 Commit, Rollback문을 수행하기 전까지 다른 세션에서 Delete, Update를 할 수 없다.

    하지만 Lock을 걸더라도 다른 세션에서 Select는 가능하다.


    ▣ Table Lock
      - 문법 : lock table TABLE_NAME in exclusive mode;
      - Table Lock이 걸린 테이블에 대해서는 다른 세션에서 Insert, Update, Delete를 할 수 없다.
      - Table Lock이 걸리더라도 다른 세션에서 Select는 가능하다.
      - Commit, Rollback 문장 실행으로 Lock을 풀 수 있다.

    ▣ Record Lock
      - 문법 : select * from TABLE_NAME where CONDITION for update;
      - "for update" 키워드를 이용한다.
      - "for update" 를 이용한 Select 문에서의 CONDITION에 해당하는 레코드들에 대해 Lock이 설정된다.
      - Lock이 걸린 Record들에 대해서는 다른 세션에서 Delete, Update를 할 수 없다.
      - Lock이 걸리지 않은 Record들에 대해서는 다른 세션에서 Delete, Update를 할 수 있다.
      - Record Lock을 걸더라도 다른 세션에서 테이블에 대한 Insert는 가능하다.
      - Record Lock이 걸리더라도 다른 세션에서 Select는 가능하다.
      - Commit, Rollback 문장 실행으로 Lock을 풀 수 있다.


    [Example1] - Table Lock
    -- EMP 테이블에 대해 Insert, Delete, Update를 금지한다.
    LOCK TABLE EMP IN exclusive mode


    [Example1] - 모든 레코드에 대한 Record Lock
    -- EMP 테이블의 모든 레코드에 대해 Delete, Update를 금지한다
    SELECT *
      FROM EMP
       FOR UPDATE


    [Example1] - 일부 레코드에 대한 Record Lock
    -- EMP 테이블에서 "empno = 100" 조건의 레코드에 대해 Delete, Update를 금지한다
    SELECT *
      FROM EMP
     WHERE empno = 100
       FOR UPDATE



    ☞ 본문 출처 : http://www.enjoydev.com/blog/46
Designed by Tistory.