oracle sql抓取1
本文:摘引在http://blog.sina.com.cn/s/blog_45722cc00100ysod.html
在数据库引用时,有时业务很复杂,相关表经常变更;
或者业务报表出错,相关sql无法的得知;
那么sql的抓起将成为问题解决的关键第一步,也是自学业务的关键方法。
抓取某一用户当前运行sql语句,有两种方法,一种是通过sql_trace,另一种是查v$sql(或v$sqltext,v$sqlarea)
一、通过sql_trace查询
这是一种sql监控的最好方法,可以根据指定用户、终端机、运行程序查询。
而这些信息来源于v$session的USERNAME,MACHINE,PROGRAM列
如:
select sid,serial#,USERNAME,MACHINE,PROGRAM from v$session;
———–找到sid,serial#,是35和10317
1.2.2)设置启动跟踪(使用SYS登录运行)
SQL> exec dbms_system.set_SQL_TRACE_in_session(35,10317,true);
PL/SQL procedure successfully completed….
可以等候片刻,跟踪session执行任务,捕获sql操作…
….
1.2.3)停止跟踪(使用SYS登录运行)
SQL> exec dbms_system.set_SQL_TRACE_in_session(35,10317,false);
PL/SQL procedure successfully completed
2)查看服务器上trc文件方法
trc文件放置在udump文件夹中,可以执行SQL>show parameter user_dump_dest 查看具体的路径。
SQL> show parameter user_dump_dest
NAME TYPE VALUE
———————————— ———– ——————————
user_dump_dest string c:\oracle\admin\hisorcl\udump
SQL>
oracle自带的tkprof工具可以方便转换trc文件可读
执行tkprof
c:\oracle\admin\hisorcl\udump\orcl_ora_2968.trc d:\xe_ora_out.txt
2.通过v$sql查询
这种方法只适于查询阻塞或等待的sql
v$sql记录sharepool中的sql语句,利用其可以获取其它session当前正在执行的sql语句(或状态为waiting)
select * from
v$sql sq,v$session se
where sq.address=se.sql_address
and se.state=’WAITING’ and se.username=’用户名’;
转载于:https://blog.51cto.com/cswggod/1183209
本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。