Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Oracle数据库揭露问题本质的利器 - errorstack

Oracle数据库揭露问题本质的利器 - errorstack

作者头像
bisal
发布于 2023-12-30 00:20:50
发布于 2023-12-30 00:20:50
20800
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter system set events '28000 trace name errorstack level 4';
System altered.

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的罪魁祸首了,下一步操作,就是找到他,锤他。。。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter system set events '28000 trace name errorstack off';
System altered.

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
创建PDB的两种操作
之前介绍的PDB都是通过配置文件在数据库初始化的时候就装上了,如果要在一个Oracle 19c已有的CDB上创建PDB,主要有两种方式。
bisal
2021/11/08
1.7K0
归档问题导致的数据库无法启动 (80天)
本地有一个小的环境,今天照例登上sqlplus,突然发现报了如下的错误。一看原来归档满了。我记得前几天做一个批量操作临时把temp文件resize了很大,限于本地空间有限。准备改回去。把多余的归档删除了。 sqlplus n1/n1 .... ERROR: ORA-00257: archiver error. Connect internal only, until freed. 这个时候sysdba的权限发挥作用了,它可以照常登录。然后开始做resize操作。 SQL> alter database
jeanron100
2018/03/14
1.1K0
寻找SQL执行线索的武器库
碰到一些SQL问题,有时常规的方式,例如执行计划,不足以给出问题的线索。因此,可能还需要跟踪这条SQL,通过Oracle提供的trace,了解它内部执行的机制,从中寻找线索。
bisal
2023/03/07
7120
寻找SQL执行线索的武器库
如何彻底删除Oracle数据库,以创建相同实例名称的库
今天建库时选择了OMF方式,结果文件名称采用Oracle自动命名的方式,看不懂啊,于是乎决定删除再重建。 Oracle提供了删除数据库的指令:drop database。 需要数据库处于mount状态,然后alter system enable restricted session;,网上有帖子说还需要exclusive,由于我是VM装的,用户只有我一个,所以不用可以。由于当前处于open状态,需要改为mount,执行: SQL> alter database close; alter database close * ERROR at line 1: ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected 原因是有个session仍连接,退出后再次执行, SQL> alter database close; Database altered. SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> alter system enable restricted session; System altered. SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> drop database; Database dropped. 此时alert.log记录信息: Create Relation ADR_CONTROL Create Relation ADR_INVALIDATION Create Relation INC_METER_IMPT_DEF Create Relation INC_METER_PK_IMPTS USER (ospid: 8748): terminating the instance Instance terminated by USER, pid = 8748 Deleted Oracle managed file /opt/app/ora11g/oradata/BISAL/controlfile/o1_mf_9x4fgq77_.ctl Deleted Oracle managed file /opt/app/ora11g/flash_recovery_area/BISAL/controlfile/o1_mf_9x4fgypb_.ctl Completed: drop database Shutting down instance (abort) License high water mark = 2 Fri Jul 25 19:09:26 2014 Instance shutdown complete 到oradata路径下看已经没有任何文件了,那么认为这个数据库已经被删除。 但再次执行dbca,企图创建相同实例的库时报错:
bisal
2019/01/29
3.6K0
一条sql语句“导致”的数据库宕机问题及分析 (38天)
最近测试环境需要做一些变更,把测试环境切分成两套环境,存储空间也需要压缩压缩和整理。 unix组的人已经开始做空间划分了,然后我们需要在此基础上重建一套环境。 有些数据文件使用空间不大,所以准备压缩一下。 用了下面的sql语句,结果跑了十几秒中就抛了下面的错误。 SQL> set linesize 200 SQL> col name for a40 SQL> col resizecmd for a80 SQL> select a.file#,a.name,a.bytes/1024/1024 CurrentM
jeanron100
2018/03/13
8410
启用 Oracle 10046 调试事件
    Oracle 10046是一个Oracle内部事件。最常用的是在Session级别设置sql_trace(alter session set sql_trace=true)即是开启了级别为1的10046调试事件。当设置了10046事件之后,Oracle 将产生一个dump文件。通过得到的dump文件进行进一步分析,可以得到Oracle 内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着举足轻重的作用。
Leshami
2018/08/14
7310
Oracle9i新特点:SPFILE的使用--How to set events with spfile and etc
本文发表于itpub技术丛书《Oracle数据库DBA专题技术精粹》,未经许可,严禁转载本文.
数据和云01
2018/09/10
5430
ORA-28000: the account is locked的解决办法
在plsql developer中以scott/tiger登录时提示ora-28000 the account is locked。 新装完Oracle10g后,用scott/tiger测试,会出现以下错误提示:         oracle10g the account is locked         oracle10g the password has expired 原因:默认Oracle10g的scott不能登陆 第一种解决办法: 第一步:使用PL/SQL,登录名为system,数据库名称
Java学习123
2018/05/16
1.3K0
关于oracle中session跟踪的总结(56天)
数据库中的session在操作中可能会有各种各样的问题,比如一条sql语句执行失败,某一个应用在一些特定的场景下就会有一些性能问题等等,有时候在代码层去做一些debug来说肯定是不实际的,而且也不一定能够迅速的排查问题,对于session的监控显得尤为重要。可以灵活的开启和关闭,在数据库层面,session层面,甚至特定的应用层面都能够进行监控,今天和大家分享一下对于的session监控常用的一些方法。 1.dbms_system.set_sql_trace_in_session 可以对其他的session
jeanron100
2018/03/13
1.2K0
【DB笔试面试688】在Oracle中,跟踪会话执行语句的方法有哪几种?
因为TRACE的目标范围不同,所以导致必须使用不同的方法。若作用于数据库全局的,则改初始化参数。若只作用于当前会话的,则就用ALTER SESSION命令。若作用于其它会话的,则就用DBMS_SYSTEM包。
AiDBA宝典
2019/11/15
1.1K0
【基础知识】ORACLE数据库错误概述
ORACLE数据库表示的错误,通常由3个字母加上5个数字来组成,如:ORA-nnnnn,TNS-nnnnn等,其中:
SQLplusDB
2020/03/26
8830
ORA-00349|激活 ADG 备库时遇到的问题
近日有一套实时同步的 ASM 管理的单机 11204 ADG 备库,由于业务需要,想要脱离主库的约束,想激活拉成读写库直接升级成 ASM 管理的 19C,闪回快照模式无法满足要求,只能 ALTER DATABASE ACTIVATE STANDBY DATABASE 强制切成可读写的主库。说干就干,先将其切成主库,升级过程等下次在一起讨论。
JiekeXu之路
2021/03/15
7240
ORA-00349|激活 ADG 备库时遇到的问题
Oracle数据库冷备份与热备份操作梳理
Oracle数据库的备份方式有冷备份和热备份两种,针对这两种备份的实施过程记录如下: 一、Oracle冷备份 概念 数据库在关闭状态下完成所有物理系统文件拷贝的过程,也称脱机备份。 适合于非归档模式(即noarchivelog模式,SCN保持一致)下,数据库处于一致性状态。 冷备份,数据库可以处于归档模式也可以处于非归档模式,最好是处于非归档模式。 步骤 首先在运行的库中得到数据库运行的所有的物理文件位置,然后在计划内关闭数据库(shutdown) 再执行拷贝物理文家到备份路径或备份设备 备份完成后立即启
洗尽了浮华
2018/01/23
4.9K0
回答了这四个问题,少踩12c 多租户的好多坑
在ACOUG的年终大会上,我分享了一个主题,列举了使用Oracle 12c多租户的过程中可能遇到的各种坑,当你使用一个新产品或者新特性时,如果你不了解,就可能是使用中,陷入其中。 首先我们已经知道,Oracle 12c的多租户特性,允许在一个容器数据库中,创建多个PDB,这些PDB彼此隔离和独立,但是依赖CDB而存在。 问题一:PDB丢失一个文件数据库会如何? 现在请大家思考一个问题:如果某个PDB中,因为意外而丢失了一个数据文件,那么数据库会怎样? 目前我们涉及的版本包括:12.1.0.1.0 ,12.1
数据和云
2018/03/07
1.2K0
回答了这四个问题,少踩12c 多租户的好多坑
Oracle基础维护01-常用管理命令总结
此时,sga和pga自动调整,sga_target最小为4M,pga_aggregate_target最小为1M;
Alfred Zhao
2019/05/24
4550
Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
作者 孟庆辉 沃趣科技数据库工程师 当数据库出现严重的性能问题或者hang了的时候,我们非常需要通过systemstate dump来知道进程在做什么,在等待什么,谁是资源的持有者,谁阻塞了别人。 在出现上述问题时,及时收集systemstate dump非常有助于问题原因的分析。 systemstate dump级别简介: 1. 级别2:dump(不包括lock element) 2. 级别10:dump 3. 级别11:dump+global cache of rac 4. 级别256:short s
沃趣科技
2018/03/26
1.3K0
Oracle数据库性能障碍分析利器:SYSTEMSTATE DUMP介绍
Oracle创建主键的三种方式
从trace我们能看到,对T_PK_02加了share模式锁,指定nowait,先创建的约束,然后创建了唯一索引,
bisal
2021/03/20
1.7K0
停止数据库没有响应的问题分析(r9笔记第51天)
昨天写了一篇停库没有响应的问题分析,其实对于我来说,还是有些不太踏实,里面有几点需要改进。 因为是测试环境,所以操作的时候就随意了一些,如果是生产环境,直接kill进程是很不规范的。对于启库停库的时间把握,只是感觉有延迟,但是延迟究竟有多大还是不够严谨;问题的原因最后没有给出很清晰的答案,主要是因为后面自己没有经过大量的测试,所以这个地方还是不够严谨。 我们来继续分析一下。 目前的问题可以简化为两个:停库慢,启库慢。 我们来逐个击破。 首先是停库慢,shutdown immediate之后,就没有任何反应了
jeanron100
2018/03/19
1.2K0
在Oracle中,数据库块的结构有哪几个部分?
操作系统块是操作系统读写的最小操作单元,也是操作系统文件的属性之一。当创建一个Oracle数据库时,选择一个基于操作系统块的整数倍大小作为Oracle数据库块的大小。Oracle数据库读写操作则是以Oracle块为最小单位,而非操作系统块。
AiDBA宝典
2023/04/27
1.3K0
在Oracle中,数据库块的结构有哪几个部分?
SYSAUX表空间管理及恢复
SYSAUX表空间是在10g之后引入的一个新的表空间,主要用于减轻对SYSTEM表空间的压力而作为SYSTEM表空间的辅助表空间。
Leshami
2018/08/07
9620
推荐阅读
相关推荐
创建PDB的两种操作
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验