oracle 表分区的问题,求大神指导,万分感谢。

qq_19002115 2014-09-22 09:28:22
现在我有一个表的分区只有range规则:Partition By range(AAZ512),我想改成复合分区:Partition By range(AAZ512) subpartition by list (xxx) 。能在不删除数据的情况下修改吗,怎么修改?
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_19002115 2014-09-22
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
刚百度了下,参考
最近需要把一个大的分区表的分区重新进行安排。看了网上的资料,发觉有3种方法。
1、alter table table_name split partition
alter table table_name split partition在我的10.2.0.1好像有bug,有时候不能操作,而且速度很慢
2、Oracle的在线重定义表功能
尝试使用大表好像也不成功
3、exp/imp
最后我是使用这个方式,因为数据库是个历史库。
1)exp使用tables方式就行了
exp userid=host/report tables=(table_name) grants=n indexes=n constraints=n file=table_name.dmp log=table_name_exp.log
2)重新建表,先不建索引和主键
3)imp导入,几个参数需要注意。1、ignore=y因为表已经建了,有这个参数可以让表导入继续下去2、buffer要增加,否则会出错,我加到1000000。3、commit=y默认是表加载完才提交,表的数据太多了,会挤暴undo表分区,增加这个参数后buffer满了就提交。索引和主键我是导入数据后再建
imp userid=host/report buffer=1000000 ignore=y commit=y tables=(table_name) grants=n indexes=n constraints=n file=table_name.dmp log=table_name_imp.log
4)删除旧表后重建索引和主键
create unique index pk_table_name on table_name (col1, col2) local tablespace tablespace_name;
alter table table_name add constraint pk_table_name primary key(col1, col2);
额 看来还是要删数据重新建表啊,好吧。谢谢版主了。
bw555 2014-09-22
  • 打赏
  • 举报
回复
刚百度了下,参考
最近需要把一个大的分区表的分区重新进行安排。看了网上的资料,发觉有3种方法。
1、alter table table_name split partition
alter table table_name split partition在我的10.2.0.1好像有bug,有时候不能操作,而且速度很慢
2、Oracle的在线重定义表功能
尝试使用大表好像也不成功
3、exp/imp
最后我是使用这个方式,因为数据库是个历史库。
1)exp使用tables方式就行了
exp userid=host/report tables=(table_name) grants=n indexes=n constraints=n file=table_name.dmp log=table_name_exp.log
2)重新建表,先不建索引和主键
3)imp导入,几个参数需要注意。1、ignore=y因为表已经建了,有这个参数可以让表导入继续下去2、buffer要增加,否则会出错,我加到1000000。3、commit=y默认是表加载完才提交,表的数据太多了,会挤暴undo表分区,增加这个参数后buffer满了就提交。索引和主键我是导入数据后再建
imp userid=host/report buffer=1000000 ignore=y commit=y tables=(table_name) grants=n indexes=n constraints=n file=table_name.dmp log=table_name_imp.log
4)删除旧表后重建索引和主键
create unique index pk_table_name on table_name (col1, col2) local tablespace tablespace_name;
alter table table_name add constraint pk_table_name primary key(col1, col2);
bw555 2014-09-22
  • 打赏
  • 举报
回复
引用 2 楼 qq_19002115 的回复:
我不是想合并分区,是想增加一条子分区的规则。因为现在没有子分区的规则,导致我无法添加list子分区。
抱歉,没看清问题,据我了解还没有类似的功能,只能另外建表,再把原数据导入过去吧 看看其他人怎么说
qq_19002115 2014-09-22
  • 打赏
  • 举报
回复
引用 1 楼 bw555 的回复:
合并两个分区成一个,适用于除hash之外的其它所有分区形式。 语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3; 同样也支持update indexes子句以避免单独执行造成索引失效的问题。 需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的 分区表及分区索引(11)--合并表分区
我不是想合并分区,是想增加一条子分区的规则。因为现在没有子分区的规则,导致我无法添加list子分区。
bw555 2014-09-22
  • 打赏
  • 举报
回复
合并两个分区成一个,适用于除hash之外的其它所有分区形式。 语法很简单:alter table tbname merge partitions/subpartitions pt1,pt2 into partition/subpartition pt3; 同样也支持update indexes子句以避免单独执行造成索引失效的问题。 需要注意一点,要合并的两个分区必须是连续的,这点是由分区本身的特性所决定的 分区表及分区索引(11)--合并表分区
卖水果的net 2014-09-22
  • 打赏
  • 举报
回复
没有办法,只能重建,你可以研究一下 12c,看看有没有改善。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧