我有两个数据库实例,开发和生产完全相同。在生产中,结果缓存工作正常,在开发中则不然。数据库参数的值result_cache_max_size
设置为,0
因此我将其重置以删除该值,退回数据库,当数据库备份时,该值仍设置为,0
因此我尝试从PFILE
没有值的result_cache_max_size
相同问题开始。然后我尝试将其设置为20M
(生产中的值)并反弹,但结果相同。然后我调用
SELECT dbms_result_cache.status() FROM dual;
返回BYPASS
。
参数result_cache_max_result
和result_cache_mode
设置到5
两个MANUAL
数据库上。
我在两个实例上都使用企业版(所以问题为什么在 Oracle 11g 中总是禁用结果缓存不适用于我):
发展:
SYS@extdev02> select banner from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
生产:
extuat01> select banner from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
编辑:bypass
根据@BalazsPapp 的答案尝试了proc,但没有运气。我想我已经尝试过了,但是没有第二个参数,根据文档,它默认为 false。今天的尝试,包括一个flush
只是为了好玩的过程:
SYS@extdev02> select dbms_result_cache.status() FROM dual;
DBMS_RESULT_CACHE.STATUS()
---------------------------
BYPASS
SYS@extdev02> exec dbms_result_cache.bypass(true, false);
PL/SQL procedure successfully completed.
SYS@extdev02> exec dbms_result_cache.flush
PL/SQL procedure successfully completed.
SYS@extdev02> select dbms_result_cache.status() FROM dual;
DBMS_RESULT_CACHE.STATUS()
--------------------------
BYPASS
SYS@extdev02> exec dbms_result_cache.bypass(false, false);
PL/SQL procedure successfully completed.
SYS@extdev02> select dbms_result_cache.status() FROM dual;
DBMS_RESULT_CACHE.STATUS()
--------------------------
BYPASS
然后启用它:
DBMS_RESULT_CACHE.BYPASS