2013-09-25 3 views
2

here 발견 잠금 장치 참조 무결성 제약 조건이 인덱스에 존재오라클 인덱스 전체 테이블 스캔/

  • 열 또는 열. 인덱스는 부모 테이블 기본 키를 업데이트하거나 부모 테이블에 을 병합하거나 부모 테이블에서 삭제하는 경우 이 필요하지 않은 전체 테이블 잠금을 피하는 수단입니다.

그런 상황에서 전체 테이블 잠금이 발생하는 이유를 알 수 없습니다. 나는 전체 테이블 스캔이 자식 테이블에서 수행 될 부모 테이블에서 기본 키를 삭제/업데이트하려고 시도했을 것입니다.

자물쇠는 어디에서 왔습니까?

답변

5

Tom Kyte 블로그 항목을보십시오. 그 안에는 Oracle documentation이 있으며이 설명은 다음과 같습니다.

  • 하위 테이블에서 전체 테이블 잠금을 방지합니다. 대신 데이터베이스는 인덱스에 대한 행 잠금을 획득합니다.
  • 하위 테이블의 전체 테이블 검색에 대한 필요성을 제거합니다. 예를 들어, 사용자가 departments 테이블에서 부서 10의 레코드를 제거한다고 가정하십시오. employees.department_id가 인덱싱되지 않으면 직원이 부서 10에 있는지 여부를 확인하기 위해 직원을 검사해야합니다.

첫 번째 시나리오에서는 열이 인덱싱되지 않으면 Oracle 어떤 행이 자식 테이블에서 업데이트되어야하는지 알지 못합니다. 색인을 사용하면 오라클은 문제의 행을 식별하고 잠글 수 있습니다. 전체 테이블 잠금이 없으면 부모를 수정하고 다른 세션에서 자식을 제약 조건을 위반 한 것으로 수정하도록 할 수 있습니다.