news 2026/9/18 12:06:27

oradebug

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oradebug

oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,
如SMON、PMON进程,也可以通过进程号使进程挂起和恢复等,还有很多功能,实际上这些功能都不常用,
但是我们在看别人做问题诊断时,常看到别人在使用oradebug命令,
其实我感觉最好用的就是他可以直接通过命令输出生成trace文件的名称(带路径的哦),省去不少麻烦,
系统HANG住用它做分析也比较好用,和大家分享一下它最常用的方法!
1> oradebug有哪些可用命令?
以sysdba身份登陆数据库,通过oradebug help可以看到oradebug常用命令
sqlplus / as sysdba
oradebug help
2> 跟踪当前会话信息
oradebug setmypid --跟踪当前会话
oradebug setospid 7819 --跟踪系统进程
oradebug setorapid --跟踪ORACLE进程
oradebug unlimit --取消trace文件大小限制
oradebug tracefile_name --查看trace文件名及位置



3> 用oradebug做session级10046或10053
oradebug setmypid
oradebug unlimit
oradebug session_event 10046 trace name context forever ,level 4 --启用会话级10046
oradebug event 10046 trace name context off --关闭10046事件
oradebug tracefile_name --查看tracefile文件位置及文件名
4> 用oradebug做oracle process级10046

oradebug setospid 391118
oradebug unlimit
oradebug event 10046 trace name context forever ,level 12
oradebug event 10046 trace name context off
oradebug tracefile_name


oradebug setmypid

oradebug setospid 177636
oradebug unlimit
alter session set events '10053 trace name context forever, level 1';
ALTER SYSTEM SET EVENTS '10053 trace name context off';
oradebug tracefile_name




5> oradebug系统hang住原因分析
如果系统HANG住,只要sys用户可以登陆,那么用oradebug做原因分析是非常有用的
oradebug setmypid
oradebug unlimit
oradebug setinst all --RAC环境
oradebug hanganalyze 3 -- 级别一般指定为3足够了
oradebug -g def dump systemstate 10 --RAC环境
oradebug tracefile_name
6> 获取某进程的状态信息
oradebug setospid 25241
oradebug dump processstate 10
oradebug tracefile_name
7> 获取进程错误信息状态
oradebug setospid 10515
oradebug dump errorstack 3
8> 追踪造成错误信息的原因,如ORA-04031
oradebug event 4031 trace name errorstack level 3

oradebug event 4031 trace name errorstack level 3

设置trace 文件名字:
alter session set tracefile_identifier="STACK_10224";

alter system set events '24247 trace name errorstack forever,level 3';
alter system set events '24247 trace name errorstack off';

alter system set events='12537 trace name errorstack forever,level 10';
alter system set events '12537 trace name errorstack off';


alter system set events '1658 trace name context forever, level 12';
alter system set events '1658 trace name context off';

alter system set events '10053 trace name context forever, level 1';
alter system set events '10053 trace name context off';

oradebug tracefile_name

oradebug setospid 345932
oradebug unlimit
oradebug session_event 10046 trace name context forever ,level 12 ;
oradebug event 10046 trace name context off ;
oradebug tracefile_name

oradebug setorapid 5342
oradebug unlimit
oradebug session_event 10046 trace name context forever ,level 12 --启用会话级10046
oradebug event 10046 trace name context off --关闭10046事件
oradebug tracefile_name

oradebug setospid 3976
oradebug unlimit
alter session set events '10053 trace name context forever, level 1';
ALTER SYSTEM SET EVENTS '10053 trace name context off';
oradebug tracefile_name

sqlplus '/ as sysdba'
oradebug setmypid
oradebug unlimit
oradebug hanganalyze 3
-- Wait one minute before getting the second hanganalyze
oradebug hanganalyze 3
oradebug tracefile_name
exit

Systemstate:
sqlplus -prelim / as sysdba
sqlplus /nolog
set _prelim on
connect / as sysdba

sqlplus / as sysdba
oradebug setmypid
oradebug unlimit
oradebug dump systemstate 266
oradebug dump systemstate 266
oradebug tracefile_name
exit

awk -f ass109.awk /data/oracle/diag/rdbms/XXXXX/trace/t03mes_ora_128468.trc
/data/oracle/diag/rdbms/XXXXX/trace/gmes01_ora_11912.trc

sqlplus '/ as sysdba'
oradebug setorapname reco
oradebug unlimit
oradebug -g all hanganalyze 3
oradebug -g all hanganalyze 3
oradebug -g all dump systemstate 266
oradebug -g all dump systemstate 266
exit

sqlplus '/ as sysdba'
oradebug setorapname reco
oradebug unlimit
oradebug -g all hanganalyze 3
oradebug -g all hanganalyze 3
oradebug -g all dump systemstate 258
oradebug -g all dump systemstate 258
exit


--systemstate dump
sqlplus -prelim / as sysdba
oradebug setmypid
oradebug unlimit;
oradebug dump systemstate 266;
--wait for 1 min
oradebug dump systemstate 266;
--wait for 1 min
oradebug dump systemstate 266;
oradebug tracefile_name;

--hanganalyze
oradebug setmypid
oradebug unlimit;
oradebug dump hanganalyze 3
--wait for 1 min
oradebug dump hanganalyze 3
--wait for 1 min
oradebug dump hanganalyze 3
oradebug tracefile_name

跟踪某个特定的SQL ID
Oracle 11g以后的版本,可以通过以下的方法来跟踪某个特定的SQL ID。

--启用10046Trace
alter system set events 'sql_trace[sql: <sql_id> | <sql_id> | <sql_id> ]';
--禁用10046Trace
alter system set events 'sql_trace[sql: <sql_id> | <sql_id> | <sql_id> ] off';



具体取得方法对某个<SQL_ID:sql:gcaxax8tgmjvt>进行跟踪:

SQL> alter session set tracefile_identifier='10046';
SQL> alter session set max_dump_file_size = unlimited;
---启用Trace
SQL> ALTER SESSION SET EVENTS 'sql_trace [sql:gcaxax8tgmjvt] bind=true,wait=true';
SQL> --<操作执行> --
---停止Trace
SQL> ALTER SESSION SET EVENTS 'sql_trace [sql:gcaxax8tgmjvt] off';
对多个SQL ID如<SQL_ID:sql:gcaxax8tgmjvt>进行跟踪:

SQL> alter session set tracefile_identifier='10046';
SQL> alter session set max_dump_file_size = unlimited;
---启用Trace
SQL> ALTER SESSION SET EVENTS 'sql_trace [sql:gcaxax8tgmjvt| g2mjrzx0w5ysv ]';
SQL> --<操作执行> --
---停止Trace
SQL> ALTER SESSION SET EVENTS 'sql_trace[sql:gcaxax8tgmjvt| g2mjrzx0w5ysv ] off';


取得特定SQL ID的Optimizer Trace(10053)
在11gR1以后的版本中,可以针对某个特定SQL ID硬解析时取得Optimizer Trace(10053 Trace)。
具体取得方法如下。

对某个硬解析SQL进行跟踪
对某个硬解析SQL进行跟踪的方法如下。

SQL> alter session set tracefile_identifier='10053';
SQL> alter session set max_dump_file_size = unlimited;

---启用Trace
SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*][sql:<SQL_ID>]';

SQL> --<<执行分析对象的SQL文>> --

---停止Trace
SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*] off';
对多个硬解析SQL进行跟踪
对多个硬解析SQL进行跟踪的方法如下。

SQL> alter session set tracefile_identifier='10053'; SQL> alter session set max_dump_file_size = unlimited;
---启用Trace
SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*][sql:<SQL_ID1>|
<SQL_ID2>]';

SQL> --<<分析对象的SQL文>> --

---停止Trace
SQL> ALTER SESSION SET EVENTS 'trace[rdbms.SQL_Optimizer.*] off';
其中的SQL_ID1替换为相应的SQL ID。例如:

SQL> alter system set events 'trace[sql_optimizer.*] [sql: gcaxax8tgmjvt]';
SQL> alter system set events 'trace[sql_optimizer.*] [sql: gcaxax8tgmjvt | g2mjrzx0w5ysv ]';


select * from table(DBMS_XPLAN.DISPLAY_CURSOR(SQL_ID=>'&sqlid', cursor_child_no =>0,format=>'ALL'));

--3.生成Optimizer Trace(10053)
SQL>

exec DBMS_SQLDIAG.DUMP_TRACE( P_SQL_ID => '426928qu93cf4', P_CHILD_NUMBER => 0, P_COMPONENT => 'Compiler', P_FILE_ID => 'TRACE_10053');
user_dump_dest

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 12:06:04

达梦DM8迁移实战:DTS从Oracle导数据全流程与避坑指南

1. 从Oracle迁到达梦&#xff0c;第一课就是别再手工建表国产化替代这两年&#xff0c;我经手最多的活就是从Oracle、MySQL往达梦DM8迁数据。一开始我还特别天真&#xff0c;想着手工在达梦里把表建好&#xff0c;再把源库数据导出成CSV导进去。头几个小表确实糊弄过去了&#…

作者头像 李华
网站建设 2026/9/18 12:06:02

系统提示词工程化:从 system prompts 泄露到线上稳定实践

做 AI 应用这两年&#xff0c;我收藏夹里躺得最久的一类资料&#xff0c;不是论文&#xff0c;也不是某个框架的官方文档&#xff0c;而是各种被扒出来的system prompts。leaks 这个词在这些讨论里出现频率极高&#xff0c;原因也很简单&#xff1a;系统提示词本来是产品团队和…

作者头像 李华
网站建设 2026/9/18 12:05:59

有源RIS提升MISO系统能量效率的联合优化方法

1. 项目概述&#xff1a;为什么有源RIS突然成了MISO系统能量效率的“破局点”最近三个月&#xff0c;我连续帮三个做无线通信方向的硕士生调试RIS相关仿真&#xff0c;发现一个特别有意思的现象&#xff1a;几乎所有人在初版模型里都默认用无源RIS&#xff08;Passive RIS&…

作者头像 李华
网站建设 2026/9/18 12:04:57

C语言没有引用传递:指针传参的本质是值传递

1. 项目概述&#xff1a;C语言里根本没有“引用传递”&#xff0c;但人人都在说它你刚学C语言时&#xff0c;是不是也听过老师或教程里反复强调&#xff1a;“函数参数传递有两种方式——值传递和引用传递”&#xff1f;我第一次听到这句话时&#xff0c;正对着翁恺老师那本《C…

作者头像 李华
网站建设 2026/9/18 12:01:42

SQL Server 2017安装实战指南:离线部署、安全配置与生产就绪调优

1. 为什么现在还要装 SQL Server 2017&#xff1f;——不是怀旧&#xff0c;是现实约束下的理性选择很多人看到“SQL Server 2017”第一反应是&#xff1a;都2024年了&#xff0c;怎么还在用七年前的版本&#xff1f;是不是落伍了&#xff1f;我得先说清楚&#xff1a;这不是技…

作者头像 李华
网站建设 2026/9/18 12:00:14

编译原理学习:文法与语言,形式化是构建编译器的基石

编译原理学习笔记02&#xff1a;文法与语言&#xff0c;为什么说“形式化”是一切的起点如果你正在啃编译原理&#xff0c;或者刚被词法分析实验折磨过&#xff0c;那么“文法”和“语言”这两个词你一定不陌生。很多同学在这块就开始犯迷糊&#xff1a;文法不就是一堆产生式嘛…

作者头像 李华