如何生成其他会话的10046?

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 如何生成其他会话的10046?

如何生成其他会话的10046?

微信群有朋友问,

如何生成其他会话的10046?

对于本地session的10046事件trace,可以使用以下两种方法,

alter session set events ‘10046 trace name context forever, level 12’;
oradebug event 10046 trace name context forever, level 12;

但是生产环境,可能一般用户,没有执行10046的权限,这就需要其他用户执行,来获得10046的trace日志,主要有两种方法,一是使用oradebug,二是使用DBMS_SYSTEM程序包。

方法一:使用oradebug

可以参考《How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues (Doc ID 376442.1)》。

这里有两个概念,

SPID is the operating system Process identifier (os pid) PID is the Oracle Process identifier (ora pid)

步骤一:如果使用oradebug,需要SPID作为参数。

获取会话SPID,可以有两种场景。

场景1:知道需要获取10046的会话session id

  1. 获取当前session id,SID值是132,

SQL select sid from v$mystat where rownum = 1;

       SID ----------        132

  1. 另一个会话执行输入132,就可以知道会话132的SPID值是29457,

SQL select p.PID,p.SPID,s.SID   2  from v$process p,v$session s   3  where s.paddr = p.addr   4  and s.sid = &SESSION_ID   5  / Enter value for session_id: 132 old   4: and s.sid = &SESSION_ID new   4: and s.sid = 132

       PID SPID                            SID ---------- ------------------------ ----------        132 29568                           132

场景2:不知道需要获取10046的会话session id

执行以下SQL,就会列出所有的会话信息,含有SPID,帮助你找到目标会话,

SQL select 'ospid: ' || p.spid || ' # ''' ||s.sid||','||s.serial#||''' '||   2    s.osuser || ' ' ||s.machine ||' '||s.username ||' '||s.program line   3  from v$session s , v$process p   4  where p.addr = s.paddr   5  and s.username ' ';

LINE -------------------------------------------------------------------------------- ospid: 29656 # '71,30485' oracle DB SYS sqlplus@DB (TNS V1-V3) ospid: 29568 # '132,9193' oracle DB SYS sqlplus@DB (TNS V1-V3)

步骤二:执行oradebug

有了SPID,就可以执行oradebug指令,

SQL oradebug setospid 29568
Oracle pid: 22, Unix process pid: 29568, image: oracle@DB (TNS V1-V3)

此时可以开启10046,

SQL oradebug event 10046 trace name context forever,level 12
Statement processed.

会话132执行语句,

SQL select * from dual;

D - X

关闭10046事件,

SQL oradebug event 10046 trace name context off Statement processed.

看下trace文件路径和名称,

SQL oradebug tracefile_name /DATA/oracle/u01/app/oracle/diag/rdbms/07/07/trace/07_ora_29568.trc

从07_ora_29568.trc就可以看执行的10046事件,

Received ORADEBUG command (#1) 'event 10046 trace name context forever,level 12' from process 'Unix process pid: 29431, image: none'

... Finished processing ORADEBUG command (#1) 'event 10046 trace name context forever,level 12'

... select * from dual ...

Received ORADEBUG command (#2) 'event 10046 trace name context off' from process 'Unix process pid: 29431, image: none' ... Finished processing ORADEBUG command (#2) 'event 10046 trace name context off'

方法二:使用dbms_system

可以参考《演示使用sql_trace和10046事件对其他会话进行跟踪,并给出trace结果》(https://www.cnblogs.com/Richardzhu/archive/2013/02/05/2893162.html),就不再赘述了,觉得还是第一种比较方便。

如果您觉得本文有帮助,欢迎关注转发:bisal的个人杂货铺,

如何生成其他会话的10046? 如何生成其他会话的10046?
本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 如何生成其他会话的10046?


 上一篇
Oracle的一项“AI“技能介绍 Oracle的一项“AI“技能介绍
Oracle从10g推出了SQL优化器,SQL Tuning Advisor(STA),一条SQL语句执行慢的时候,不知所措的时候,可以看看Oracle的建议,由于这是根据SQL语句、表、索引等信息进行的评估,因此若某些信息不准,
下一篇 
如何使用TTS进行数据复制 如何使用TTS进行数据复制
测试同学有一个需求,需要将应用某一个版本,对应的数据库信息复制一份,通过了解,整理需求如下: 原始数据库IP:10.1.1.1 目标数据库IP:10.1.1.2 将原始数据库的用户USER_A,所有对象(表、索引、序列),复