哈尔滨海月数据恢复,技术亚洲领先 设为首页加入收藏RSS订阅
中国区:哈尔滨(总部)郑州福建深圳沈阳合肥大连包头淄博上海广州
    南京杭州嘉兴武汉济南青岛新疆太原
亚太区:印度韩国泰国新加坡马来西亚澳大利亚
Windows
Oracle下将非分区表转换为分区表

  很多数据库在设计时未能很好的规划数据库的容量, 导致在某些情况下, 导致一个表中存放了数百万, 数千万甚至上亿条记录, 维护起来非常的不便, 下面介绍一种将非分区表转换为分区表的方法.

  testtb_nopart是一个非分区表, 基本信息如下:

  SQL> desc testtb_nopart

  Name Null? Type

  ----------------------------------------- -------- ----------------------------

  TIMESTAMP DATE

  OWNER VARCHAR2(30)

  ACTION VARCHAR2(6)

  OBJECT_NAME VARCHAR2(128)

  MESSENG VARCHAR2(169)

  SQL> select to_char(timestamp, 'mm-yyyy'), count(*) from testtb_nopart group by to_char(timestamp, 'mm-yyyy');

  TO_CHAR COUNT(*)

  ------- ----------

  12-2005 2058125

  11-2005 1363431

  08-2005 150951

  10-2005 628149

  07-2005 1006340

  09-2005 730410

  6 rows selected.

  创建分区表testtb_part, 结构和testtb_nopart一致.

  create table testtb_part (timestamp date, owner varchar2(30), action varchar2(6), object_name varchar2(128) , messeng varchar2(169))

  tablespace testts

  partition by range(timestamp)(

  partition rest values less than (maxvalue))

  交换testtb_nopart和testtb_part中part分区的数据

  SQL> alter table testtb_part exchange partition rest with table testtb_nopart;

  Table altered.

  SQL> select to_char(timestamp, 'mm-yyyy'), count(*) from testtb_nopart group by to_char(timestamp, 'mm-yyyy');

  no rows selected

  SQL> c/nopart/part/

  1* select to_char(timestamp, 'mm-yyyy'), count(*) from testtb_part group by to_char(timestamp, 'mm-yyyy')

  SQL> /

  TO_CHAR COUNT(*)

  ------- ----------

  12-2005 2058125

  11-2005 1363431

  08-2005 150951

  10-2005 628149

  07-2005 1006340

  09-2005 730410

  6 rows selected.

  testtb_nopart中大约有50万条记录, 占用600m左右空间, 交换大约用了不到30秒钟, testtb_part和testtb_nopart所在的表空间也没有明显增长.

  对rest分区进行拆分

  SQL> alter table testtb_part split partition rest at (to_date('200508','yyyymm'))

  2 into (partition part08, partition rest);

  Table altered.

  SQL> alter table testtb_part split partition rest at (to_date('200509','yyyymm'))

  2 into (partition part08, partition rest);

  Table altered.

  SQL> alter table testtb_part split partition rest at (to_date('200510','yyyymm'))

  2 into (partition part09, partition rest);

  Table altered.

  SQL> alter table testtb_part split partition rest at (to_date('200511','yyyymm'))

  2 into (partition part10, partition rest);

  Table altered.

  SQL> alter table testtb_part split partition rest at (to_date('200512','yyyymm'))

  2 into (partition part11, partition rest);

  Table altered.

  SQL> alter table testtb_part split partition rest at (to_date('200601','yyyymm'))

  2 into (partition part12, partition rest);

  Table altered.

  ***后可以重命名表, 使得转换过程不影响用户程序.

  alter table testtb_part rename to testtb_nopart

 
客户服务 +more
上门服务
服务承诺
异地恢复
收费标准
付款方式
疑难解答
服务特色 +more
·免费检测
·免费提供3天备份
·专业工程师提供服务
·免费清洁送修的介质
·数据恢复前报价,客户确认后工程师开始数据恢复
·数据恢复不成功不收费
·与客户签订保密协议,对客户的数
 据严格保密,整个恢复过程不会对
 客户的原盘有任何的写操作,以确
 保原盘的数据完全

·免费参观恢复全过程

·工程师在线免费咨询

·专业工程师提供服务
服务器数据恢复 点击这里给我发消

息
数据库修复
点击这里给我发

消息
硬盘数据恢复
点击这里给我发消

息