清理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个小时的时间。

相关推荐
Java面试题总结几秒前
MongoDB(70)如何使用副本集进行备份?
数据库·mongodb
荒川之神13 分钟前
Oracle LEVEL 函数练习(HR 模式 employees 表)
数据库·oracle
TDengine (老段)30 分钟前
TDengine IDMP 工业数据建模 —— 元素与数据查询
大数据·数据库·人工智能·物联网·时序数据库·tdengine·涛思数据
蜡台30 分钟前
Mysql 安装与配置
数据库·mysql
lajidecrd31 分钟前
Ubuntu24安装PostgreSQL和PgVector
数据库·postgresql
羊小猪~~32 分钟前
Redis学习笔记(数据类型、持久化、事件、管道、发布订阅等)
开发语言·数据库·c++·redis·后端·学习·缓存
福娃筱欢38 分钟前
Oracle迁移KES提示ERROR: type “geometry“ does not exist
数据库·oracle
mldlds41 分钟前
使用 Qt 插件和 SQLCipher 实现 SQLite 数据库加密与解密
数据库·qt·sqlite
大空大地20261 小时前
Entity Framework
数据库
王仲肖1 小时前
PostgreSQL 事务 ID 年龄增长与冻结机制分析
数据库·postgresql