z


원본출처: http://www.enjoydev.com/blog/46


오라클에서는 테이블의 일부 레코드 또는 테이블에 대한 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

AND