system表空间不足的问题分析

很多事情见多了也就有了麻木的感觉,报警短信就是如此,每天总能收到不少的报警短信,可能很多时候就扫一眼,如果没有严重的问题自己是不会情愿打开电脑处理的。
对于此,有些朋友说是不是阀值太低了,调高一些报警就少了,如果那样做,监控的意义也就大大不同了。很多时候硬件错误或者系统错误不是突然出现问题,而是在一些异常的情况下运行,时间长了,难免出错,打个比方,如果两个配置一模一样的系统,一个内核参数有问题,资源使用有异常,总是CPU满负荷空跑,产生了大量的IO浪费,而另外一台,就是真正的空闲,负载不高,各项指标正常,那么在时间的检验下,负载高的服务器出错的概率就要大的多,可能CPU坏掉,磁盘坏掉。这种情况其实就不是偶然而是必然了。
对于报警短信,我的理念就是既然设定了一个相对统一的阀值,那么对于OLTP和OLAP的系统都应该基本遵守这个规则,既然它报出了那么多的错误,那肯定后台在进行什么样的操作,有什么改进的地方,或者潜在的问题,目前根据我的实践,绝大多数的报警信息中,如果抓住某一条报警信息去分析,都能或多或少分析出点东西来,有些是资源使用不合理,有些是sql语句的问题,有些是历史遗留问题,有些甚至正在酝酿成为大问题。
分析了,解决了,报警短信就会少一些,这样工作量也会大大减少。如果单纯为了提高阀值而减少报警,那也是自欺欺人。
我可以举个例子来佐证。
比如一条常规的报警短信,提示表空间不足。
收到的报警短信内容如下:
监控项目: showtsps:-->TS_NAME:SYSTEM :10% Free 
------------------------------------ 
报警时间:2015.09.21-04:32:49

这个信息充分说明SYSTEM表空间不足了,需要扩充。
而查看表空间的使用情况,发现系统表空间确实只剩余26M了,空间使用算是非常紧张了。
Tablespace          Total MB    Free MB     Used MB 
-------------------- --- - - ---- ------------ ---------- ------

SYSAUX             1,040         78         962 
SYSTEM           29,530       26      29,504
TEMP                 29            28           1
UNDOTBS1       3,315      3,241          74
USERS              5,963        285       5,678
对于这类问题,一般的思路就是扩充表空间,当前表空间已经试29G左右了。再扩充,这个数据文件还能再扩几个G。
但是反过来想,系统表空间怎么会消耗这么多的空间呢,就算一个库再大,数据字典的信息也多不了太多,而且还有SYSAUX的辅助,不至于那么紧张。
空间都消耗在哪儿了呢,第一个反应就是可能其他的用户创建了一些临时表,由于没有遵守规则导致表数据都放在了SYSTEM表空间里。
但是查看之后,欣慰的是不是这个问题导致的。
那么空间的消耗从哪儿来呢,一个最直接的思想就是审计日志。
在11g的库中,审计的级别默认是DB会产生不少的审计日志信息,那么这些信息主要存放在哪儿呢,就是au$里面。
这是一个基表,很多审计相关的视图,数据字典都会参考这个基表。
SEGMENT_TYPE       SIZE_MB SEGMENT_NAME
--------------- ---------- ------------------------------
TABLE                28785 AUD$

结果一看还确实,这个表占用了绝大多数的系统表空间。
那么处理方法似乎就很简单了。直接清理掉这个基表即可。
思路很简单,但是这是在线应用,我还是希望自己能够佐证一些,如果为了调优结果造成了系统故障就是得不偿失了。
首先查看清理aud$这个基表是否有一些bug,结果还真查到一个。Deadlock Problem On Sys.Aud$ Table. (文档 ID 1199416.1),仔细查看之后发现这个问题的版本要早一些,
问题已经在新的版本修复,所以这个问题目前不大可能出现在我目前的环境中,那么接着查看是否有一些官方的说法呢。
How to Truncate, Delete, or Purge Rows from the Audit Trail Table AUD$ (文档 ID 73408.1)

对于清理这个基表,思路还是很简单,简单的评估检查之后,最关键的还是运行truncate table au$.
查看了官方文档,自己也有底了,当然这部分审计信息需要确认为不需要的。因为目前还没有定制更多的审计级别和审计信息。

SQL> truncate table aud$;
Table truncated.

这个时候再次查看空间使用情况,其实system表空间使用了总共720M,剩下的空间都得到了释放。

Tablespace    Total MB    Free MB     Used MB 
-------------------- --- - - ---- ------------ ---------- ------

SYSAUX             1,040         78         962        
SYSTEM           29,530     28,811   720     
TEMP                 29            28           1                
UNDOTBS1       3,315      3,241          74      
USERS              5,963        285       5,678       

这样这个问题就基本修复了,至少在很长的一段时间里都不会在有类似的问题。
都说前人栽树后人乘凉,我还是不希望成为前人埋雷后人踩,毕竟这种问题摊到自己身上还是很郁闷的。

时间: 2024-10-10 15:38:54

system表空间不足的问题分析的相关文章

system表空间不足的问题分析(二)

今天收到一条不太起眼的报警邮件,大体内容是某个表空间的空间有些紧张了.大体内容如下:Tablesapce: CMBI_SNZG_DATA: 92.2%  [Warning!] 根据这个信息,很明显是需要添加数据文件了,但是同时还有一个警告就是磁盘空间也告警了,那么这个看起来简单的问题得好好琢磨琢磨了,其实是几件事,一件是做一些数据清理,释放部分表空间,甚至可以通过释放数据文件的空间来进一步释放磁盘空间,第二件是给表空间告警的表空间添加数据文件. 首先查看数据库中的用户占有的数据量的情况,可以看到

探索ORACLE之RMAN_07 system表空间丢失恢复

探索ORACLE之RMAN_07 system表空间丢失恢复 作者:吴伟龙   Name:Prodence Woo QQ:286507175  msn:hapy-wuweilong@hotmail.com     1.     SYSTEM表空间数据文件丢失恢复 注意:以下的所有实验,都是基于上面的全库备份来做的恢复. 3.1 删除system表空间的所有数据文件. [oracle@wwldb WWL]$ rm -rf syste* [oracle@wwldb WWL]$ exit   3.2

详解Oracle的SYSTEM表空间的管理及备份恢复

SYSTEM表空间是Oracle数据库最重要的一个表空间,存放了一些DDL语言产生的信息以及PL/SQL包.视图.函数.过程等,称之为数据字典,因此该表空间也具有其特殊性,下面描述SYSTEM表空间的相关特性及备份与恢复.   一.SYSTEM表空间的管理 1.建议不存放用户数据,避免用户错误导致系统表空间不可用 应当为系统设定缺省的默认表空间来避免用户创建时使用系统表空间 ALTER DATABASE DEFAULT TABLESPACE tablespace_name SQL> col pr

SYSTEM 表空间管理及备份恢复

--============================= -- SYSTEM 表空间管理及备份恢复 --=============================       SYSTEM表空间是Oracle数据库最重要的一个表空间,存放了一些DDL语言产生的信息以及PL/SQL包.视图.函数.过程等,称之为数据字典, 因此该表空间也具有其特殊性,下面描述SYSTEM表空间的相关特性及备份与恢复.        一.SYSTEM表空间的管理     1.建议不存放用户数据,避免用户错误导致

System表空间不足的报警问题浅析

废话不多说了,具体代码如下所示: --SYSTEM表空间不足的报警 登录之后,查询,发现是sys.aud$占的地方太多. SQL> select owner, segment_name, segment_type, sum(bytes)/1024/1024 space_m from dba_segments where tablespace_name = 'SYSTEM' group by owner, segment_name, segment_type having sum(bytes)/1

oracle11g system表空间老是爆满

问题描述 oracle11g system表空间老是爆满 oracle11g system表空间老是爆满,不知道什么原因,求教 解决方案 oracle11g 可传输表空间

在mount状态下恢复数据文件system表空间

数据字典(包含数据库本身以及存储的所有对象的基本信息)存放在SYSTEM表空间中.当数据库处于open状态时,如果system表空间所对应的数据文件出现介质失败,当在其数据文件上进行IO时操作时,数据库会自己关闭:当数据库处于关闭状态时,如果system表空间所对应的数据文件出现介质失败,数据库将不能打开.打开时会出现如下错误: ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件ORA-01110: 数据文件 1: 'F:\APP\YANG\ORADATA\ORAC

temp 表空间无法扩展 案例分析

http://happay99.blog.hexun.com/40831530_d.html 解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程  执行一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段.这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展. 分析过程:    既然是temp表空间有问题,那当然就要从temp表空间说起啦.

DB2数据库表空间重定向恢复实例分析

一.发出重定向恢复命令 DB2 RESTORE DB OLDDB FROM "C:\OLDDBbak" TAKEN AT 20150717164847 TO "C:" INTO NEWDB REDIRECT 其中,OLDDB是旧数据库.备份的数据库名称,NEWDB是新数据库名称,不用事先创建也可以,C:\OLDDBbak是备份文件放置的目录,20150717164847是 备份文件的时间戳,具体可看备份文件的名字OLDDB.0.DB2.NODE0000.CATN00