分享

如何跟踪某应用下发生的sql操作细节

 wghbeyond 2011-03-14
如何跟踪某应用下发生的sql操作细节

这几天对一个自己不熟悉的应用程序,写调试脚本,我知道这个应用程序只是个壳,里头都是调用的存储过程或sql,但没有设计文档,无法知道内部都是怎么调用的,都做了些什么操作,所以只好一步步跟踪了,记录了跟踪流程,供自己日后参考。

1、找出应用的sid和serial#

SQL> select sid,serial# from v$session where lower(program) like '%isap_client%';

       SID    SERIAL#
---------- ----------
        78       1703

SQL>

2、开始跟踪

SQL> exec sys.DBMS_SYSTEM.set_sql_trace_in_session(78,1703,true);

PL/SQL procedure successfully completed.

SQL>

3、期间做点关于这个应用的操作(保证和数据库能有交互)

4、停止跟踪,在user_dump_dest目录下会生成跟踪的trace文件

SQL> exec sys.DBMS_SYSTEM.set_sql_trace_in_session(78,1703,false);

PL/SQL procedure successfully completed.

SQL>

5、找出并进入user_dump_dest目录,最后生成那个文件就是要用的trace文件

SQL> set lines 1024
SQL> show parameter user_dump_dest

NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
user_dump_dest                       string                           /opt/oracle/db01/app/oracle/ad
                                                                      min/ORCL/udump
SQL> exit

$ cd /opt/oracle/db01/app/oracle/admin/ORCL/udump
$ ls -otr | tail -1
-rw-r-----   1 oracle    576097 Jan 8 16:15 orcl_ora_24884.trc
$

6、使用tkprof格式化trace文件,sys=no的意思是不查看sys用户的操作,看了也没啥用

$ tkprof orcl_ora_24884.trc report.txt sys=no

TKPROF: Release 9.2.0.4.0 - Production on Tue Jan 8 16:19:35 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

$

7、查看格式化后的文件report.txt,里头就有跟踪期间发生的所有存储过程(存储过程中执行的sql操作也会逐条显示)和sql操作,还有各sql执行的统计数据,可以了解哪些sql快,哪些慢了

$ more report.txt

8、也可以使用tkprof格式化时使用insert参数生成sql文件

$ tkprof orcl_ora_24884.trc report.txt insert=insert.sql           

TKPROF: Release 9.2.0.4.0 - Production on Tue Jan 8 16:21:56 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.             

$

9、执行生成的sql文件并提交,会把应用执行生成的sql信息插入到刚建立的tkprof_table表里,如果先前有过类似操作,则先drop掉tkprof_table表

SQL> drop table tkprof_table;

Table dropped.

SQL> @insert.sql

。。。

SQL> commit;

Commit complete.

SQL>

10、查看tkprof_table数据,但里头没有存储过程的信息,user_id<>0意思是不查看sys用户下发生的操作,看了也没用

SQL> select sql_statement from tkprof_table where user_id<>0;

可惜无法查看到各个绑定变量的具体值,如果还需要知道各参数或绑定变量的信息,可能只得通过LogMnr来分析归档日志和redolog了

--END--

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多