oracle在线重定义之表结构

来源:互联网 发布:茱莉亚音乐学院 知乎 编辑:程序博客网 时间:2024/05/21 11:49

oracle在线重定义之表结构

---首先创建一个源表

create table aa (a varchar2(8),bnumber(10),c varchar2(8));

insert into aa values('abc',10,'bca');

insert into aa values('ab',10,'bca');

insert into aa values('a',10,'bca');

--重定义的表必须要有主键

ALTER TABLE aa ADD CONSTRAINT PK_A PRIMARYKEY (A);

--创建一张中间表

create table bb (a varchar2(8),bVARCHAR2(10),c varchar2(8));

---进行检查源表的重定义

SQL> execDbms_Redefinition.can_redef_table ('scott',aa, dbms_redefinition.cons_use_pk );

PL/SQL procedure successfully completed

---开始重定义(列名必须要包含主键和要改字段的字段,使用to_numberto_char,不写的其他字段不会把数据复制过去)

SQL> execdbms_redefinition.start_redef_table ('scott',aa,bb,'a a,to_char(b) b,c c');

PL/SQL procedure successfully completed

--结束重定义

SQL> execdbms_redefinition.finish_redef_table('scott',aa,bb);

PL/SQL procedure successfully completed

 

 

中间遇到的几个报错解决方案

SQL> execdbms_redefinition.start_redef_table ('scott','AA','BB','a a,to_char(b) b');

begin dbms_redefinition.start_redef_table('scott','AA','BB','a a,to_char(b) b'); end;

ORA-12091:不能联机重新定义具有实体化视图的表 "SCOTT"."AA"

ORA-06512: "SYS.DBMS_REDEFINITION", line 50

ORA-06512: "SYS.DBMS_REDEFINITION", line 1343

ORA-06512: line 1

 

删除物化视图

drop materialized view log on aa;

 

SQL> execdbms_redefinition.start_redef_table ('scott','AA','BB','a a,to_char(b) b');

begin dbms_redefinition.start_redef_table('scott','AA','BB','a a,to_char(b) b'); end;

ORA-23539:当前正在重新定义 "SCOTT"."AA"

ORA-06512: "SYS.DBMS_REDEFINITION", line 50

ORA-06512: "SYS.DBMS_REDEFINITION", line 1343

ORA-06512: line 1

结束正在进行的重定义

SQL> execdbms_redefinition.abort_redef_table('scott','aa','bb');

PL/SQL procedure successfully completed