数据库学习日常案例20231228-oracle报错定位errstackORA-28000的errorstack,

1 概述信息

朋友咨询了一个问题,"Oracle停了所有应用的情况下(还有一个zabbix连接数据库),有一个用户被锁了,通过locked_date看是昨天晚上10:05锁的,然后今天早上解锁后也是10:05分锁住的,期间应用也没启动过,从监听日志看只有zabbix在连,没有失败的连接,从数据库看没有job,也没有触发器。这个用户锁住的问题还有哪个方向排查?数据库里面还有别的东西需要排查的呢?"

其实之前也曾问过一些大佬相近的问题,我们看到的可能都是问题表象,重要的是能定位到根因,抓住本质,才能找到合适的解决方案。

图片

图片

定位根因的途径可能有很多,对Oracle来说,errorstack是其中之一。以定位产生ORA-28000用户被锁的场景,展示下errorstack的强大。

全局开启针对ORA-28000的errorstack,

SQL> alter system set events '28000 trace name errorstack level 4';System altered.

通过客户端,用错误的密码,创造出ORA-28000的场景,

图片

此时从alert.log看到这条信息,说明已经捕获ORA-28000的错误,并且记录到BISALCDB_ora_9061.trc的trace文件中,​​​​​​​

BISALPDB1(3):Errors in file /opt/oracle/diag/rdbms/bisalcdb/BISALCDB/trace/BISALCDB_ora_9061.trc:ORA-28000: The account is locked.

trace文件的内容很多,4.3M,但是只需要找些关键的信息,就可以满足我们的需求,找到client details,可以看到导致出现ORA-28000错误的客户端是机器名叫"test-computer"的电脑,登录机器的用户名叫test,应用程序是DBeaver。现在就基本明确了导致出现ORA-28000的罪魁祸首了,下一步操作,就是找到他,锤他。。。​​​​​​​

service name: bisalpdb1    client details:      O/S info: user: test, term: unknown, ospid: 1234      machine: test-computer program: DBeaver 7?3?2 ? Main      application name: DBeaver 7?3?2 ? Main, hash value=2195501301

记得关闭errorstack,​​​​​​​

SQL> alter system set events '28000 trace name errorstack off';System altered.

Oracle的errorstack就像应用程序中加了断点调试,可以让我们很方便的找到一些问题的线索,如果有兴趣,可以关注下trace文件,记录了很多调用的堆栈信息,可以挖掘更多。

对众多的国产数据库来说,这种问题诊断的工具,是很值得借鉴的,无论是数据库本身还是数据库的使用者,都可能出现错误,但如果能提供一些暴露数据库内部执行的手段,就会有助于找到问题根因,解决这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值