Oracle 외부 키 에 색인 을 추가 하지 않 아 잠 금 예제 가 발생 합 니 다.

--시 계 를 만 들 고,이 시 계 는 하위 표 create table fkt as select *from user_objects; delete from fk_t where object_id is null; commit; --시 계 를 만 듭 니 다.이 시 계 는 부모 표 create table pk 입 니 다.t as select *from user_objects; delete from pk_t where object_id is null; commit; --부모 테이블 을 만 드 는 주 키 alter table PKt add constraintpk_pktable primary key (OBJECT_ID); --하위 테이블 을 만 드 는 외 키 alter table FKt addconstraint fk_fktable foreign key (OBJECT_ID) references pk_t (OBJECT_ID); --session 1:삭제 작업 을 수행 합 니 다.이 때 하위 표 와 부모 표 에 Row-S(SX)잠 금 delete from fk 를 추가 하 였 습 니 다.t whereobject_id=100; delete from pk_t where object_id=100; --session 2:다른 삭제 작업 을 실행 합 니 다.이때 두 번 째 삭제 문 구 는 delete from fk 를 기다 리 고 있 습 니 다.t whereobject_id=200; delete from pk_t whereobject_id=200; --session 1 로 돌아 가기:잠 금 즉시 발생 delete from pkt whereobject_id=100; session 2 오류 보고:SQL>delete from pktable where object_id=200; delete from pk_table where object_id=200*첫 번 째 줄 에 오류 가 발생 했 습 니 다:ORA-00060:자원 을 기다 리 는 동안 잠 금 이 하위 표 의 외 키 열 에 색인 을 추가 한 후에 잠 금 이 제거 되 었 습 니 다.이 때 부모 표 기록 을 삭제 할 때 하위 표 에 표 급 잠 금 이 필요 하지 않 기 때 문 입 니 다.외부 키 에 색인 create index ind 만 들 기pk_object_id on fk_t(object_id) nologging; --위의 동작 반복 session 1 delete from fkt whereobject_id=100; delete from pk_t whereobject_id=100; --session2 delete from fk_t whereobject_id=200; delete from pk_t whereobject_id=200; --session 1 로 돌아 가면 자물쇠 가 생기 지 않 습 니 다 delete from pkt whereobject_id=100;

좋은 웹페이지 즐겨찾기