表的在线重定义:
SQL> alter table t add primary key(id);
Table altered.
1。验证并指定使用主键。
BEGIN
DBMS_REDEFINITION.CAN_REDEF_TABLE('lcm','t',
DBMS_REDEFINITION.CONS_USE_PK);
END;
2。创建中间表
CREATE TABLE int_t
(name varchar2(30),
id number primary key);
3。启动在线重定义过程。
BEGIN
DBMS_REDEFINITION.START_REDEF_TABLE('lcm', 't','int_t',
'name name, id id',
dbms_redefinition.cons_use_pk);
END;
4。同步数据
BEGIN
DBMS_REDEFINITION.SYNC_INTERIM_TABLE('lcm', 't', 'int_t');
END;
5。结束在线重定义过程。
BEGIN
DBMS_REDEFINITION.FINISH_REDEF_TABLE('lcm', 't', 'int_t');
END;
/
可以查询有无出错。
SQL> select object_name, base_table_name, ddl_txt from
2 DBA_REDEFINITION_ERRORS;
no rows selected
察看结果:
SQL> desc t
Name
---------------------------------------------------------------------------------------
NAME
ID
SQL> select * from t;
NAME ID
------------------------------ ----------
a 12
a 112
利用ctas:
SQL> set linesize 1000
SQL> desc t
Name
---------------------------------------------------------------------------------------
ID
NAME
SQL> create table t1
2 as
3 select name,id from t;
Table created.
SQL> desc t1
Name
---------------------------------------------------------------------------------------
NAME
ID
SQL> select * from t;
ID NAME
---------- ------------------------------
12 a
112 a
SQL> select * from t1;
NAME ID
------------------------------ ----------
a 12
a 112
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9599/viewspace-472933/ ,如需转载,请注明出处,否则将追究法律责任。