Oracle表空间满清理方案汇总分享

news2024/11/26 0:28:19

 

目录

 

前言思考

一、第一种增加表空间的数据文件数量达到总容量的提升

二、第二种解决方案针对system和sysaux的操作

2.1SYSTEM表空间优化

2.2sysaux表空间回收

2.2.1针对sysaux的表空间爆满还有第二套方案维护

三、第三种解决方案使用alter tablespace resize更改表空间的数据文件的容量;

​编辑


前言思考

 刚接触Oracle的项目时候,发现我们业务系统的oracle使用3年了,各个表空间都使用快爆满了。经过一段时间的研究分享两套解决方案给大家,首先分两种表空间的扩容和回收。

表空间的分类

第一种表空间是系统自带的表空间system和sysaux,每个表空间的作用和说明,可以翻阅Oracle的官方文档。第二种表空间是我们业务系统创建的表空间用于存放数据的了,比如HS_RISK_DATAHS_INFO_IDX等,是使用数据存储时候表空间会自动增加和扩容。

表空间的扩容和回收

第一种解决方案是在磁盘还有一定量的空间情况下面增加表空间的数据文件,让表空间的数据总量增大。因为增加表空间的数据文件是占磁盘存储量。针对SYSTEM,SYSAUX和HS_RISK_DATA、HS_INFO_IDX的表空间都适用,并且每日的数据都会双向写入表空。

第二种解决方案针对系统自带表空间system和sysaux的操作,针对system的表空间是减少用到的SM/AWR组件表使用空间,使用truncate对表空间收缩,针对sysaux的表空间爆满是删除AWR数据,在通过Move操作回收表的水平线,在重建表的索引。

针对sysaux的表空间爆满还有第三套方案:删除EM相关的内容统计信息,AWR快照、审计信息等。利用SQL语句找出快照最小最大的ID进行删除快照。

第三种解决方案在磁盘空间充沛的情况下面,使用alter tablespace resize更改表空间的数据文件的容量。最好每次增加的容量在1g-2g之间,因为一下增加太多,系统磁盘空间需要划分更多存储空间过去,并且耗费时间。

实验环节展示一下三种扩容方案

实验环境配置:centos6.9, Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

一、第一种增加表空间的数据文件数量达到总容量的提升

使用下列SQL语句查询表空间使用率和空闲率(注保证磁盘存储空间足够多,每增一个数据文件会占据存储空间值)。

SELECT UPPER(F.TABLESPACE_NAME)                                                                 "表空间名",
       D.TOT_GROOTTE_MB                                                                         "表空间大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES                                                         "已使用空间(M)",
       TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') "使用比",
       F.TOTAL_BYTES                                                                            "空闲空间(M)",
       F.MAX_BYTES                                                                              "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
             ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
             ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
      FROM SYS.DBA_FREE_SPACE
      GROUP BY TABLESPACE_NAME) F,
     (SELECT DD.TABLESPACE_NAME,
             ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
      FROM SYS.DBA_DATA_FILES DD
      GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;

记录一下没增加数据文件之前的参数值。待会增加以后表空间使用比会降下来

使用SQL语句查询表空间的数据文件存放的位置。

--查询表空间各个数据文件路径
select   tablespace_name,   file_id,   file_name,   
round(bytes/(1024*1024*1024),0)   total_space   
from   dba_data_files   
order   by   tablespace_name; 

使用SQL在表空间存放在位置添加数据文件,注意按照顺序增加,并且size参数后面增加数据文件容量最好是按照Gb增加,避免增加过多数据文件。并且自动满后扩展到8Gb接触限制条件,无限增长了。

--增加表空间数据文件路径
alter tablespace SYSAUX add datafile '/u01/oradata/uatdb/sysaux02.dbf' size 2G autoextend on next 8G maxsize unlimited;
alter tablespace SYSTEM add datafile '/u01/oradata/uatdb/system02.dbf' size 2G autoextend on next 8G maxsize unlimited;
alter tablespace HS_HIS_DATA add datafile '/u01/oradata/uatdb/hisdat02.dbf' size 2G autoextend on next 8G maxsize unlimited;
alter tablespace HS_HIS_IDX add datafile '/u01/oradata/uatdb/hisidx02.dbf' size 2G autoextend on next 8G maxsize unlimited;

增加表空间的数据文件以后,在使用SQL查询之后,表空间的数据文件会增加一个。

再次查询总的表空间容量参数之后,表空间使用比会降低。表空间容量会上涨了。不管是系统表空间还是业务表空间都得到缓解了。

centos6.9系统中设置oracle中表空间的配置文件的路径也会随着数据文件增加,容量上涨。

二、第二种解决方案针对system和sysaux的操作

2.1SYSTEM表空间优化

  首先我们先用SQL语句查询SYSTEM和SYSAUX用了多少表空间。基本上都快爆满了,sysaux占据97.22%,system占据97.03%记得这个数值。后期优化时候,这个数值会下来

SELECT occupant_name "Item", 
         space_usage_kbytes / 1048576 "Space Used (GB)", 
        schema_name "Schema", 
          move_procedure "Move Procedure" 
     FROM v$sysaux_occupants 
     where occupant_name='SM/AWR';
     
SELECT * FROM ( 
  SELECT D.TABLESPACE_NAME, 
          SPACE || 'M' "SUM_SPACE(M)", 
          BLOCKS "SUM_BLOCKS", 
          SPACE - NVL (FREE_SPACE, 0) || 'M' "USED_SPACE(M)", 
          ROUND ( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) || '%' 
             "USED_RATE(%)", 
          FREE_SPACE || 'M' "FREE_SPACE(M)" 
     FROM (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                    SUM (BLOCKS) BLOCKS 
               FROM DBA_DATA_FILES 
           GROUP BY TABLESPACE_NAME) D, 
          (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE 
               FROM DBA_FREE_SPACE 
           GROUP BY TABLESPACE_NAME) F 
    WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
   UNION ALL                                                           
   SELECT D.TABLESPACE_NAME, 
          SPACE || 'M' "SUM_SPACE(M)", 
          BLOCKS SUM_BLOCKS, 
          USED_SPACE || 'M' "USED_SPACE(M)", 
          ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) || '%' "USED_RATE(%)", 
          NVL (FREE_SPACE, 0) || 'M' "FREE_SPACE(M)" 
     FROM (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE, 
                    SUM (BLOCKS) BLOCKS 
               FROM DBA_TEMP_FILES 
           GROUP BY TABLESPACE_NAME) D, 
          (  SELECT TABLESPACE_NAME, 
                    ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE, 
                    ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE 
               FROM V$TEMP_SPACE_HEADER 
           GROUP BY TABLESPACE_NAME) F 
    WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) 
   ORDER BY 1)  
   WHERE TABLESPACE_NAME IN ('SYSAUX','SYSTEM'); 

下面查看下使用SYSTEM和SYSAUX表空间的比较大的表有哪些。

  可见,大表大部分都是AUD$和WRH$开头的AWR基表,AUD$使用SYSTEM表空间,AWR的基表使用SYSAUX表空间,下面再查看下SYSAUX表空间的使用情况,可以通过v$sysaux_occupants视图查询到。

可见AUD组件就使用了将近6GB的SYSAUX表空间,也就是说审计和AWR占用了大量的SYSTEM和SYSAUX表空间,而这些数据是可以定期清理的,都没有必要保留太长的时间。
下面先清理审计的数据,如果要保留部分AUD$里面记录的审计数据,可以把想要的数据插入到一张临时表,然后直接truncate这张表就可以了,truncate操作会直接回收AUD$占用的空间。

truncate操作(需要用SYSDBA权限来执行)

执行完truncate操作后,system的表空间会降低很多。因为大部分AUD$里面记录的审计数据会删除掉

2.2sysaux表空间回收

可见SM/AWR组件就使用了将近6GB的SYSAUX表空间,也就是说审计和AWR占用了大量的SYSAUX表空间。

下面再来回收下SYSAUX表空间,这个相对比较麻烦,也比较耗时。
  如上文所示,通过查看v$sysaux_occupants视图,可以确定占用SYSAUX表空间过多的大部分都是AWR的基表,这样只要删除部分AWR数据理论上就可以回收一部分SYSAUX表空间,通常AWR的数据都会设置保留期限,10g版本默认保留7天,11g版本默认保留8天,可以通过dba_hist_wr_control视图来查看(注:并不是所有DBA开头的表都是数据字典,也有很多是视图,

        大家可能会有疑问了,AWR的数据既然只保留七八天,为什么还会占用这么多的SYSAUX表空间呢?这个问题我个人认为主要有以下两个原因,首先,AWR删除过期的数据是通过DELETE操作完成的,这样就会产生大量的碎片,特别是SYSAUX表空间存在自动扩展的数据文件,而且这个数据文件没有扩展到最大,还有扩展的空间情况下会很明显,其次就是ASH的数据有些情况下是不受AWR的保留策略影响的,这个从下面的SQL就可以看出。

可以看到,ASH的数据从第一个快照开始一直都在保留,导致WRH$_ACTIVE_SESSION_HISTORY表很大,使用DBMS_WORKLOAD_REPOSITORY包清理过期或者不需要的AWR数据,可以回收这部分空间。(注意SQL语句中snap_id的最高值,一定根据自己筛查出来的结果定值。)

清理了AWR数据之后,你会发现SYSAUX表空间的空间并没有被回收,使用率还和之前一样,这是因为清理AWR操作是通过DELETE操作实现的,表的水位线并没有下降导致的。下面通过MOVE操作回收这个表的水位线,来回收这部分被删除数据占用的空间。

注意PARTITION_NAME中的取值范围,不能单纯复制粘贴,注意我的结尾880025_0

下面按照分区进行MOVE操作,来回收空间

对分区表进行MOVE之后,需要重建索引,查看这个表的索引信息。

 再次查看,WRH$_ACTIVE_SESSION_HISTORY的空间已经回收。

回收表空间WRH$_ACTIVE_SESSION_HISTORY后,总体的SYSAUX的表空间下降些许。原来是95.02%

 通过v$sysaux_occupants视图,可以查询到AWR占用空间由之前的将近6GB降为了不到5GB。按照同样的方法,回收下WRH$_EVENT_HISTOGRAM表的空间在通过回收下WRH$_EVENT_HISTOGRAM表的空间(下图1是找到WRH$_EVENT_HISTOGRAM所在索引)

同样的方法回收表空间,在进行重铸索引。

回收下WRH$_EVENT_HISTOGRAM表的空间,剩下的SYSAUX表空间数据

2.2.1针对sysaux的表空间爆满还有第二套方案维护

 SYSAUX表空间做为SYSTEM表空间的辅助表空间,主要存放EM相关的内容以及表统计信息,AWR快照,审计信息等。修改统计信息的保持时间,默认为31天,这里修改为7天,过期的统计信息会自动被删除。

修改AWR快照的保存的参数(我这里没有执行成功,可能被某个Oracle参数限制住了)

---修改AWR快照的保存时间为7天(72460),每小时收集一次
begin 
  dbms_workload_repository.modify_snapshot_settings ( 
  interval => 60, 
  retention => 10080, 
  topnsql => 100 
  ); 

查询最最小和最大快照ID:(楼上我操作删除快一次快照,到22513,现在最小的快照值为22514开始

通过执行下图的SQL语句,按照快照最小,最大值来进行删除

三、第三种解决方案使用alter tablespace resize更改表空间的数据文件的容量;

先查询表空间里面有多少的数据文件值,知道数据文件的名字

通过下列语句,可以看到每个表空间的数据文件容量为多少了。

 select a.file# as "数据文件id",
       a.name as "数据文件路径",
       a.bytes / 1024 / 1024 as "当前数据文件大小(MB)",
       ceil(HWM * a.block_size) / 1024 / 1024 as "可调整至大小(MB)",
       (a.bytes - HWM * a.block_size) / 1024 / 1024 AS "释放空间大小(MB)",
       'alter database datafile ''' || a.name || ''' resize ' ||
       ceil(ceil(HWM * a.block_size) / 1024 / 1024) || 'M;' as "SQL语句"
  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 * a.block_size) > 0
   and rownum < 30
 order by "释放空间大小(MB)" desc
 

筛查一个表空间的数据文件增加容量到2GB

执行结束,验证表空间的额数据文件已经增加到2GB的容量。

以上是我总结的三种扩容表空间的方法。感谢JiekeXu_DBA,IT邦德老师,还有无数DBA的工程支持。

参考文献:

https://www.cnblogs.com/yaenli/p/16662103.html

oracle system和sysaux表空间清理和回收_oracle system表空间清理-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1580268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML转EXE工具(HTML App Build)永久免费版:24.4.9.0

最新版本的HTML2EXE即将发布了。自从去年发布了HTML2EXE之后&#xff0c;我就正式上班了&#xff0c;一直忙于工作&#xff0c;实在没有时间更新&#xff08;上班时间不能做&#xff09;&#xff0c;很多网友下载使用&#xff0c;反应很好&#xff0c;提出了一些改进的建议&…

Tomcat项目部署spring mvc项目,压测出现的问题

Tomcat项目部署spring mvc项目&#xff0c;压测出现的问题 项目部署&#xff1a;docker部署时候设置的内存是80G&#xff0c;JVM堆内存的初始堆和最大堆设置的内存都是64G 1、压测的时候&#xff0c;并发1000&#xff0c;循环1次 日志显示&#xff1a;堆内存溢出 2、排查出…

蓝桥杯单片机之PCF8591的使用

下文仅仅讲怎么使用。 本文章参考&#xff1a; 【蓝桥杯】PCF8591 A/D D/A转换应用_pcf8591中输出电压2v怎么表示-CSDN博客 蓝桥杯电子类单片机学习三——PCF8591 AD/DA转化器&#xff0c;AT24C02 EEPROM存储器&#xff08;iic驱动&#xff09;_蓝桥杯da转换输出的是什么-CS…

dg_mmld部分复现

Ours ( K ˆ \^{K} Kˆ2)复现结果– Photo&#xff1a;0.9634730538922156 (at Epoch 23) Art&#xff1a;0.8125 (at Epoch 23) Cartoon&#xff1a;0.7713310580204779 (at Epoch 18) 差距在可接受范围内 辅助信息 If you send 作者 an e-mail, 作者 will tell you a URL w…

C/C++中const关键字用法总结

C基础专栏&#xff1a;http://t.csdnimg.cn/4FdOH 目录 1.引言 2.修饰变量 2.1.修饰普通变量 2.2.修饰指针 2.3.修饰对象 3.修饰函数形参 4.修饰函数返回值 5.修饰类成员函数 6.const与constexpr区别 7.总结 1.引言 在面试的过程&#xff0c;面试官经常都会问到const…

arm-linux-gnueabihf-gcc默认目录

默认编译的头文件目录&#xff1a; /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib 默认编译的库文件目录&#xff1a; /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/include/ …

[C++]哈希应用之位图布隆过滤器

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;c大冒险 总有光环在陨落&#xff0c;总有新星在闪烁 前言&#xff1a; 我们之前…

Hadoop安装部署-NameNode高可用版

Hadoop分布式文件系统支持NameNode的高可用性&#xff0c;本文主要描述NameNode多节点高可用性的安装部署。 如上所示&#xff0c;Hadoop分布式文件系统部署了NameNode的Master主节点以及NameNode的Slave副节点&#xff0c;当Master主节点发生故障变得不可用时&#xff0c;ZooK…

Vulnhub:DEVCONTAINER: 1

目录 信息收集 arp nmap nikto whatweb WEB 信息收集 dirmap 文件上传 提权 系统信息收集 横向提权 信息泄露 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:50:56:2f:dd…

Windows Server 2008添加Web服务器(IIS)、WebDAV服务、网络负载均衡

一、Windows Server 2008添加Web服务器&#xff08;IIS&#xff09; &#xff08;1&#xff09;添加角色&#xff0c;搭建web服务器&#xff08;IIS&#xff09; &#xff08;2&#xff09;添加网站&#xff0c;关闭默认网页&#xff0c;添加默认文档 在客户端浏览器输入服务器…

无需训练,这个新方法实现了生成图像尺寸、分辨率自由

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 近日&#xff0c;来自香港中文大学 - 商汤科技联合实验室等机构的研究者们提出了FouriScale&…

蓝桥杯-外卖店优先级

代码及其解析 #include<bits/stdc.h> using namespace std; const int N100010;int order[N]; //order[id] 第id号店上一次的订单,记录的是时间 int prior[N]; //prior[id] 第id号店的优先级 int flag[N]; //flag[id] 第id号店在不在优先缓存中struct node{int…

有关栈的算法

例题一 解法&#xff08;栈&#xff09;&#xff1a; 算法思路&#xff1a; 本题极像我们玩过的「开⼼消消乐」游戏&#xff0c;仔细观察消除过程&#xff0c;可以发现本题与我们之前做过的「括号匹配」问题是类似的。当前元素是否被消除&#xff0c;需要知道上⼀个元素的信息…

YOLOv8分类识别训练配置详细

目标&#xff1a; 实现自己的图像分类算法模型训练&#xff0c;应用。 掌握数据集配置方式&#xff1b; 掌握训练、预测命令语句 掌握训练结果分析 学习内容&#xff1a; 1.图像分类数据集配置方式 例如&#xff1a; 制作一个表情分类数据集。 # 0 - 6 文件夹分别label为&…

notion的使用心得

从老石的视频知道了notion是一个很强大的管理工具&#xff1a;这就是最棒的效率软件&#xff01;如果不是&#xff0c;我倒想试试你的 | Notion使用技巧分享_哔哩哔哩_bilibili 我一时半会不能全部学会&#xff0c;但是借用大家的好模板&#xff1a;如何用5分钟搭建简洁高效的…

ideaSSM 网上选课管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 网上选课管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

在短视频的挤压下,长视频何去何从?长视频行业能否借助AI重拾信心?

回顾2019年中国网络视听大会&#xff0c;长视频行业的领袖们曾在演讲中对短视频进行了猛烈抨击&#xff0c;这一场面至今仍然令人印象深刻。当时&#xff0c;长视频平台似乎还有一些自信&#xff0c;但如今&#xff0c;他们已经被来自各方的竞争对手挤得喘不过气来。今年以来&a…

软件分层测试的5大注意事项

软件分层测试作为软件测试的常见测试方法&#xff0c;有利于提高测试精度和效率&#xff0c;及早发现和解决产品缺陷和问题&#xff0c;提高了产品的质量和效率&#xff0c;降低了测试成本。如果不对软件进行分层测试&#xff0c;不利于缺陷的尽早发现和改正&#xff0c;可能会…

蓝桥杯-油漆面积

代码及其解析:(AC80%&#xff09; 思路:是把平面划成单位边长为1&#xff08;面积也是1&#xff09;的方格。每读入一个矩形&#xff0c;就把它覆盖的方格标注为已覆盖&#xff1b;对所有矩形都这样处理&#xff0c;最后统计被覆盖的方格数量即可。编码极其简单&#xff0c;但…

【鸿蒙开发】if/else条件渲染,ForEach循环渲染

if/else 使用规则 支持if、else和else if语句。if、else if后跟随的条件语句可以使用状态变量。允许在容器组件内使用&#xff0c;通过条件渲染语句构建不同的子组件。条件渲染语句在涉及到组件的父子关系时是“透明”的&#xff0c;当父组件和子组件之间存在一个或多个if语句…