备注:
Oracle 11.2.0.4

文章目录

  • 一. 需求
  • 二. 解决方案
    • 2.1 清理过期数据
    • 2.2 收缩表空间
    • 2.3 清理表碎片
    • 2.4 直接把相关的表drop掉
    • 2.5 把该表空间下其它的表移出此表空间
    • 2.6 查看压缩的空间

一. 需求

近期有一个日志库,占用了比较多的空间,需要将历史的清理,然后收缩空间。

如下图所示,4T的空间已经差不多用完。

二. 解决方案

首先想到的是清理掉超过半年的数据,然后resize 表空间。

2.1 清理过期数据

因为业务的表是 tablename_yearmonth格式,例如 log_202204,每个月一个表,所以直接进行truncate即可。

找到大表:

select t.segment_name,t.BYTES/1024/1024/1024 GB,t.segment_type
from user_segments t
where t.segment_type in ('TABLE','TABLE PARTITION')
order by nvl(t.BYTES/1024/1024/1024,0) desc;

truncate 大表:

select  'truncate table '|| t.TABLE_NAME ||';'from user_tables twhere t.TABLE_NAME  like 'LOG%';

2.2 收缩表空间

select a.tablespace_name,
a.file_name,
a.totalsize as totalsize_MB,
b.freesize as freesize_MB,
'ALTER DATABASE DATAFILE ''' || a.file_name || ''' RESIZE ' ||
round((a.totalsize - b.freesize) + 200) || 'M;' as "alter datafile"
from (select a.file_name,
a.file_id,
a.tablespace_name,
a.bytes / 1024 / 1024 as totalsize
from dba_data_files a) a,
(select b.tablespace_name,
b.file_id,
sum(b.bytes / 1024 / 1024) as freesize
from dba_free_space b
group by b.tablespace_name, b.file_id) b
where a.file_id = b.file_id
and b.freesize > 100
and a.tablespace_name  in ('TBS_LOG_DATA')
order by a.tablespace_name

将上一步的 alter datafile语句拷贝出来执行:
有部分报错:
ORA-03297: file contains used data beyond requested RESIZE value

2.3 清理表碎片

因为我使用的是truncate,理论上不会受高水位的影响,在网上找了几个博客,也是说要降低表的高水位,清理表碎片。

select 'alter table '||t.TABLE_NAME||' enable row movement;','alter table '||t.TABLE_NAME||' shrink space cascade;'from user_tables twhere t.TABLE_NAME like 'LOG%';

清理完碎片之后,重新执行,依旧报错。

2.4 直接把相关的表drop掉

select  'drop table '|| t.TABLE_NAME ||'purge;'from user_tables twhere t.TABLE_NAME  like 'LOG%';

drop掉表之后,重新执行,依旧报错。

2.5 把该表空间下其它的表移出此表空间

万能的itpub上有个博客:
http://blog.itpub.net/15747463/viewspace-767555/

如果空闲的extent如果在文件的中间,此时无法进行resize ,必须把尾部的object drop 然后重建 再resize datafile。

也就是说同时期该用户下其它表的写入,也在这个数据文件下,那么就不能进行resize。

把其它表移动到users表空间:

select 'alter index '||index_NAME||' rebuild tablespace users;' from user_indexes where TABLE_NAME not like 'LOG_%';
select 'alter table '||TABLE_NAME||' move tablespace users;' from user_tables where TABLE_NAME not like 'LOG_%';

再次运行压缩空间,成功

2.6 查看压缩的空间

可以看到一下子多出了2.1T 的空间

收缩空间运行速度还不错,50多个数据文件,几分钟就压缩完成。

Oracle 收缩表空间一例相关推荐

  1. oracle如何收缩表空间,ORACLE收缩表空间

    最近导一个空库到数据库后,发现占用的表空间非常大,执行表收缩(SHRINK SPACE CASCADE)后,发现实际占用的空间不到1%. 但是收缩表空间大小提示错误     ALTER DATABAS ...

  2. oracle如何收缩表空间文件,ORACLE 收缩表空间的数据文件

    方法一: 在实际的应用中经常会遇到TRUNCATE或者DELETE表中的数据后发现表空间并没有将空间进行释放,磁盘空间被告占用感觉空间白白被浪费掉了. 通过下面的SQL语句查看表空间总大小及实用大小, ...

  3. oracle 默认表空间 10g,oracle 10G 收缩表空间

    如果经常在表上执行DML操作,会造成数据库块中数据分布稀疏,浪费大量空间.同时也会影响全表扫描的性能,因为全表扫描需要访问更多的数据块.从oracle10g开始,表可以通过shrink来重组数据使数据 ...

  4. oracle表空间默认增长大小,Oracle 用户表空间查看、修改大小、设置自增长等

    分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: s ...

  5. ORACLE数据库表空间文件在哪6,Oracle表空间数据文件移动

    Oracle表空间数据文件移动 系统:windows oracle:10g 实现把用户表空间中的数据文件从某一个路径移动到里一个路径 一.针对可offline的非系统表空间 本例移动oracle的案例 ...

  6. oracle 查看表空间总量,oracle 查看表空间以及剩余量

    --1.查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...

  7. ORA-01658:oracle创建表空间时指定的UNLIMITED真的是UNLIMITED吗?

    背景介绍 最近,同事说在执行ETL的过程中oracle报错 ORA-01658: unable to create INITIAL extent for segment in tablespace X ...

  8. oracle减小表空间打下,缩小oracle表空间(二)

    通过delete数据,是不能降低hwm.不能释放表空间(一般情况下都是,极端情况下除外),但可以通过drop table tbname.truncate table tbname来释放表空间,而且执行 ...

  9. 更改oracle 表空间大小,更改oracle数据库表空间大小

    Oracle表空间扩展 使用oracle时可能遇到无法通过8192在表空间中扩展错误,原因是数据库的表空间不足. oracle表空间数据文件容量与db_block_size有关,在初始建库时指定DB_ ...

最新文章

  1. java args例子_Spring AOP中使用args表达式的方法示例
  2. Java学习之生成随机数
  3. mysql第四章表单查询样题_查询mysql表单中前10条,然后在li中循环输出。
  4. ASP.NET的五大数据控件分析
  5. 方立勋_30天掌握JavaWeb_自己编写jdbc框架、dbutils框架(未完)
  6. asp.net listview 单元格文字颜色_Excel – 如何批量修改单元格中部分关键字的字体颜色?...
  7. 欧拉线性筛 与 欧拉函数 + 几道例题
  8. java获取网卡正真的mac_java获取网卡的mac地址
  9. 【C++实现python字符串函数库】strip、lstrip、rstrip方法
  10. (附源码)APP+springboot订餐APP 毕业设计 190711
  11. C语言面试题---结构体
  12. JavaScript自动切换并播放视频 | Tampermonkey
  13. [信息论与编码理论专题-6]:物理层信道编码
  14. 计算机桌面没有cdef,如何解决电脑CDEF盘都打不开出现“该文件没有程序与之关联来执行该操作”的问题...
  15. 李喆:程序员到底怎么了
  16. 浅谈Inventor2023-实用功能大揭秘~
  17. (Ynoi2015) 纵使日薄西山 题解
  18. 2018Java校招面试题目合集
  19. jasig cas java示例_单点登录cas jasig学习笔记
  20. Ant自动构建JavaWeb

热门文章

  1. 游戏开发中的问题-----摘自《大型多人在线游戏开发》
  2. 09.PATH变量、PS1变量、LANG语系变量、位置参数变量、预定义变量详解
  3. 【H.264】SPS 解析
  4. 达特茅斯计算机专业师资力量如何,达特茅斯学院本科计算机专业怎么样?
  5. Scard API 智能卡操作
  6. lighttpd+flash+PHP大文件上传,带上传进度显示
  7. 爱立信联手日本软银在东京进行5G测试
  8. 赢得阵亡将士纪念日的十大怪异项目
  9. BIOS知识枝桠——HII
  10. 音视频技术开发周刊 | 232