2017-12-28 36 views
2

종속성이있는 Type이 삭제 또는 교체하려고하면 오라클이 오류를 발생시킵니다. 다른 스키마 객체 (프로 시저와 같은)와는 달리 객체를 삭제하면 삭제되고 종속 객체는 invalid이됩니다. 내 두 가지 질문은다른 스키마 개체와 달리 참조 된 Type을 삭제할 수없는 이유

입니다. 이유 1 Type은 (는) 종속 항목이있는 경우 놓기/바꾸기를 막을 수없는 특별한 이유가 무엇입니까?

2) Type에 대해 위의 동작을 구분하는 논리는 다음과 같습니다.

ORA-02303: cannot drop or replace a type with type or table dependents. 
+1

[ORA-02303 : 유형 또는 테이블 종속 형으로 유형을 삭제하거나 대체 할 수 없음] https://stackoverflow.com/questions/11674807/ora-02303-cannot-drop-or-replace-a-type-with-type-or-table-dependents) – OldProgrammer

+1

@OldProgrammer 나는 왜 내가 얻었는지 묻지 않는다. 오류, 나는'타입'이 참조 된 것을 압니다. 내 질문에 분명히 언급되어 있습니다. –

답변

3

이 유형 및 절차 사이의 두 가지 차이점이 있습니다

"왜 이렇게 특별한 유형"만듭니다.

  1. 하위 유형은 수퍼 유형에 절대적으로 종속됩니다. 저장 프로 시저가 함수에 종속되어 있고 해당 함수를 삭제하면 프로 시저가 무효화됩니다. 그러나 우리는 함수를 사용하지 않도록 코드를 편집함으로써 프로 시저를 유효하게 만들 수 있습니다. 반면 수퍼 유형을 삭제하면 하위 유형이 영구적으로 무효화됩니다. 슈퍼 타입이 그것을 정의하기 때문에 슈퍼 타입에 대한 의존성을 제거하기 위해 편집 할 수 없습니다. 간단히 말해서 수퍼 유형을 다시 만들 때까지는 하위 유형이 작동하지 않습니다.

  2. 유형을 사용하여 데이터베이스 테이블과 테이블 열을 선언 할 수 있습니다. 그것들은 영속 상태의 구조입니다 : 데이터 때문에 스토어드 프로 시저와 같은 테이블 컬럼을 무효화 할 수 없습니다. 데이터베이스 테이블에서 사용되는 Type을 삭제하면 Type 구조에 포함 된 데이터가 손실됩니다. 더 크게 - - unused으로 종속 테이블 컬럼을 설정

    이 모든 잘못된 하위 유형 및 렌더링
    drop type my_type force; 
    

    가 :

던지기 ORA-02303 않고 종속성이있는 타입을 삭제하는 구문이 종속 테이블을 + 효화합니다. unused 테이블 열은 효과적으로 삭제됩니다. 데이터에 액세스 할 수 없습니다. 사용되지 않는 열 (또는 무효화 된 테이블)을 복구하려면 간단한 작업이 아닌 a tablespace point-in-time recovery on an auxilliary instance이 필요합니다. (무의식적으로 데이터를 복구 할 수 없게 만드는 것이 쉬운 이유는 객체 - 관계형 테이블이 좋은 아이디어가 아닌 이유 중 하나입니다.)