创建表时显示表不存在(面试官有没碰过在dba)

概述

今天发现业务突然停了,查看数据库日志提示无法扩展undo空间,发现了一个很奇怪的现象,下面记录一下解决的过程。

环境:Oracle11.2.0.4 RAC


1、查看告警日志提示

创建表时显示表不存在(面试官有没碰过在dba)(1)

一般看到这种就是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;

创建表时显示表不存在(面试官有没碰过在dba)(2)

奇怪的现象来了,可以发现只有一个UNDOTBS2,没有UDNOTBS1,莫非是有人删除了?


3、查看默认UNDO

检查数据库默认UNDO,理论上应该UNDOTBS1的

创建表时显示表不存在(面试官有没碰过在dba)(3)

可以发现默认的UNDO变成了UNDOTBS2.


4、检查undo表空间

select file_id,file_name,tablespace_name from dba_data_files; select tablespace_name,status from dba_tablespaces;

可以看到UNDO表空间都是正常的。

创建表时显示表不存在(面试官有没碰过在dba)(4)

创建表时显示表不存在(面试官有没碰过在dba)(5)


5、检查两个实例的UNDO情况

show parameter name; show parameter undo;

创建表时显示表不存在(面试官有没碰过在dba)(6)

创建表时显示表不存在(面试官有没碰过在dba)(7)

可以看到也没有异常


6、查看dba_free_space情况

select distinct(tablespace_name) from dba_free_space;

发现问题了,这里可以看到RAC1 RAC2看到的内容是不一致的。

创建表时显示表不存在(面试官有没碰过在dba)(8)

创建表时显示表不存在(面试官有没碰过在dba)(9)

应该是UNDO没有空间了或者无法扩展会导致 dba_free_space看不到。


7、调整undo时间

因为之前调整为54000秒,应该是这段时间的UNDO表空间一直撑满导致,调整为5个小时看看。

SQL> ALTER SYSTEM SET undo_retention=18300 SCOPE=BOTH;

创建表时显示表不存在(面试官有没碰过在dba)(10)


8、查看undo情况

可以看到这时候可以发现UNDOTBS1了。

创建表时显示表不存在(面试官有没碰过在dba)(11)


这里主要用亲身经历告诉大家这么一个情况:存在表空间不存在于dba_free_space 中(可能是因为表空间过大已爆掉)。后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

创建表时显示表不存在(面试官有没碰过在dba)(12)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。