将普通表转换成分区表有4种方法:

1)  Export/import method

2)  Insert with a subquery method

3)  Partition exchange method(交换分区)

4)  DBMS_REDEFINITION(在线重定义)

交换分区的步骤:

1)  创建分区表,假设有2个分区,P1,P2

2)  创建表A存放P1规则的数据

3)  创建表B 存放P2规则的数据

4)  用表A 和P1 分区交换,把表A的数据放到到P1分区

5)  用表B 和p2 分区交换,把表B的数据存放到P2分区

示例:

a. 创建分区表:

sql> create table p_dba

2    (id number,time date)

3    partition by range(time)

4    (

5    partition p1 values less than (to_date('2010-09-1', 'yyyy-mm-dd')),

6    partition p2 values less than (to_date('2010-11-1', 'yyyy-mm-dd'))

7    );

b.创建2个分别对应分区的基表:

SQL>  CREATE  TABLE  dba_p1  as  SELECT  id,time_fee  FROM  dba_old WHERE

time_fee

SQL>  CREATE  TABLE  dba_p2  as  SELECT  id,time_fee  FROM  dba_old WHERE

time_fee

time_fee>TO_DATE('2010-09-1', 'YYYY-MM-DD');

c.将2个基表与2个分区进行交换:

SQL> alter table p_dba exchange partition p1 with table dba_p1;

表已更改。

SQL> alter table p_dba exchange partition p2 with table dba_p2;

表已更改。

在线重定义能保证数据的一致性,在大部分时间内,表都可以正常进行DML操作。

只在切换的瞬间锁表,具有很高的可用性。这种方法具有很强的灵活性,对各种不同的需要都能满足。

而且,可以在切换前进行相应的授权并建立各种约束,可以做到切换完成后不再需要任何额外的管理操作。

这个功能只在9.2.0.4以后的版本才有,在线重定义表具有以下功能:

(1)修改表的存储参数

(2)将表转移到其他表空间

(3)增加并行查询选项

(4)增加或删除分区

(5)重建表以减少碎片

(6)将堆表改为索引组织表或相反的操作

(7)增加或删除一个列

使用在线重定义的一些限制条件:

(1) There must be enough space to hold two copies of the table.

(2) Primary key columns cannot be modified.

(3) Tables must have primary keys.

(4) Redefinition must be done within the same schema.

(5) New  columns  added  cannot  be  made  NOT  NULL  until  after  the  redefinitionoperation.

(6) Tables cannot contain LONGs, BFILEs or User Defined Types.

(7) Clustered tables cannot be redefined.

(8) Tables in the SYS or SYSTEM schema cannot be redefined.

(9) Tables  with  materialized  view  logs  or  materialized  views  defined  on  themcannot be redefined.

(10) Horizontal sub setting of data cannot be performed during the redefinition.

在线重定义的大致操作流程如下:

(1)创建基础表A,如果存在,就不需要操作

(2)创建临时的分区表B

(3)开始重定义,将基表A的数据导入临时分区表B

(4)结束重定义,此时在DB的 Name Directory里,已经将2个表进行了交换。即此时基表A成了分区表,我们创建的临时分区表B 成了普通表。此时我们可以删除我们创建的临时表B。

示例:

a. 创建基本表和索引

sql> create table unpar_table (

2    id number(10) primary key,

3    create_date date

4    );

b. 收集表的统计信息

sql> exec dbms_stats.gather_table_stats('icd', 'unpar_table', cascade => true);

pl/sql 过程已成功完成

c. 创建临时分区表

sql>  create  table    par_table  (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('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));

d. 进行重定义操作

d1. 检查重定义的合理性

d2. 如果d1没有问题,开始重定义,这个过程可能要等一会

这里要注意:如果分区表和原表列名相同,可以用如下方式进行:

SQL> BEGIN

DBMS_REDEFINITION.start_redef_table(

uname => 'ICD',

orig_table => 'unpar_table',

int_table => 'par_table');

END;

/

如果分区表的列名和原表不一致,那么在开始重定义的时候,需要重新指定

映射关系:

SQL> EXEC DBMS_REDEFINITION.START_REDEF_TABLE(

'ICD',

'unpar_table',

'par_table',

'ID ID, create_date TIME', -- 在这里指定新的映射关系

DBMS_REDEFINITION.CONS_USE_PK);

这一步操作结束后,数据就已经同步到这个临时的分区表里来了。

d3. 同步新表,这是可选的操作

SQL> BEGIN

2    dbms_redefinition.sync_interim_table(

3    uname => 'ICD',

4    orig_table => 'unpar_table',

5    int_table => 'par_table');

6    END;

7    /

PL/SQL 过程已成功完成。

d4. 创建索引,在线重定义只重定义数据,索引还需要单独建立

sql> create index create_date_ind2 on par_table(time);

d5. 收集新表的统计信息

sql> exec dbms_stats.gather_table_stats('icd', 'par_table', cascade => true);

d6. 结束重定义

SQL> BEGIN

2    dbms_redefinition.finish_redef_table(

3    uname => 'ICD',

4    orig_table => 'unpar_table',

5   int_table => 'par_table');

6    END;

7    /

PL/SQL 过程已成功完成

结束重定义的意义:

基表unpar_table  和临时分区表par_table  进行了交换。  此时临时分区表

par_table成了普通表,我们的基表unpar_table成了分区表。

我们在重定义的时候,基表unpar_table是可以进行DML操作的。 只有在2

个表进行切换的时候会有短暂的锁表。

oracle表转为分区表,Oracle普通表转分区表的几种方法相关推荐

  1. 注册表桌面显示计算机,电脑开机后不显示桌面图标怎么办?修改注册表解决开机后不显示桌面图标的3种方法...

    解决方法一: 1.按Win+R打开运行,输入regedit并回车: 2.在注册表展开:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersi ...

  2. oracle sql列转行_Oracle数据库中列转行的两种方法

    1.创建tb_student表 create table tb_student( id number(4) , name varchar2(20), course varchar2(20), scor ...

  3. layui表单mysql_layui表单验证支持select下拉框的一种方法

    背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...

  4. set column oracle,Oracle 用一个表字段更新另一个表字段三种方法

    1. update (select .....) set column1 = column2; update (select iy.company_name company_name1, cc.com ...

  5. layui表单验证支持select下拉框的一种方法

    背景: 1.layui在select选择后可以通过layui.event.call触发form.on('select(##)',function...)事件 2.layui的select被渲染后会变成 ...

  6. Word文档(.docx) 转为 Markdown文档(.md)的一种方法 —— 一款word插件(Writage)

    将Word文档转为Markdown文档,虽然这种情况不多,但是遇到的时候,如果有一个顺手的插件,那真是太舒服了 工具: Writage 大小: <10M 下载方式: 官网http://www.w ...

  7. c# aspx转为html,asp.net(c#)网页跳转七种方法小结

    ①response.redirect这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同时不能跳过登录保 ...

  8. date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  9. mysql改存储引擎教程_MySQL中修改数据表存储引擎的三种方法

    第一种方法:ALTER TABLE 将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句,转换表的存储引擎会导致失去原引擎相关的所有特性. 例:将mytable的引擎修改为Inn ...

  10. 如何删除mysql数据库里的表_删除mysql数据表如何操作

    MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TABLE table_na ...

最新文章

  1. select 和 order by
  2. 并查集 HDOJ 1232 畅通工程
  3. Vue watch如何同时监听多个属性?
  4. 探索比特币源码9-顺藤摸瓜之通过RPC读源码
  5. vm虚拟机安装凤凰os安卓系统
  6. 20210125比较常用的vim配置文件及说明
  7. P1183 多边形的面积
  8. MySQL数据库必会的增删查改操作(CRUD)
  9. 【BHOJ 女娲加农炮 |、||】贪心 | 优先队列 | 堆 | E
  10. 浅谈凸优化中的共轭函数
  11. wing带你玩转自定义view系列(3)模仿微信下拉眼睛
  12. Windows 11新版本安装时需要联网及登录微软账号
  13. HTTP协议个人总结
  14. socks5与http代理如何转化?stormproxies怎么解决?
  15. 5-2 人际资源整合-正确看待自己的领导-与领导日常互动-说服领导的技巧
  16. 微信小程序毕业论文题目_SSM项目源码校园辩论管理平台+后台管理系统
  17. 旅行时,如何通过树莓派和iPad Pro备份图片
  18. 西门子S7-1200 移位指令SHL
  19. 简约工作展示汇报PPT模板
  20. bison使用error死循环的记录

热门文章

  1. RAMOS(内存操作系统)大制作
  2. Tesseract简介
  3. 【数据结构】——单链表超详细介绍(独家介绍,小白必看!!!)
  4. 容器挂载volume出现“Permission denied”的问题定位解决
  5. 刻录文件到光盘中(有word,Excel,图片等等)
  6. element-ui tree 点击章节节点勾选/取消勾选
  7. 支付接口(采用第三方收款系统)实现心得
  8. 动画交互应用——神秘力量
  9. shader一键替换
  10. 20140604 word表格中打钩 循环右移