본문 바로가기

IT관련

테이블, 인덱스, 뷰, 시퀀스 rename to (이름 변경) SQL 구문 (ORA-14047, ORA-01765)

Oracle DB 에서 Table, View, Sequence, Private Synonym 의 이름변경시에는 "rename ~ to" 구문을 사용할 수 있습니다.

 

SQL> rename TAB1 to TAB2;
SQL> rename VIEW1 to VIEW2;
SQL> rename SEQ_TEMP1 to SEQ_TEMP2;
SQL> rename SYN_TAB1 to SYN_TAB2;
             -- Synonym은 Private Synonym 만 가능하고, Public Synonym 은 안됩니다.

 

Table 의 경우에는 "alter table ..." 구문으로도 이름 변경이 가능합니다.

 

SQL> alter table TAB1 rename to TAB2;

 

Table 의 경우는, 위 2가지 방법이 모두 가능한데,

Index 의 경우에는 "alter index ..." 구문으로만 이름 변경이 가능합니다.

 

SQL> alter index IX1_TAB1 rename to IX2_TAB2;

 

테이블, 인덱스, 뷰 등 객체의 이름을 변경할 때는 반드시 해당 소유 유저에서 해야 합니다.

sys 나 system 유저권한으로도 다른 유저의 객체 이름을 변경할 수는 없습니다.

 

sys 유저에서 다른 유저의 테이블을 변경하려고 하면 아래와 같이 ORA-14047 또는 ORA-01765 에러가 발생합니다.

 

SQL> conn / as sysdba
Connected.
SQL> alter table scott.TAB1 rename to scott.TAB2;
alter table scott.TAB1 rename to scott.TAB2 
                                        *
ERROR at line 1:
ORA-14047: ALTER TABLE|INDEX RENAME may not be combined with other operations

SQL>
SQL> rename scott.TAB1 to scott.TAB2;
rename scott.TAB1 to scott.TAB2 
       *
ERROR at line 1:
ORA-01765: specifying owner's name of the table is not allowed

 

음~ 다시 확인해보니, sys 유저에서 전부 다 안되는 건 아니고, alter table ~ rename to ~ 의 경우 scott. 을 빼면 되기는 하네요~