[20211227]抽取跟踪文件中的绑定变量值.txt --//以前写过一个从跟踪文件抽取sql的脚本,估计也是当时从网上抄来的。 $ cat extractsql.sh #! /bin/bash awk '/PARSING IN CURSOR/,/END OF STMT/' $1 | egrep -v '^PARSING|^END OF STMT' --//尝试自己写一个抽取跟踪文件绑定变量值的脚本。 1.环境: SCOTT@book> @ ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 2.测试建立: variable v_deptno number ; variable v_dname varchar2(20) ; variable v_loc varchar2(20) ; exec :v_deptno :=10; exec :v_dname :=''; exec :v_loc :='aaa123'; SCOTT@book> @10046on 12 Session altered. SCOTT@book> select * from dept where deptno = :v_deptno or dname = :v_dname or loc = :v_loc; DEPTNO DNAME LOC ---------- -------------- ------------- 10 ACCOUNTING NEW YORK SCOTT@book> @10046off Session altered. SCOTT@book> @ ttt tracefile_identifier = /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_12780.trc --//跟踪文件内容如下: ===================== PARSING IN CURSOR #140692216598400 len=79 dep=0 uid=83 oct=3 lid=83 tim=1640575733992020 hv=588998677 ad='7d57ffc8' sqlid='6nbgqn0jjqu0p' select * from dept where deptno = :v_deptno or dname = :v_dname or loc = :v_loc END OF STMT PARSE #140692216598400:c=1000,e=882,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=1640575733992015 BINDS #140692216598400: Bind#0 oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=00 csi=00 siz=88 off=0 kxsbbbfp=7ff57597ca80 bln=22 avl=02 flg=05 value=10 Bind#1 oacdty=01 mxl=32(20) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=852 siz=0 off=24 kxsbbbfp=7ff57597ca98 bln=32 avl=00 flg=01 Bind#2 oacdty=01 mxl=32(20) mxlc=00 mal=00 scl=00 pre=00 oacflg=03 fl2=1000000 frm=01 csi=852 siz=0 off=56 kxsbbbfp=7ff57597cab8 bln=32 avl=06 flg=01 value="aaa123" EXEC #140692216598400:c=999,e=1206,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=3383998547,tim=1640575733993348 WAIT #140692216598400: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=87106 tim=1640575733993422 FETCH #140692216598400:c=0,e=73,p=0,cr=6,cu=0,mis=0,r=1,dep=0,og=1,plh=3383998547,tim=1640575733993542 WAIT #140692216598400: nam='SQL*Net message from client' ela= 295 driver id=1650815232 #bytes=1 p3=0 obj#=87106 tim=1640575733993890 FETCH #140692216598400:c=0,e=17,p=0,cr=1,cu=0,mis=0,r=0,dep=0,og=1,plh=3383998547,tim=1640575733993961 STAT #140692216598400 id=1 cnt=1 pid=0 pos=1 obj=87106 op='TABLE ACCESS FULL DEPT (cr=7 pr=0 pw=0 time=60 us cost=3 size=20 card=1)' WAIT #140692216598400: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=87106 tim=1640575733994096 *** 2021-12-27 11:28:56.487 WAIT #140692216598400: nam='SQL*Net message from client' ela= 2493215 driver id=1650815232 #bytes=1 p3=0 obj#=87106 tim=1640575736487337 CLOSE #140692216598400:c=0,e=12,dep=0,type=0,tim=1640575736487462 ===================== --//难点在于bind#1值为NULL。没有value=行.视乎avl表示字符或者整形变量长度。 $ sed -n "/^ Bind#/p;/^ value=/p;s/^ kxsbbbfp=.* avl=00 .*$/ value=NULL/p" /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_12780.trc | paste -d: - - Bind#0: value=10 Bind#1: value=NULL Bind#2: value="aaa123" --//我前面使用awk抽取sql语句,如何两者配合起来呢? $ awk '/^ Bind#/;/^ value=/;/^ kxsbbbfp=.* avl=00 .*$/{print " value=NULL"};/PARSING IN CURSOR/,/END OF STMT/' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_12780.trc | egrep -v '^PARSING|^END OF STMT' select * from dept where deptno = :v_deptno or dname = :v_dname or loc = :v_loc Bind#0 value=10 Bind#1 value=NULL Bind#2 value="aaa123" alter session set events '10046 trace name context off' --//不是太好应该拼接在一行。 $ awk '/^ Bind#/{printf "%s",$0};/^ value=/;/^ kxsbbbfp=.* avl=00 .*$/{print " value=NULL"};/PARSING IN CURSOR/,/END OF STMT/' /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_12780.trc | egrep -v '^PARSING|^END OF STMT' select * from dept where deptno = :v_deptno or dname = :v_dname or loc = :v_loc Bind#0 value=10 Bind#1 value=NULL Bind#2 value="aaa123" alter session set events '10046 trace name context off' --//ok,建立脚本如下: $ cat extractbindvalue.sh #!/bin/bash awk '/^ Bind#/{printf "%s",$0};/^ value=/;/^ kxsbbbfp=.* avl=00 .*$/{print " value=NULL"};/PARSING IN CURSOR/,/END OF STMT/' $1 | egrep -v '^PARSING|^END OF STMT' $ extractbindvalue.sh /u01/app/oracle/diag/rdbms/book/book/trace/book_ora_12780.trc select * from dept where deptno = :v_deptno or dname = :v_dname or loc = :v_loc Bind#0 value=10 Bind#1 value=NULL Bind#2 value="aaa123" alter session set events '10046 trace name context off' --//补充一点可以出现bind#1没有赋值,可以不必执行exec :v_dname :='';,这样就是null。一些应用会导致执行计划畸形。 --//另外kxsbbbfp表示怎么那位知道。
[20211227]抽取跟踪文件中的绑定变量值.txt
来源:这里教程网
时间:2026-03-03 17:21:17
作者:
编辑推荐:
- [20211227]抽取跟踪文件中的绑定变量值.txt03-03
- oracle ocp 19c考题7,科目082考试题-listener tnsnames03-03
- 临时表空间ORA-1652问题解决03-03
- 【CORE】在UNIX环境下从核心文件获取堆栈信息03-03
- [20211224]vim插件格式化sql语句.txt03-03
- [20211214]查看视图V$ACTIVE_SESSION_HISTORY遇到奇怪问题.txt03-03
- [20211215]提示precompute_subquery补充.txt03-03
- 「Oracle」客户端 PL/SQL DEVELOPER 安装使用03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 临时表空间ORA-1652问题解决
临时表空间ORA-1652问题解决
26-03-03 - 【CORE】在UNIX环境下从核心文件获取堆栈信息
【CORE】在UNIX环境下从核心文件获取堆栈信息
26-03-03 - 「Oracle」客户端 PL/SQL DEVELOPER 安装使用
「Oracle」客户端 PL/SQL DEVELOPER 安装使用
26-03-03 - Oracle的过载保护-数据库资源限制
Oracle的过载保护-数据库资源限制
26-03-03 - 「Oracle」数据库字符集编码修改
「Oracle」数据库字符集编码修改
26-03-03 - 连上无线网却不能上网?为你解答
连上无线网却不能上网?为你解答
26-03-03 - databas如何避免重复故障
databas如何避免重复故障
26-03-03 - database(Oracle MySQL)查询速度和数据量有关系吗?
database(Oracle MySQL)查询速度和数据量有关系吗?
26-03-03 - Oracle clone database
Oracle clone database
26-03-03 - 系统进程是什么?怎么通过系统进程进行病毒分析?
系统进程是什么?怎么通过系统进程进行病毒分析?
26-03-03
