1.创建中间表
请以HADES_COD.HDS_COD_BUSI_DETAIL为模板,
手动创建中间表:HADES_COD.HDS_COD_BUSI_DETAIL_1
以及它的constraint约束
示例:
-- Create table
create table HADES_COD.HDS_COD_BUSI_DETAIL_1
(
id NUMBER not null,
wo_code VARCHAR2(100),
order_code VARCHAR2(100),
arrv_address VARCHAR2(200),
...
adjust_orig_wo_code VARCHAR2(100),
arrv_month_verf_corp_name VARCHAR2(200)
)
tablespace NNC_DATA01
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 256K
next 256K
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate primary, unique and foreign key constraints
alter table HADES_COD.HDS_COD_BUSI_DETAIL_1
add constraint P_HDS_COD_BUSI_DETAIL primary key (ID)
using index
tablespace NNC_INDEX01
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 256K
next 256K
minextents 1
maxextents unlimited
pctincrease 0
);
2.验证是否支持在线重定义
exec dbms_redefinition.can_redef_table('HADES_COD','HDS_COD_BUSI_DETAIL');
3.映射字段类型,启动重定义进程
begin
dbms_redefinition.start_redef_table
(
uname => 'HADES_COD',
orig_table => 'HDS_COD_BUSI_DETAIL',
int_table => 'HDS_COD_BUSI_DETAIL_1'
);
end;
/
4.异步同步数据
begin
dbms_redefinition.sync_interim_table
(
uname => 'HADES_COD',
orig_table => 'HDS_COD_BUSI_DETAIL',
int_table => 'HDS_COD_BUSI_DETAIL_1'
);
end;
/
5.完成在线重定义
begin
dbms_redefinition.finish_redef_table
(
uname => 'HADES_COD',
orig_table => 'HDS_COD_BUSI_DETAIL',
int_table => 'HDS_COD_BUSI_DETAIL_1'
);
end;
/
6.(可选项)取消在线重定义
【仅供执行报错的时候,取消任务使用】
begin
dbms_redefinition.abort_redef_table
(
uname => 'HADES_COD',
orig_table => 'HDS_COD_BUSI_DETAIL',
int_table => 'HDS_COD_BUSI_DETAIL_1'
);
end;
/
7.收集统计信息
exec dbms_stats.GATHER_TABLE_STATS(ownname => 'HADES_COD',tabname => 'HDS_COD_BUSI_DETAIL',CASCADE => true,degree => 35);
8.创建索引
按原表的索引情况,自行创建其他索引(通过online parallel 4并行创建索引)
如:
create unique index HADES_COD.HDS_COD_BUSI_DETAIL_01 on HADES_COD.HDS_COD_BUSI_DETAIL (WO_CODE)
online parallel 4
tablespace NNC_INDEX01
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 256K
next 256K
minextents 1
maxextents unlimited
pctincrease 0
);
9.清理中间表
drop table HADES_COD.HDS_COD_BUSI_DETAIL_1 purge;
此种方式为在线重定义表的形式来释放已删除的空间,影响范围小、速度快,单表删除3亿的数据后,3~4小时即可完成全部的释放动作。
另外一种释放的方式为:
alter table HADES_COD.HDS_COD_BUSI_DETAILenable row movement nologging parallel 4;
alter table HADES_COD.HDS_COD_BUSI_DETAILshrink space COMPACT;
alter table HADES_COD.HDS_COD_BUSI_DETAILshrink space cascade;
alter table HADES_COD.HDS_COD_BUSI_DETAILdisable row movement noparallel logging;
此种方式较上面的方式要慢很多,开始运行后,只能傻等,大概需要20个小时的时间。