Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 在线重定义(将普通堆表转换成分区表)

1 创建测试表 用sys用户创建测试表SQL> CREATE TABLE HR.ST (ID NUMBER, TIME DATE);Table created.SQL> INSERT INTO HR.ST SELECT ROWNUM, CREATED FROM DBA_OBJECTS;50416 rows created.SQL> commit;Commit complete.2 授权SQL> grant execute on DBMS_REDEFINITION to hr;Grant succeeded.SQL> grant CREATE ANY TABLE, ALTER ANY TABLE, DROP ANY TABLE, LOCK ANY TABLE, SELECT ANY TABLE to hr;Grant succeeded.3 新建中间表(分区的表结构)SQL> create table mid_st(id number primary key, time date) partition by range(time)  2  (  3    partition p1 values less than(to_date("2004-7-1", "yyyy-mm-dd")),  4    partition p2 values less than(to_date("2005-1-1", "yyyy-mm-dd")),  5    partition p3 values less than(to_date("2005-7-1", "yyyy-mm-dd")),  6    partition p4 values less than(maxvalue)  7  );Table created4 验证SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, "ST", DBMS_REDEFINITION.CONS_USE_PK);PL/SQL procedure successfully completed5 在线重定义SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, "ST", "MID_ST");PL/SQL procedure successfully completed6 同步数据(可选)如果在执行DBMS_REDEFINITION.START_REDEF_TABLE()过程和执行DBMS_REDEFINITION.FINISH_REDEF_TABLE()过程直接在重定义表上执行了大量的DML操作,那么可以选择执行一次或多次的SYNC_INTERIM_TABLE()过程,以减少最后一步执行FINISH_REDEF_TABLE()过程时的锁定时间。SQL> EXEC DBMS_REDEFINITION.SYNC_INTERIM_TABLE(USER, "ST", "MID_ST");PL/SQL procedure successfully completed7 结束重定义SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, "ST", "MID_ST");PL/SQL procedure successfully completed8 查看分区结果SQL> select a.table_name, a.partition_name from user_tab_partitions a;TABLE_NAME                     PARTITION_NAME------------------------------ ------------------------------ST                             P1ST                             P2ST                             P3ST                             P49 放弃在线重定义可以在执行dbms_redefinition.start_redef_table之后到执行dbms_redefinition.finish_redef_table之前的时间里执行:DBMS_REDEFINITION.abort_redef_table(user, "st", "mid_st")以放弃执行在线重定义。10 常见问题10.1 无主键SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(user, "ST", DBMS_REDEFINITION.CONS_USE_PK);BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE(user, "ST", DBMS_REDEFINITION.CONS_USE_PK); END;*ERROR at line 1:ORA-12089: cannot online redefine table "HR"."ST" with no primary keyORA-06512: at "SYS.DBMS_REDEFINITION", line 137ORA-06512: at "SYS.DBMS_REDEFINITION", line 1478ORA-06512: at line 1 出错了, 该表上缺少主键, 为该表建主键. 再执行验证.SQL> alter table st add constraint pk_t primary key(id);Table altered. 用这句删除materialized view 即可继续进行drop materialized view log on <tablename>;drop materialized view log on t; OR drop materialized t;10.2 未授权SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, "ST", "MID_ST");begin DBMS_REDEFINITION.START_REDEF_TABLE(USER, "ST", "MID_ST"); end;ORA-01031: insufficient privilegesORA-06512: at "SYS.DBMS_REDEFINITION", line 50ORA-06512: at "SYS.DBMS_REDEFINITION", line 1343ORA-06512: at line 2实验: Oracle中表shrink与move后index的状态RAC之安装DB SOFT节点间时间一致导致tar错误相关资讯      Oracle数据库  Oracle入门教程  oracle数据库教程 
  • Oracle数据库全球化  (03月01日)
  • Oracle数据库日期过滤方法性能比较  (02/02/2015 13:20:26)
  • Oracle数据库安装中端口被占用问题  (10/29/2014 07:42:24)
  • 在CentOS 6.6上搭建C++运行环境并  (10/10/2015 19:44:40)
  • Oracle数据库无法使用localhost和  (11/14/2014 16:39:10)
  • 使用SQLT来构建Oracle测试用例  (08/28/2014 06:17:41)
本文评论 查看全部评论 (0)
表情: 姓名: 字数