love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

Phone:18180207355 提供专业Oracle/MySQL/PostgreSQL数据恢复、性能优化、迁移升级、紧急救援等服务

使用sql profle进行偷梁换柱的小例子

本站文章除注明转载外,均为本站原创: 转载自love wife love life —Roger的Oracle/MySQL/PostgreSQL数据恢复博客

本文链接地址: 使用sql profle进行偷梁换柱的小例子

我们知道outline 可以用来固定sql的执行计划,但是针对未使用绑定变量的sql来讲,可能就不行了。
我最近遇到一个case,有个sql消耗很大,没有使用绑定变量,但是执行计划经常发生变化,那么怎么弄呢?
我们知道10g开始oracle 提供了sql profile功能,我们可以利用该功能来进行处理。
由于涉及到客户信息,不便透露,所以我这里用创建一个测试表来进行简单的实验:

我这里的目的就是需要在执行第2个sql时,其执行计划也走index,怎么办呢?这里我想到的办法就是
利用sql profile来进行偷梁换柱,首先我们需要查到sql语句对应的sql_id。

获取到sql_id以后,我们用sqlt中的脚本来创建sql profile,注意,因为我们这里是需要用object_id=1000的执行计划来替换
object_id=2000的执行计划,所以我们这里需要用到第一个sql_id:

在当前目前会生成一个如下的文件:

改变以后,我们随便创建一个col_xfr_sql_profile_55hpqz51suxax.sql文件,内容如下:

然后我们执行col_xfr_sql_profile_55hpqz51suxax.sql 脚本即可,如下:

最后我们来看看是否达到我们需要的效果了,如下:

2 Responses to “使用sql profle进行偷梁换柱的小例子”

  1. VMCD.ORG » Blog Archive » Exchange outlines Says:

    […] 参见昨天Roger的文章,exchange outline可以同样实现这种需求 参考JL的文章: Stored Outlines in Oracle 8 Stored Outlines in Oracle 9 […]

  2. Exchange outlines | louis liu 的镜像blog Says:

    […] 参见昨天Roger的文章,exchange outline可以同样实现这种需求 […]

Leave a Reply

You must be logged in to post a comment.