Olá.

Vou compartilhar com vocês um problema que ainda não consegui resolver e gostaria de, caso algum leitor saiba sobre o assunto e quiser compartilhar comentando, que me ajude por favor.

É mais ou menos o seguinte...

Na empresa onde sou DBA, utilizamos o banco Oracle 10G (release 10.2.0.3) e recentemente realizei uma alteração (para efeito de teste) do parâmetro CURSOR_SHARING. Alterei ele do seu valor default "EXACT" para o valor "SIMILAR".
Com a alteração, a taxa de hard parse diminuiu, e obtive um alto índice de reuso de query (ou scripts de modo geral).
Os testes estavam indo bem, quando és que surge uma consulta semelhante a seguinte:

select 'teste' as campo, 'Y' as tipo from dual
union
select 'teste1', 'N' from dual;

Com o parâmetro alterado, essa consulta foi interpretada como:

select '"SYS_B_0"' as campo, '"SYS_B_1"' as tipo from dual
union
select '"SYS_B_2"' as campo, '"SYS_B_3"' as tipo from dual;

Até então, tudo ocorreu conforme esperado, porém na aplicação que faz uso dessa base existia um teste conforme o indicado abaixo:

<%
'Código ASP
...
if cstr(rs.fields("tipo")) = "Y" then
<< fazer algo xcvdxwwx >>
else
<< fazer algo yzwyzee >>
end if
...
%>

Mesmo quando o retorno da consulta era = "Y", nunca entrava no if (e eu testei a consulta e ela realmente retornava Y).
Quando fui verificar o retorno pela aplicação, o campo "tipo" retornava "Y ¢¥¥├ò", ou seja, com um lixo após o valor.
Rodei a mesma consulta pelo sqlplus, e realmente o valor do retorno era apenas "Y".

Tentei alterar o provider da string de conexão do banco para ver se era esse o problema, mas o mesmo persistiu. O Oracle Client no servidor da aplicação é o 10G.

Não consegui entender o erro, e em todas as documentações e livros que pesquisei, os problemas oriundos da alteração desse parâmetro acarreta apenas em queda de performance (devido a por exemplo reutilizar um plano NÃO otimizado para uma consulta).

Esse problema inviabilizou a alteração que se comportara muito bem em outros aspectos.

Entendo que quando pensamos em reuso através de bind variables, associamos apenas à alterações dos parâmetros na seleção dos dados e não na projeção como é o caso citado.

Alguém tem alguma ideia sobre o que pode ser e se tem alguma alteração que possa ser feita para conseguir o ganho da performance dos "soft parses"?

Conto com o conhecimento de vocês!

Grato!!