oracle官网 的账号密码是什么情况游标共享之cursor_sharing=force

游标共享之cursor_sharing=force

 

        cursor sharing=force , oracle将2条类似的SQL的谓词用一个变量代替,同时将它们看做同一条SQL语句处理。这种方式很粗暴,极可能造成执行计划的不准确。

        适用场景:在无法将应用的代码修改为绑定变量情况下,oracle提供的一种解决方法。

        注意:游标共享特性有个不太好的名声,就是它不是很稳定,过去数年,大量与之相关的bug被发现和确认。

 

         参数还有两种选择:

 

         游标共享之cursor_sharing=similar

         游标共享之cursor_sharing=EXACT

 

        下面来做个试验:

 

SQL> Drop table t purge;SQL> show parameter cursor_sharing;NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------_optimizer_extended_cursor_sharing   string      UDOcursor_sharing                       string      EXACTSQL> create table t as select * from dba_objects;SQL> alter session set cursor_sharing=force;SQL> alter system flush shared_pool;SQL> select /*+test_force*/count(1) from t where object_id=100;  COUNT(1)----------         1SQL> select /*+test_force*/count(1) from t where object_id=100;  COUNT(1)----------         1SQL> select /*+test_force*/count(1) from t where object_id=200;  COUNT(1)----------         1SQL> col sql_texoracle账号t format a80;----谓词不同的情况下只解析一次SQL> select sql_id,child_number,sql_text from v$sql where sql_text like '%/*+test_force*/%'  2  and  sql_text not like '%sql_text%';SQL_ID        CHILD_NUMBER SQL_TEXT------------- ------------ --------------------------------------------------------------------------------f3jksnvgk93w9            0 select /*+test_force*/count(:"SYS_B_0") from t where object_id=:"SYS_B_1"

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。