17,377
社区成员
发帖
与我相关
我的任务
分享
最近需要把一个大的分区表的分区重新进行安排。看了网上的资料,发觉有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);