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;

image

步骤:

1)设置跟踪

(1.1)当前session级设置跟踪

在当前session级设置,启用当前session的跟踪:

SQL> alter session set SQL_TRACE=true;

(如果没有权限,登陆system执行GRANT ALTER SESSION TO 用户名;)

Session altered.

 

此时的SQL操作将被跟踪:

......

结束跟踪:

SQL> alter session set SQL_TRACE=false;

Session altered.

 

(1.2)跟踪用户或进程

1.2.1)获得进程信息,选择需要跟踪的进程,查询对于的sid,serial#,:

SQL> select sid,serial#,USERNAME,MACHINE,PROGRAM from v$session;

-----------这句sql查询使用session

-----------真实情况下根据指定用户、终端机、运行程序查询,如:

SQL>select sid,serial#,USERNAME,MACHINE,PROGRAM from v$session where username='HK9999';

-----------查找用户为HK9999的session状况

image

-----------找到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='用户名';

你可能感兴趣的:(oracle,sql抓取)