Eu tenho duas instâncias de banco de dados, desenvolvimento e produção, que são bastante idênticas. Na produção, o cache de resultados está funcionando bem, no desenvolvimento não. O valor do parâmetro de banco de dados result_cache_max_size
foi definido como 0
, então eu o redefini para remover o valor, devolvi o banco de dados e, quando o banco de dados foi feito o backup, o valor ainda estava definido, 0
então tentei começar com um PFILE
sem valor para o result_cache_max_size
mesmo problema. Então eu tentei configurá-lo para 20M
(valor da produção) e saltei, mas os mesmos resultados. Eu então invoquei
SELECT dbms_result_cache.status() FROM dual;
que retorna BYPASS
.
Os parâmetros result_cache_max_result
e result_cache_mode
são definidos para 5
e MANUAL
em ambos os bancos de dados.
Estou usando o Enterprise Edition em ambas as instâncias (portanto, a pergunta Por que o cache de resultados está sempre desabilitado no Oracle 11g não se aplica a mim):
Desenvolvimento:
SYS@extdev02> select banner from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
Produção:
extuat01> select banner from v$version;
BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
...
Editar: Tentei bypass
proc por resposta @BalazsPapp, mas sem sorte. Acho que já tentei, mas sem o segundo parm, que teria como padrão false pela documentação. A tentativa de hoje, incluindo um flush
proc apenas por diversão:
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
Então habilite:
DBMS_RESULT_CACHE.BYPASS