테이블 rename시 dependency는?
테이블 이름을 바꾸면 defendency는 어떻게 바뀔까?
테스트로 간단 하게 알아보자.
SQL> create table test_tab1 (col1 number);
테이블이 생성되었습니다.
SQL> create unique index test_tab1_pk
2 on test_tab1
3 (col1);
인덱스가 생성되었습니다.
SQL> alter table test_tab1 add constraint test_tab1_pk primary key (col1);
테이블이 변경되었습니다.
SQL> create synonym test.test_tab1 for test_tab1;
동의어가 생성되었습니다.
SQL> grant select on test_tab1 to test;
권한이 부여되었습니다.
SQL> create view test.test_tab1_vw as select * from test_tab1;
뷰가 생성되었습니다.
SQL> create or replace
2 TRIGGER test_tab1_trg
3 BEFORE update ON test_tab1
4 FOR EACH ROW
5 BEGIN
6 null;
7* END;
SQL> /
트리거가 생성되었습니다.
SQL>
REFERENCED_NAME OWNER NAME TYPE STATUS
------------------------------ ------------ ------------------------------ ------------------------------------ --------------
TEST_TAB1 TEST TEST_TAB1_VW VIEW VALID
TEST2 TEST_TAB1_TRG TRIGGER VALID
TEST TEST_TAB1 SYNONYM VALID
SQL> alter table test_tab1 rename to test_tab2;
테이블이 변경되었습니다.
REFERENCED_NAME OWNER NAME TYPE STATUS
------------------------------ ------------ ------------------------------ ------------------------------------ --------------
TEST_TAB2 TEST2 TEST_TAB1_TRG TRIGGER INVALID
오브젝트가 invalid 빠지긴 했지만 compile 하면 되고,
트리거만 따라가고 나머지는 test_tab1에 아직도 종속적이다.
결론, 테이블 이름 변경시 인덱스 이름도 바꿔야 하고, 제약조건 이름도 바꿔야 하고, 시노님 재생성 하고...끝