Oracle数据库-设置10053事件的三种办法

简介: Oracle数据库-设置10053事件的三种办法


      在Oracle数据库中,最常用的产生10053时间的办法就是在会话中设置这个事件,比如运行下面的命令就可以在当前会话中设置10053事件

ALTER SESSION SET events '10053 trace name context forever';

     打开这个事件后,要在设置事件的会话中手动执行一下要跟踪的sql语句,使Oracle优化器对语句执行一次硬解析,然后     关闭这个这个事件,用下面的命令

ALTER SESSION SET events '10053 trace name context off';

     在会话中设置10053事件后,对会话中所有硬解析的sql语句都会进行跟踪,在不能手动执行要跟踪的sql语句的时候,使用这个事件产生的跟踪文件会包含我们跟踪的sql语句之外的很多其它语句的信息,这个事件产生的信息本来就很多,如果包含了许多其它语句的信息,会给分析带来不必要的麻烦。

      针对上面所说的问题,有两个解决的办法。

1 设置优化器跟踪事件

      Oracle优化器跟踪事件可以在系统级设置,也可以在会话级设置,这个事件的一个优点可以针对一条sql语句单独设置,可以在系统级设置,也可以在会话级设置,设置后,只要被跟踪的语句产生一次硬解析,执优化器产生执行计划的信息就会被记录下来。比如在会话级设置,下面通过一个简单的例子演示一下。先运行一条sql语句

    select count(*) from emp where empno=20;

     查询一下这条语句的sql_id

select SQL_ID,sql_text from v$sql where sql_text like '%empno%';

SQL_ID

-------------

SQL_TEXT

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

b353kz5s80jqs

select count(*) from emp where empno=20

    设置Oracle优化器跟踪事件,产生这条语句的10053事件跟踪文件

ALTER session SET events 'trace[rdbms.SQL_Optimizer.*][sql:b353kz5s80jqs]';

   想办法使这条语句重新解析一下后,就可以关闭这个事件了

ALTER SYSTEM SET events 'trace[rdbms.SQL_Optimizer.*][sql:b353kz5s80jqs] off'

   在当前会话的默认跟踪文件里可以发现这条sql语句的跟踪信息,同在会话中设置10053事件的效果是相同的。

2 使用dbms_sqldiag.dump_trace存储过程

   上面的两种方法需要使要跟踪的语句重新解析一下,使用这个存储过程则完全不用考虑重新解析语句的问题,甚至也不用考虑绑定变量的问题,只需要传入要跟踪的语句的sql_id,这个存储过程会指示优化器对语句进行重新解析,产生跟踪文件。

   exec dbms_sqldiag.dump_trace(p_sql_id => 'b353kz5s80jqs',p_child_number => 0,p_component => 'Optimizer',p_file_id => 'test');

    p_child_number的值为0是缺省设置,参数p_file_id设置会话跟踪文件的名称,这个存储过程运行后,跟踪信息存在于当前会话的跟踪文件中,这个例子中是下面这个文件

    /opt/oracle/diag/rdbms/orcl/ORCL/trace/ORCL_ora_13266_test.trc


相关文章
|
关系型数据库 MySQL 数据库
Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”
Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”
168 0
Mysql 遇到神奇的“本次本客户端效现象”,数据库并未被改变 + 神奇“卡顿现象”
|
SQL 存储 Oracle
为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句
原文:为什么数据库有时候不能定位阻塞(Blocker)源头的SQL语句     在SQL Server数据库或OACLE数据库当中,通常一个会话持有某个资源的锁,而另一个会话在请求这个资源,就会出现阻塞(blocking)。
999 0
|
SQL 监控 JavaScript
Oracle 18.3 : 透过告警日志从安装初始化过程看 18c 的新改变
Oracle Database 18c 已经正式对外发布,第一个公共版本的版本号是 18.3 ,让我们从 18.3 的安装过程来一睹 18c 的改变。
2031 0
|
Oracle 关系型数据库 数据库
深入解析:你听说过Oracle数据库的更新重启动吗?
更新重启动是 Oracle 中一个隐藏的知识点,当 Oracle 在读取数据时,会构造读一致性,当读取的内容发生了修改,Oracle 会通过 UNDO 信息来还原数据的前镜像,把数据还原到查询发生的时刻,通过构造一致性的结果来实现读取数据的一致性和隔离性。
1452 0
|
数据库 Windows
外部数据库驱动程序(1)中的意外错误
原文:用友u8各版本在输出的时候报错提示:外部数据库驱动程序(1)中的意外错误 ,报错内容“外部数据库驱动程序(1)中的意外错误”,经初步分析有以下解决方案:1、卸载微软的补丁:(1)如果是PC操作系统(一般是客户端)请按以下系统对应补丁进行处理:Win7系统卸载微软补丁KB4041678与KB4...
1825 0
|
安全 数据库
快视频:剽窃了B站的数据库?360的常规操作了。
转自:https://zhuanlan.zhihu.com/p/33887437 这些天,一些UP主惊讶地发现,在一款自己从未使用过的视频网站上,出现了自己的视频和同样用户的ID。
1509 0
|
存储 SQL Go
SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名字段,怎么使这发布和订阅的两个字段建立同步关系呢? 下面就测试更改:此次发布类型为事务复制的可更新订阅,其他类型的发布没有测试。
1079 0

热门文章

最新文章

推荐镜像

更多