TABLE 백업을 위해 기존 테이블을 RENAME 후 재생성하는 경우가 있다.
그런데 RENAME 대상 테이블에 TRIGGER 가 존재한다면 RENAME 시 TRIGGER 도 변경된 테이블로 바라보게 되기때문에 반드시 TRIGGER를  재생성 해줘야 한다. 
그리고 CBO 환경의 통계정보가 존재하는 테이블이라면  RENAME 하기전 통계정보도 EXPORT 후  재생성후  IMPORT  해야 한다.
아래는 그에 대한 절차이다.

참고로 통계정보 이관에 대해서 더 자세하게 알고 싶으면 아래 글을 참조하기 바란다.



통계정보 이관하기 - 일반테이블 - http://dbtown.net/xe/848
통계정보 이관하기 - 파티션테이블 - http://dbtown.net/xe/851





TABLE Rename 후 TABLE 재생성 절차 (TRIGGER, 통계정보 포함)

 

1. Object 확인

 

conn /as sysdba

select owner,object_name, object_type from dba_objects where object_name='TEST';

select owner,object_name, object_type from dba_objects where object_name='TEST_BACKUP';

 

 

2. INDEX & PK 확인

 

select owner, INDEX_NAME, TABLE_OWNER, TABLE_NAME, TABLE_TYPE, UNIQUENESS from

dba_indexes where table_name='TEST';

 

OWNER     INDEX_NAME     TABLE_OWNER     TABLE_NAME        TABLE_TYPE  UNIQUENES

------------------------------ ------------------------------ -------- ------------------------

RCHWIN      TEST_01        RCHWIN               TEST              TABLE       NONUNIQUE

RCHWIN      TEST_02        RCHWIN               TEST              TABLE       NONUNIQUE

RCHWIN      TEST_PK        RCHWIN               TEST              TABLE       UNIQUE

 

select OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from

dba_constraints where TABLE_NAME='TEST';

 

OWNER                          CONSTRAINT_NAME                C TABLE_NAME

------------------------------ --------------------------------- ------

RCHWIN                          SYS_C00220988                        C TEST

RCHWIN                          SYS_C00220989                        C TEST

RCHWIN                          TEST_BACKUP_PK                      P TEST

 

3. Trigger 확인

SELECT OWNER,TRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT,TABLE_OWNER,TABLE_NAME,STATUS

FROM DBA_TRIGGERS

WHERE TABLE_NAME='TEST

 

OWNER        TRIGGER_NAME     TRIGGER_TYPE        TRIGGERING_EVENT    TABLE_NAME   STATUS

------------------------------ ------------------------------ -------------------------------

RCHWIN      TG_TEST_U         AFTER EACH ROW            UPDATE            TEST         ENABLE

 

 

4. 통계정보 확인

SQL> select owner, table_name, num_rows from dba_tables

  2  where table_name= 'TEST';

 

OWNER                          TABLE_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST               12537139

 

 SQL> select owner, index_name, num_rows from dba_indexes

 where table_name= 'TEST'

OWNER                          INDEX_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST_01                13076015

RCHWIN                          TEST_02                 4797731

RCHWIN                          TEST_PK                12257465

 

 

 

5. 현재상태 통계정보 담을 테이블 생성 및 백업 (  테이블 재생성후 통계정보를  넣기 위해 )

 

exec dbms_stats.create_stat_table(ownname=>'SYSTEM',stattab=>'STATS_IMSI',tblspace=>'USERS');

 

EXEC DBMS_STATS.EXPORT_TABLE_STATS (OWNNAME=>'RCHWIN', TABNAME=>'TEST', STATTAB=> 'STATS_IMSI,

STATID=> 'STATS_IMSI',STATOWN=>'SYSTEM', cascade=>true);

 

 

6. RENAME OBJECT  DESCRIPTION 추출 (TABLE, INDEX, PK, SYNONYM)

 

- RENAME 전 상용 TOOL (오렌지, TOAD) 을 이용하여 관련 OBJECT DESCRIPTION 을 모두 추출한다.

table_rename1.jpg 

 test1.jpg

 

7. RENAME ( TABLE, PK, INDEX )

 

conn RCHWIN/

ALTER TABLE TEST RENAME TO TEST_BACKUP;

 

alter index TEST_PK rename to TEST_BACKUP_PK;

alter index TEST_01 rename to TEST_BACKUP_01;

alter index TEST_02 rename to TEST_BACKUP_02;

 

alter table TEST_BACKUP rename constraint TEST_PK to TEST_BACKUP_PK;

 

 

8. OBJECT 재생성 (TABLE, INDEX, PK, SYNONYM)

 

- RENAME 전 상용 TOOL (오렌지, TOAD) 을 이용하여 관련 OBJECT DESCRIPTION 추출한 소스를 이용 (항목6번 참조)

 

 

9. INDEX & PK 확인

 

 

select owner, INDEX_NAME, TABLE_OWNER, TABLE_NAME, TABLE_TYPE, UNIQUENESS from

dba_indexes where table_name='TEST';

 

OWNER     INDEX_NAME       TABLE_OWNER       TABLE_NAME          TABLE_TYPE  UNIQUENES

------------------------------ -----------------------------------------------------

RCHWIN    TEST_01        RCHWIN                          TEST              TABLE       NONUNIQUE

RCHWIN    TEST_02        RCHWIN                          TEST              TABLE       NONUNIQUE

RCHWIN   TEST_PK         RCHWIN                          TEST              TABLE       UNIQUE

 

select OWNER, CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from

dba_constraints where TABLE_NAME='TEST';

 

OWNER                          CONSTRAINT_NAME                C TABLE_NAME

------------------------------ ------------------------------------ ------

RCHWIN                          SYS_C00220988                        C TEST

RCHWIN                          SYS_C00220989                        C TEST

RCHWIN                          TEST_BACKUP_PK                      P TEST

 

10. Trigger 확인

 

SELECT OWNER,TRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT,TABLE_OWNER,TABLE_NAME,STATUS

FROM DBA_TRIGGERS

WHERE TABLE_NAME='TEST

 

OWNER        TRIGGER_NAME     TRIGGER_TYPE        TRIGGERING_EVENT    TABLE_NAME   STATUS

------------------------------ ------------------------------ -------------------------------

RCHWIN      TG_TEST_U         AFTER EACH ROW            UPDATE      TEST_BACKUP      ENABLE

 

11. 트리거 재생성

- RENAME 전 상용 TOOL (오렌지, TOAD) 을 이용하여 관련 OBJECT DESCRIPTION 추출한 소스를 이용 (항목6번 참조)

 

12. Trigger 확인

 

SELECT OWNER,TRIGGER_NAME,TRIGGER_TYPE,TRIGGERING_EVENT,TABLE_OWNER,TABLE_NAME,STATUS

FROM DBA_TRIGGERS

WHERE TABLE_NAME='TEST

 

OWNER        TRIGGER_NAME     TRIGGER_TYPE        TRIGGERING_EVENT    TABLE_NAME   STATUS

------------------------------ ------------------------------ -------------------------------

RCHWIN      TG_TEST_U         AFTER EACH ROW            UPDATE            TEST         ENABLE

 

 

13. 통계정보 확인

 

SQL> select owner, table_name, num_rows from dba_tables

  2  where table_name= 'TEST';

 

OWNER                          TABLE_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST

 

 SQL> select owner, index_name, num_rows from dba_indexes

 where table_name= 'TEST'

OWNER                          INDEX_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST_01

RCHWIN                          TEST_02

RCHWIN                          TEST_PK

 

 14 통계정보 IMPORT

 

SQL>  EXEC DBMS_STATS.IMPORT_TABLE_STATS (OWNNAME=>'RCHWIN', TABNAME=>'TEST', STATTAB=> 'STATS_IMSI',STATID=> 'STATS_IMSI',

STATOWN=>'SYSTEM', cascade=>true);

 

PL/SQL procedure successfully completed.

 

15. 통계정보 확인

 

SQL> select owner, table_name, num_rows from dba_tables

  2  where table_name= 'TEST';

 

OWNER                          TABLE_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST               12537139

 

 SQL> select owner, index_name, num_rows from dba_indexes

 where table_name= 'TEST'

OWNER                          INDEX_NAME                       NUM_ROWS

------------------------------ ------------------------------ ----------

RCHWIN                          TEST_01                13076015

RCHWIN                          TEST_02                 4797731

RCHWIN                          TEST_PK                12257465

 

 

 16. 최종 OBJECT 확인

 

conn /

select owner,object_name, object_type from dba_objects where object_name='TEST';

select owner,object_name, object_type from dba_objects where object_name='TEST_BACKUP';

 

 

  dbtown-rchwin.jpg
 이 글의 권한은 dbtown.net 에 있습니다.
자료를 스크랩하실땐 출처를 밝혀주세요 ^^