› Fóruns › Banco de dados Oracle › Parametro CURSOR_SHARING › Parametro CURSOR_SHARING
Opá…
Já trabalhei muito com esse parâmetro e vou te falar que não tive boas experiências (com ele diferente de EXACT)
A função básica do parâmetro (conforme o Vieri falou), é controlar a “forma” que o banco irá re-utilizar os SQL’s compilados em memória.
Os valores aceitos são EXACT, SIMILAR ou FORCE
Exact: Somente será reaproveitado se o SQL for 100% idêntico ao que está em memória, inclusive os literais
Exemplo: “select * from dual where x=1” é diferente de “select * from dual where x=2”
Similar: Permite que os valores literiais sejam diferentes, existe meio que uma “conversão interna” de valores literias para bind variáveis, no exemplo acima seria feito somente um “hard parse” da consulta.
Force: O Oracle “força” todas as consultas a utilizarem bind variáveis o que reduz bastante a quantidade de re-parses no banco, porém, o grande problema é que, as consultas ficam com planos de execução “estáticos”, ou seja, todas as consultas subsequentes executadas e que re-aproveitam o SQL em memória também irão usar o mesmo plano de execução.
A recomendação da Oracle é deixar este parâmetro como EXACT e você “forçar” os desenvolvedores a utilizar bind variáveis ( o que quase nunca acontece).