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

我们知道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 脚本即可,如下:

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

    分享到:
18180207355
加Q咨询