xzero 2019-07-08
今天发现业务突然停了,查看数据库日志提示无法扩展undo空间,发现了一个很奇怪的现象,下面记录一下解决的过程。
环境:Oracle11.2.0.4 RAC
一般看到这种就是UNDO空间不够了,但是为什么会不够呢?我给的UNDO也有60G了,这种情况直接加UNDO不太现实,下面继续看下
2、观察数据库表空间情况
--查看表空间使用情况 SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(G)", free / (1024 * 1024 * 1024) "表空间剩余大小(G)", (total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", round((total - free) / total, 4) * 100 "使用率 %" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;
奇怪的现象来了,可以发现只有一个UNDOTBS2,没有UDNOTBS1,莫非是有人删除了?
检查数据库默认UNDO,理论上应该UNDOTBS1的
可以发现默认的UNDO变成了UNDOTBS2.
select file_id,file_name,tablespace_name from dba_data_files; select tablespace_name,status from dba_tablespaces;
可以看到UNDO表空间都是正常的。
show parameter name; show parameter undo;
可以看到也没有异常
select distinct(tablespace_name) from dba_free_space;
发现问题了,这里可以看到RAC1 RAC2看到的内容是不一致的。
应该是UNDO没有空间了或者无法扩展会导致 dba_free_space看不到。
因为之前调整为54000秒,应该是这段时间的UNDO表空间一直撑满导致,调整为5个小时看看。
SQL> ALTER SYSTEM SET undo_retention=18300 SCOPE=BOTH;
可以看到这时候可以发现UNDOTBS1了。
这里主要用亲身经历告诉大家这么一个情况:存在表空间不存在于dba_free_space 中(可能是因为表空间过大已爆掉)。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~