地市分站
用户名
密  码
您现在的位置是:树人网首页 / 计算机等级考试 / oracle认证 / 文章浏览
如何将Oracle数据库的普通表转换成分区表(2)
文章来源:来源网络 发表时间:2008-05-22 点击次数
Oracle的普通表没有办法通过修改属性的方式直接转化为分区表,必须通过重建的方式进行转变,下面介绍三种效率比较高的方法,并说明它们各自的特点。

  方法一:利用原表重建分区表

  步骤:

  SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);

  表已创建。

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

  已创建6264行。

  SQL> COMMIT;

  提交完成。

  SQL> CREATE TABLE T_NEW (ID, TIME) 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('2005-1-1', 'YYYY-MM-DD')),

  4 PARTITION P3 VALUES LESS THAN (TO_DATE('2005-7-1', 'YYYY-MM-DD')),

  5 PARTITION P4 VALUES LESS THAN (MAXVALUE))

  6 AS SELECT ID, TIME FROM T;

  表已创建。

  SQL> RENAME T TO T_OLD;

  表已重命名。

  SQL> RENAME T_NEW TO T;

  表已重命名。

  SQL> SELECT COUNT(*) FROM T;

  COUNT(*)

  ----------

  6264

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

  COUNT(*)

  ----------

  0

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

  COUNT(*)

  ----------

  6246

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

  COUNT(*)

  ----------

  18

  优点:

  方法简单易用,由于采用DDL语句,不会产生UNDO,且只产生少量REDO,效率相对较高,而且建表完成后数据已经在分布到各个分区中了。

  不足:

  对于数据的一致性方面还需要额外的考虑。由于几乎没有办法通过手工锁定T表的方式保证一致性,在执行CREATE TABLE语句和RENAME T_NEW TO T语句直接的修改可能会丢失,如果要保证一致性,需要在执行完语句后对数据进行检查,而这个代价是比较大的。另外在执行两个RENAME语句之间执行的对T的访问会失败。

  适用于修改不频繁的表,在闲时进行操作,表的数据量不宜太大。



1 2 3 4

责任编辑:qwer19871212

相关文章
公告栏

“蓝焰杯”第二届河南教育十大新闻人物火热评选中!!

点击参加评选,为你心目中的新闻人物投上一票>>>>
频道内容精选
[计算机考试]程序员必考的知识点
论坛/博客精选