清理oracle库30亿的表后,释放删除空间
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个小时的时间。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!