Oracle故障处理:SYSTEM表空间满了

目录

项目场景:

问题描述

原因分析:

解决方案:


项目场景:

上个周日早晨,我所负责的其中一个项目现场打电话来把我从一场美梦中叫醒。操着一种如果没大事儿肯定给你头干爆的情绪问:怎么了!

然后我同事甩给我一张图片,看微信!

数据库连不上了,你还睡! 


问题描述

  • ORA-01653报错
  • 数据库客户端连接不上
  • 各种涉及该数据库的程序接口全部报错

这是彼时彼刻项目现场的问题情况描述,待在项目现场的是个刚入职不久的新同事,没见过这个报错,着急上火很正常。但作为一个立志要做一个优秀DBA工程师的ETL工程师,私下偷偷卷了下,反应过来“SYSTEM表空间满了”。

于是和新人同事回复:

“莫慌,顶天了就是跑路.....”


原因分析:

原因分析其实很简单,可以从下面几个思路去考虑:

  • SYSTEM表空间满了

SYSTEM表空间中存储的内容是Oracle最重要的核心系统数据,一旦它出了问题,那么整个数据库都会受到影响。这块内容可以参考我的另一篇文章:浅谈Oracle存储管理(一):存储结构 ,这篇文章中有简单提到SYSTEM表空间的相关知识。

  • 审计数据 

这一条原因从本质上来说还是空间资源问题,只不过是直接从审计数据过大导致SYSTEM空间爆满这个方向去思考。Oracle如果开启了审计,审计数据是默认存储到SYSTEM表空间中。审计数据是不断增长的,如果不定期对其进行清理,必然会导致空间爆满。


解决方案:

如果您此时此刻正在经历此故障,可以按照如下步骤进行操作。

  • 第一步

第一步,先救命。通过sqlplus登录故障数据库(此时客户端是肯定不能连接了,但sqlplus可以)。给SYSTEM表空间添加数据文件,这个是最快最有效的解决问题的方法。

查询出数据文件路径

select name from v$datafile;

添加数据文件;数据文件名根据最后一个编号继续添加下去,且路径保持一致。

ALTER TABLESPACE SYSTEM ADD DATAFILE '/u01/app/oracle/oradata/ORCL/system03.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED 

添加完数据文件,ORA-01653报错消失;接口程序恢复正常,客户端正常连接。“这个是最快最有效的解决问题的方法” ,但不是最根本的解决方法。

  • 第二步

添加数据文件不是最根本的解决方法,如果不查明数据暴涨原因,还是会继续发生该问题。SYSTEM表空间是不会用来存储业务数据的。那么引起它空间使用飙升最有可能的原因是审计数据过大。

首先需要先查看数据库是否开启了审计

执行如下命令,如果VALUE显示DB或者XML,则表示开启了审计。如果显示为NONE,则表示未开启审计;那就不是审计数据导致的,需要从其他方面分析原因。

SQL> show parameter audit_trail

NAME              TYPE        VALUE
------------- -----------  -----------
audit_trail      string         DB

在确认开启审计数据后,查看审计数据大小。

SELECT 
ROUND(BYTES/1024/1024/1024,2) AS AUD_SIZE
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'SYSTEM'
AND SEGMENT_NAME = 'AUD$'

 如果发现此时的SYS.AUD$已经占用存储相对很大了,比如SYSTEM表空间总共才32G,它已经占用了10G左右,那么可以对其进行清理了。

TRUNCATE TABLE SYS.AUD$

审计数据是不断生成的,保存太久的审计数据是没有意义的,所以您也可以设置JOB定期进行清除。

  • 第三步 

如果通过第二步发现数据库未开启审计,或者审计数据并不大,此时就需要对SYSTEM表空间下存储的数据进行深入分析。 查看SYSTEM表空间下所有占用存储比较大的对象,再进行具体的分析。

SELECT * FROM
(SELECT 
OWNER,
SEGMENT_NAME,
SEGMENT_TYPE,
ROUND(BYTES/1024/1024/1024,2) AS SEG_SIZE_GB
FROM DBA_SEGMENTS DS
WHERE TABLESPACE_NAME = 'SYSTEM'
ORDER BY BYTES DESC
)WHERE ROWNUM <= 30

总结下来,遇到此故障:

在不知道什么原因导致的情况下,先添加数据文件使数据库恢复正常;

然后进一步分析存储暴涨的原因,从根本上杜绝此问题。

除此之外,平时还是需要做好巡检工作。


明天就是清明假期了,在此希望各位读友能度过一个有意义的清明假期。

缅怀先祖,着眼当下。

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 如果Oracle系统表空间了,需要采取以下措施: 1. 扩展表空间:可以通过增加数据文件或者扩展现有数据文件的方式来扩展表空间。具体操作可以参考Oracle官方文档。 2. 清理表空间:可以通过删除不必要的数据或者归档数据的方式来清理表空间。具体操作可以参考Oracle官方文档。 3. 优化SQL语句:如果表空间是由于SQL语句执行效率低下导致的,可以通过优化SQL语句来减少表空间的使用。 总之,需要根据具体情况采取相应的措施来解决Oracle系统表空间的问题。 ### 回答2: 当出现Oracle系统表空间了的情况时,这意味着该表空间已经无法容纳更多数据或对象。此时,必须采取措施来解决这个问题,否则将会导致系统运行受阻,影响业务正常进行。 在解决这个问题之前,必须先确定具体的原因,常见的原因有: 1. 数据库中某张表或索引过大,导致表空间耗尽。 2. 数据库中的垃圾数据过多,导致系统表空间占用过高。 3. 系统未及时进行归档或备份,导致系统表空间占用过高。 解决这个问题的方法有: 1. 压缩或清理数据:可以通过删除不需要的数据并进行压缩操作,来释放表空间。 2. 迁移数据:将不常用的数据迁移到其他的表空间或其他数据库中。 3. 增加表空间:对于需要频繁插入数据的表,可以增加表空间来解决问题。 4. 增加磁盘空间:在增加表空间之前,可能需要先增加磁盘空间。 5. 增加系统表空间的容量:可以通过对系统表空间进行扩容来解决该问题。 总的来说,当遇到Oracle系统表空间了的问题时,应该先确定原因,然后采取相应的措施来解决问题。同时,为了避免出现这种情况,应该定期对数据库进行清理和备份,以及规范数据库的管理和使用。 ### 回答3: 当Oracle system表空间了时,会影响到数据库的正常运行,因此需要立即采取措施。 首先,可以通过查询表空间使用情况,确定是哪些表或索引导致了系统表空间的占用。可以使用以下语句查询系统表空间使用情况: ``` SELECT * FROM dba_segments WHERE tablespace_name='<system_table_space>' ORDER BY bytes DESC; ``` 查询结果会显示所有在该表空间内的表和索引,以及占用的空间大小。通过这个结果,我们可以找到占用空间最大的表或索引。 接下来,可以采取如下方案来释放系统表空间的空间: 1. 清空回收站 应该检查回收站并清空其中的垃圾。可以使用下面的语句清空回收站: ``` PURGE RECYCLEBIN; ``` 2. 清空日志 从日志中移除不必要的日志,可以减少日志表的空间占用。可以使用以下方式进行: ``` BEGIN SYS.DBMS_LOGMNR.REMOVE_LOGFILE ( LOGFILENAME => 'log_file_name.log' ); END; ``` 注意:log_file_name.log应该替换为需要移除的日志文件名。 3. 移动表 如果表占用大量的空间,可以将其移动到另一个表空间中。可以使用以下命令将表的数据移动到一个新的表空间: ``` ALTER TABLE <table_name> MOVE TABLESPACE <new_table_space>; ``` 注意:table_name是需要移动的表的名字,new_table_space是新的表空间的名字。 4. 压缩索引 可以使用以下命令在不影响查询性能的情况下压缩索引,以减少所占用的空间: ``` ALTER INDEX <index_name> REBUILD TABLESPACE <index_tablespace>; ``` 注意:index_name是需要压缩的索引名称,index_tablespace是新的表空间。 总之,当Oracle system表空间了时,需要检查占用空间最大的表或索引,并采取相应的措施来释放空间。通过上述方法,可以有效地减少系统表空间的占用,确保数据库的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜豆豆耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值