oracle sql抓取1

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

本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。

© 版权声明

相关文章