千家信息网

在oracle中跟踪会话执行语句的几种方法分别是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这期内容当中小编将会给大家带来有关在oracle中跟踪会话执行语句的几种方法分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。生成sql trace可以有以下
千家信息网最后更新 2026年11月02日在oracle中跟踪会话执行语句的几种方法分别是什么

这期内容当中小编将会给大家带来有关在oracle中跟踪会话执行语句的几种方法分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

生成sql trace可以有以下几种方式:

1、参数设置:非常传统的方法。

系统级别:

参数文件中指定: sql_trace=true

或

SQL> alter system set sql_trace=true;

注意:系统级别启用sql_trace,会产生大量trace文件,很容易耗尽磁盘空间,因此一般设置会话级别,并且及时关闭。

会话级别:

SQL> alter session set sql_trace=true;

SQL> 执行sql

SQL> alter session set sql_trace=false;

启用跟踪后,跟踪文件保存在user_dump_dest下

可以使用下面的查询来找到生成的跟踪文件

SQL> select

2 d.value||'/'||lower(rtrim(i.instance,

3 chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name

4 from ( select p.spid

5 from v$mystat m,

6 v$session s,v$process p

7 where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,

8 ( select t.instance from v$thread t,v$parameter v

9 where v.name = 'thread' and

10 (v.value = 0 or t.thread# = to_number(v.value))) i,

11 ( select value from v$parameter

12 where name = 'user_dump_dest') d

13 /

TRACE_FILE_NAME

--------------------------------------------------------------------------------

/oracle/admin/RLZY/udump/rlzy_ora_721532.trc

也可以给要生成的跟踪文件指定标识符来让你更容易的找到跟文件

SQL> alter session set tracefile_identifier='jingyong';

2、使用10046事件:

10046事件级别:

Lv0 - 禁用sql_trace,等价于sql_trace=false

Lv1 - 启用标准的sql_trace功能,等价于sql_trace=true

Lv4 - Level 1 + 绑定变量值(bind values)

Lv8 - Level 1 + 等待事件跟踪(waits)

Lv12 - Level 1 + Level 4 + Level 8

全局设定:

参数文件中指定: event="10046 trace name context forever,level 12"

或者

SQL> alter system set events '10046 trace name context forever, level 12';

SQL> alter system set events '10046 trace name context off';

注意:系统级别启用sql_trace,会产生大量trace文件,很容易耗尽磁盘空间,因此一般设置会话级别,并且及时关闭。

当前session设定:

SQL> alter session set events '10046 trace name context forever, level 12';

SQL> 执行sql

SQL> alter session set events '10046 trace name context off';

3、dbms_session包:只能跟踪当前会话,不能指定会话。

跟踪当前会话:

SQL> exec dbms_session.set_sql_trace(true);

SQL> 执行sql

SQL> exec dbms_session.set_sql_trace(false);

dbms_session.set_sql_trace相当于alter session set sql_trace,从生成的trace文件可以明确地看

alter session set sql_trace语句。

使用dbms_session.session_trace_enable过程,不仅可以看到等待事件信息还可以看到绑定变量信息,

相当于alter session set events '10046 trace name context forever, level 12';语句从生成的trace文件可以确认。

SQL> exec dbms_session.session_trace_enable(waits=>true,binds=>true);

SQL> 执行sql

SQL> exec dbms_session.session_trace_enable();

4、dbms_support包:不应该使用这种方法,非官方支持。

系统默认没有安装这个包,可以手动执行$ORACLE_HOME/rdbms/admin/bmssupp.sql脚本来创建该包

跟踪当前会话:

SQL> exec dbms_support.start_trace

SQL> 执行sql

SQL> exec dbms_support.stop_trace

跟踪其他会话:等待事件+绑定变量,相当于level 12的10046事件。

SQL> select sid,serial#,username from v$session where ...;

SQL> exec dbms_support.start_trace_in_session(sid=>sid,serial=>serial#,waits=>true,binds=>true);

SQL> exec dbms_support.stop_trace_in_session(sid=>sid,serial=>serial#);

5、dbms_system包:

跟踪其他会话:

使用dbms_system.set_ev设置10046事件

SQL> select sid,serial#,username from v$session where ...;

SQL> exec dbms_system.set_ev(sid,serial#,10046,12,'');

SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'');

但经过测试在10g中使用级别为8,12的跟踪并没有在跟踪文件中生产等待事件信息

6、dbms_monitor包:10g提供,功能非常强大。可在模块级别、动作级别、客户端级别、数据库级别、会话级别进行跟踪。oracle官方支持。

跟踪当前会话:

SQL> exec dbms_monitor.session_trace_enable;

SQL> 执行sql

SQL> exec dbms_monitor.session_trace_disable;

跟踪其他会话:

SQL> exec dbms_monitor.session_trace_enable(session_id=>sid,serial_num=>serial#,waits=>true,binds=>true);

SQL> exec dbms_monitor.session_trace_disable(session_id=>sid,serial_num=>serial#);

7、oradebug

这是sqlplus的工具,需要提供OSPID或者oracle PID。

跟踪当前会话:

SQL> oradebug setmypid;

Statement processed.

SQL> oradebug unlimit;

Statement processed.

SQL> oradebug event 10046 trace name context forever,level 12;

Statement processed.

SQL> 执行sql

SQL> oradebug tracefile_name

SQL> oradebug event 10046 trace name context off;

Statement processed.

跟踪其他会话:

SQL> select spid,pid2 from v$process

2 where addr in (select paddr from v$session where sid=(select distinct sid from v$mystat));

SPID PID

------------ ----------

1457 313

SQL> oradebug setospid 1457;

Statement processed.

或者

SQL> oradebug setorapid 313;

Statement processed.

SQL> oradebug unlimit;

Statement processed.

SQL> oradebug event 10046 trace name context forever,level 12;

Statement processed.

SQL> oradebug tracefile_name

SQL> oradebug event 10046 trace name context off;

Statement processed.

上述就是小编为大家分享的在oracle中跟踪会话执行语句的几种方法分别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

跟踪 级别 文件 事件 生成 方法 语句 系统 信息 参数 中指 内容 功能 变量 磁盘 空间 等价 分析 支持 强大 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 互联网中国科技 深圳互联网络科技有限公司 极限挑战互联网科技 科技创新互联网企业 汇久创客互联网科技 沃里互联网科技 时间互联网络科技 互联网 视角下的科技创新 互联网科技网站 海南购全球互联网科技 安控科技rtu产品工业互联网 成都玖崟互联网科技有限公司乐商圈怎么样 链环科技传统企业怎么转型互联网 乌鲁木齐新华智原互联网科技学校 每天都有哪些好的互联网科技 智帮互联网科技公司最近动向 宇信科技在杭州互联网排第几 易租星互联网科技有限公司 玉溪新华互联网科技怎么选 深圳恒合互联网络科技有限公司 互联网科技小贷 互联网 的科技创新 互联网科技咨询 联恩商钥互联网科技有限公司 爱医互联网络科技 互联网第三次科技革命特征 产业互联网科技服务公司 互联网科技快讯热点 东营紫格互联网科技
0