关于set sql_trace=ture 的一些用法
一, 基本介绍
sql_trace 是Oracle 提供用于进行sql语句追踪的工具。
在全局启用sql_trace会令到所有进程都会被追踪,包括后台进程以及所有用户进程。会导致比较明显的性能下降。所以在production环境一般不使用。
大多数时候我们使用sql_trace 追踪当前进程。前提是当前账号具有alter session的系统权限。
启用命令为alter session set sql_trace=true;
很多时候我们需要跟踪的是其他用户的进程,而不是当前用户(进程),这可以通过Oracle的系统包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成。
SET_SQL_TRACE_IN_SESSION 要求用户提供3个参数:SID, SERIAL#, SQL_TRACE(开关)
Sid: Session identifier # session 的标识符
我们可以通过查看v$session来获得sid,serial#等信息
如上图,可以见到有3个session, 我们尝试跟踪 用户为SCOTT的session
exec dbms_system.set_sql_trace_in_session(sid,serial#,true)如下图 接着去对应session执行一些sql语句其实那个session是在另1台机器用sqldeveloper连接的,如下图
一般来讲,被追踪的数据会存放在这个目录下 $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/
select d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' || p.spid || '.trc' trace_file_namefrom -- spid ( select p.spid from sys.v$mystat m, sys.v$session s, sys.v$process p where m.statistic# = 1 and s.sid = m.sid ——由于连接了sys.v$mystat这里只能搜索当前session的sid and p.addr = s.paddr) p, -- instance name ( select t.instance from sys.v$thread t, sys.v$parameter v where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i, --path ( select value from sys.v$parameter where name = 'user_dump_dest') d /
select d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' || p.spid || '.trc' trace_file_namefrom ( select p.spid from sys.v$session s, sys.v$process p where s.sid = 15 --这里指定sid 在sys.v$session就可以找出其他session的sid 参考2.3 跟踪其他用户的进程 and p.addr = s.paddr) p, ( select t.instance from sys.v$thread t, sys.v$parameter v where v.name = 'thread' --下面只不过保证字符转换数字不会出错 and translate(v.value,'a1234567890.-','a') is null --必须由数字和"."和"-"组成 and translate(v.value,'1.-','1') is not null --去掉"."和"-"后至少1个字符,也就是至少有1个数字啦 and length(v.value) - length(replace(v.value,'.','')) < 2 --"."的个数必须少于2 and (instr(v.value,'-',0)= 0 or ( --没有"-" --或者只有1个"-"字符,而且用"-"开头 (length(v.value) - length(replace(v.value,'-','')) = 1) and substr(v.value,1,1) ='-')) and (v.value = '0' or t.thread# = to_number(v.value))) i, --path ( select value from sys.v$parameter where name = 'user_dump_dest') d /
如上图,得到记录文件
/u01/app/oracle/project/diag/rdbms/orcl/orcl/trace/orcl_ora_15744.trc
命名是有规则的,实列名_ora_对应进程名(pid).trc
打开该文件
会见到如下信息, 会追踪到用户执行的sql语句
关于set sql_trace=ture 的一些用法相关推荐
- oracle看一条sql的trace,SQL_TRACE和10046事件详解
sql_trace和10046事件都是我们在优化sql上面应用的非常多的工具,我们可以使用这两个工具知道当前正在执行的sql究竟在做什么 一,SQL_TRACE: SQL_TRACE命令会将执行的整个 ...
- oracle变态错误解决:ORA-00604: 递归 SQL 级别 2 出现错误
Oracle变态错误: 问题描述: 在使用sys用户执行删除infa用户下表时,报如下错误: ORA-00604: 递归 SQL 级别 2 出现错误 ORA-009 ...
- Js中值的空与非空判断
//判断字符是否为空 function isEmpty(obj){return (typeof obj === 'undefined' || obj === null || obj === " ...
- PHP--isset()和unset()函数的用法
isset (PHP 3, PHP 4, PHP 5 ) isset -- 检测变量是否设置 描述 bool isset ( mixed var [, mixed var [, ...]]) 如果 v ...
- java语言中if语句的基本语法_java中if语句有哪些形式和用法
形式一:if语句 if语句是指如果满足某种条件,就进行某种处理.例如,小明妈妈跟小明说"如果你考试得了100分,星期日就带你去游乐场玩".这句话可以通过下面的一段伪代码来描述. 如 ...
- R语言中if else、which、%in%的用法
R中if else.which.%in%的用法 在R学习过程中,遇到了if else.which.%in%,下面分别举例,说明他们的用法. 1.if else if else(test, yes, n ...
- 2!=5 or 0在python中是否正确-python and or用法
and 和 or 是python的两个逻辑运算符,可以使用and , or来进行多个条件内容的判断.下面通过代码简单说明下and or的用法: 1. or:当有一个条件为真时,该条件即为真.逻辑图如下 ...
- python语言怎么用-python语言中with as的用法使用详解
With语句是什么? 有一些任务,可能事先需要设置,事后做清理工作.对于这种场景,Python的with语句提供了一种非常方便的处理方式.一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取 ...
- jQuery 表单验证插件,jQuery Validation Engine用法详解
jQuery 表单验证插件,jQuery Validation Engine用法详解 功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身 ...
最新文章
- 使用虚拟机运行Ubuntu时,主机与宿主机共享文件的方法。
- escape()、encodeURI()、encodeURIComponent()区别详解
- jvm_虚拟机参数讲解(三)
- Prism Training Kit 4.0
- React Native ScrollableTabView的自定义tabBar
- 【树链剖分】Milk Visits G(luogu 5838)
- MATLAB矩阵对称旋转
- 企业运维经典面试题汇总(4)
- jmap 文件解析_jvm系列:dump文件深度分析
- 《墨子》 —— 兼爱与非攻
- ANDROID框架揭秘
- 教你如何快速查询快递物流,并自动识别已签收单号
- 局域网,城域网,广域网和互联网
- Java知识点_类锁和对象锁的区别?
- 漫画:设计模式六大原则(上)
- php 微信模拟登陆给用户发送消息(文字,图片,图文)
- 厉害了我的琴!钢琴教育竟然用上了AI+云计算?
- html图片轮播加上切换按钮,轮播图(点击按钮切换)
- 摄像头实时视频网页播放
- Codeforces E. Game With String