`
icheng
  • 浏览: 821683 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

将普通表转变为分区表 方法二

 
阅读更多

Oracle9i以上版本,利用在线重定义功能 SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);

Table created

SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;

52276 rows inserted

SQL> commit;

Commit complete

SQL> EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T', DBMS_REDEFINITION.CONS_USE_PK);

PL/SQL procedure successfully completed

SQL>
SQL> CREATE TABLE T_NEW (ID NUMBER PRIMARY KEY, TIME DATE) PARTITION BY RANGE (TIME)
2 (PARTITION P1 VALUES LESS THAN (TO_DATE('2004-7-1', 'YYYY-MM-DD')),
3 PARTITION P2 VALUES LESS THAN (TO_DATE('2006-7-1', 'YYYY-MM-DD')),
4 PARTITION P3 VALUES LESS THAN (TO_DATE('2008-7-1', 'YYYY-MM-DD')),
5 PARTITION P4 VALUES LESS THAN (MAXVALUE));

Table created

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_NEW', 'ID ID, TIME TIME', DBMS_REDEFINITION.CONS_USE_PK);

PL/SQL procedure successfully completed

SQL> EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('landuser', 'T', 'T_NEW');

PL/SQL procedure successfully completed

SQL> SELECT COUNT(*) FROM T PARTITION (P2);

COUNT(*)
----------
49697

SQL> SELECT COUNT(*) FROM T PARTITION (P4);

COUNT(*)
----------
2579

SQL>

优点:保证数据的一致性,在大部分时间内,表T都可以正常进行DML操作。只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。

不足:实现上比上面两种略显复杂。

适用于各种情况。

这里只给出了在线重定义表的一个最简单的例子,详细的描述和例子可以参考下面两篇文章。

Oracle的在线重定义表功能:http://blog.itpub.net/post/468/12855

Oracle的在线重定义表功能(二):http://blog.itpub.net/post/468/12962

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics