oracle修改表名以及报ora-14047解决
我们在改名字的时候,会遇到ORA-14047错误.
sqlplus as sysdba
SQL> select table_name from dba_tables where owner='itlife365';
TABLE_NAME
------------------------------
name1
SQL> alter table itlife365.name1 rename to name2;
表已更改。
SQL> select table_name from dba_tables where owner='itlife365';
TABLE_NAME
------------------------------
name2
SQL> alter table itlife365.name2 rename to itlife365.name3;
alter table itlife365.name2 rename to itlife365.name3
*
第 1 行出现错误:
ORA-14047: ALTER TABLE|INDEX RENAME 不能与其它分区组合
SQL> conn itlife365/itlife365
已连接。
SQL> rename name2 to name3;
表已重命名。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
name3
SQL> alter table name3 rename to name1;
表已更改。
SQL>
说明:ORA-14047报错的原因
If we login as sysdba , then we don't need to add schema/owner name to the new talbe name string.
我们来分析一下这个问题,当你执行alter table itlife365.name1的时候,你已经告诉oracle你要修改哪个用户下的哪个表了,所以在rename to 的时候就不需要在指定用户名称了.
如果在写用户名的话,oracle也许会认为你是要把itlife365下的name1表改名存储到其他用户下面去,oracle不允许这么做!
例如我想把刚才的test放到sys下面去.
到这儿就不难理解oracle为什么要这么设计了!因为不能保证你有sys的密码,随随便便的执行个rename to 的命令就把一个用户下的表放到sys下了,那还有什么安全性啊!
所以oracle设定了这样的限制.