ORACLE数据库表分区压缩说明

数据库压缩开始
--1、最开始先执行数据的导出和删除
--2、执行下面语句查看空间压缩情况
select a.file#,
a.name,
a.bytes / 1024 / 1024 CurrentMB,
ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,
(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,
'alter database datafile ''' || a.name || ''' resize ' ||
ceil(HWM * a.block_size / 1024 / 1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id, max(block_id + blocks - 1) HWM
from dba_extents
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM * block_size) > 0
and a.NAME like '%TBS_PART_01%' --根据月份修改数值,当前情况是月份,二月份修改为 and a.NAME like '%TBS_PART_02%'
order by 2;

--3、复制2查询的字段‘ResizeCMD’的结果,如果 resize 后面的数字小于1024M,则改为 1024M
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1M;
--修改为
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1024M;
--4、执行修改后的语句。
--数据库压缩完成。

 

--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--下面假如有这种情况: alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--6、移动表前先对表空间做整理
alter tablespace TBS_PART_0131 coalesce;

--7、找到2步骤中 ResizeCMD 为 alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;的行的 ‘a.file#’值

--8、修改下面file_id= 的值为 找到的 ‘a.file#’ 值。(假设找到的值为 861)

set heading off
set echo off
set feedback off
set termout on
spool d:\aaa.sql
--移动表
select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动索引
select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动分区表
select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动分区索引
select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;


spool off
set heading off
set echo off
set feedback off
set termout on
spool d:\bbb.sql
--移动表
select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动索引
select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动分区表
select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动分区索引
select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;
spool off

--9、复制上面步骤8修改后的语句,在plsql工具中打开“Command Window” 窗口,黏贴语句。

--10、找到d盘下的aaa.sql文件,复制内容到plsql工具中,点击运行,(内容如下)
alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;
alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

--11、然后修改语句再执行压缩表空间的语句
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;
--修改为
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1024M;


--12、最后再把步骤10中aaa.sql文件的语句修改,(把BK_SPACE改回原来的TBS_PART_0131)再运行
alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;
alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

--数据库压缩完成
开始
--1、最开始先执行数据的导出和删除
--2、执行下面语句查看空间压缩情况
select a.file#,
a.name,
a.bytes / 1024 / 1024 CurrentMB,
ceil(HWM * a.block_size) / 1024 / 1024 ResizeTo,
(a.bytes - HWM * a.block_size) / 1024 / 1024 ReleaseMB,
'alter database datafile ''' || a.name || ''' resize ' ||
ceil(HWM * a.block_size / 1024 / 1024) || 'M;' ResizeCMD
from v$datafile a,
(select file_id, max(block_id + blocks - 1) HWM
from dba_extents
group by file_id) b
where a.file# = b.file_id(+)
and (a.bytes - HWM * block_size) > 0
and a.NAME like '%TBS_PART_01%' --根据月份修改数值,当前情况是月份,二月份修改为 and a.NAME like '%TBS_PART_02%'
order by 2;

--3、复制2查询的字段‘ResizeCMD’的结果,如果 resize 后面的数字小于1024M,则改为 1024M
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1M;
--修改为
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0101.DBF' resize 1024M;
--4、执行修改后的语句。
--数据库压缩完成。

 

--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--如果第3部中的 resize 后面的数字大于1024M,则往下运行步骤。。。。。
--下面假如有这种情况: alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;

--6、移动表前先对表空间做整理
alter tablespace TBS_PART_0131 coalesce;

--7、找到2步骤中 ResizeCMD 为 alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;的行的 ‘a.file#’值

--8、修改下面file_id= 的值为 找到的 ‘a.file#’ 值。(假设找到的值为 861)

set heading off
set echo off
set feedback off
set termout on
spool d:\aaa.sql
--移动表
select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动索引
select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动分区表
select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;
--移动分区索引
select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RC_DBCENTER' and file_id=861;


spool off
set heading off
set echo off
set feedback off
set termout on
spool d:\bbb.sql
--移动表
select DISTINCT 'alter table '|| segment_name || ' move tablespace BK_SPACE;' from dba_extents where segment_type='TABLE' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动索引
select DISTINCT 'alter index '|| segment_name || ' rebuild tablespace BK_SPACE;' from dba_extents where segment_type='INDEX' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动分区表
select DISTINCT 'alter table '|| segment_name || ' move partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='TABLE PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;
--移动分区索引
select DISTINCT 'alter index '|| segment_name || ' rebuild partition '|| partition_name || ' tablespace BK_SPACE;' from dba_extents where segment_type='INDEX PARTITION' and owner = 'XM_RT_DBCENTER' and file_id=861;
spool off

--9、复制上面步骤8修改后的语句,在plsql工具中打开“Command Window” 窗口,黏贴语句。

--10、找到d盘下的aaa.sql文件,复制内容到plsql工具中,点击运行,(内容如下)
alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;
alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace BK_SPACE;

--11、然后修改语句再执行压缩表空间的语句
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1524M;
--修改为
alter database datafile 'E:\ORADATA_PART\TBS01\TBS_PART_0131.DBF' resize 1024M;


--12、最后再把步骤10中aaa.sql文件的语句修改,(把BK_SPACE改回原来的TBS_PART_0131)再运行
alter table TRRT_BUS_INOUT_GPS_HIS move partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;
alter index IND_TRRT_BUS_INOUT_GPS_HIS_1 rebuild partition TRRT_BUS_INOUT_HIS_20160131 tablespace TBS_PART_0131;

--数据库压缩完成

posted on   人生如梦既梦如人生  阅读(3236)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示