Oracle9i, 10g 如何抓取绑定变量的值

本文介绍了如何通过设置SQL性能诊断事件10046来捕获SQL执行过程中的详细信息,并展示了如何利用V$SQL_BIND_CAPTURE视图获取绑定变量的值,以进行深入的SQL性能分析。

 

1 10046論斷事件

         設置方法:

             全局設置:初始參數文件中設置 event="10046 trace name context forever,level 12"

             本地session設置:alter session set events '10046 trace name context forever, level 8'

             其它session設置:通過DBMS_SYSTEM.SET_EV系統包實現,需要通過v$session得到sid,serial#

 

           這裡我使用的是本地session設置:

       ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4';

           select object_name from maggie.obj where object_id=:V1;

           運行,為變量V1賦值28221,運行完成

           然後關閉踉蹌事件alter session set events '10046 trace name context off';

           user_dump_file參數指定的目錄下找到生成的udump文件,找到以下結果:

........

*** SESSION ID:(14.27652) 2010-02-11 15:46:33.000

APPNAME mod='TOAD 9.7.2.5' mh=1219114848 act='' ah=4029777240

=====================

PARSING IN CURSOR #3 len=69 dep=0 uid=5 ct=42 lid=5 tim=1039369128939 hv=2562935477 ad='11a9a36c'

ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 4'

END OF STMT

EXEC #3:c=0,e=105,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039369067384

=====================

PARSING IN CURSOR #3 len=55 dep=0 uid=5 ct=3 lid=5 tim=1039372642475 hv=1692422788 ad='1193e4d8'

select object_name from maggie.obj where object_id=:V1

END OF STMT

PARSE #3:c=0,e=176,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039372642463

BINDS #3:

 bind 0: dty=1 mxl=4000(4000) mal=00 scl=00 pre=00 acflg=01 oacfl2=10 size=4000 ffset=0

   bfp=04e9251c bln=4000 avl=05 flg=05

   value="28221"

EXEC #3:c=15625,e=15374,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=1039372676465

FETCH #3:c=0,e=58,p=0,cr=3,cu=0,mis=0,r=1,dep=0,og=4,tim=1039372680531

FETCH #3:c=0,e=3,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=0,tim=1039372685688

 

         我們可以看到V1變量的值為28221

 

           補充:10046事件可以设置以下四个级别,如果要獲取綁定變量的值,至少要設置level 4

                   1 - 標準的SQL_TRACE功能,等價於sql_trace

                   4 - Level 1 加上綁定值(bind values)

                   8 - Level 1 + 等待事件

                   12 - Level 1 + Level 4 + Level 8

 

 

      2 10G裡新增的VIEWV$SQL_BIND_CAPTURE

          運行SQL語句

SELECT   next_station, wip_d_sn_master.ROWID

  FROM   wip_d_sn_master

 WHERE   (serial_number = :V00001 OR carton_no = :V00002) AND ROWNUM = 1;

 

            輸入變量值CK001L296J021YCMI0461000000140000027

          v$sql中找到剛剛運行的這個SQLhash_value:

select sql_id, sql_text, bind_data,HASH_VALUE from v$sql

where sql_text Like 'SELECT   next_station, wip_d_sn_master.ROWID%';

 

          得到的值為476601873,代入v$sql_bind_capture中查找出綁定變量的值

SELECT hash_value,sql_id,NAME,POSITION,DATATYPE_STRING,LAST_CAPTURED,value_string FROM v$sql_bind_capture

WHERE hash_value = 476601873

       

HASH_VALUE SQL_ID NAME POSITION DATATYPE_STRING LAST_CAPTURED VALUE_STRING 

 

476601873 77y45qnf6hrhj :V00001 1 VARCHAR2(4000) 2010-2-11 0:55:25 CK001L296J021Y

476601873 77y45qnf6hrhj :V00002 2 VARCHAR2(4000) 2010-2-11 0:55:25 CMI0461000000140000027

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-629544/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-629544/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值