Ayuda con optimizer_mode=chose URGENTE!!!!

dudakata
25 de Abril del 2005
Tengo una BD Oracle 9i seteada en modo RULE. Existen dos aplicaciones que se conectan a dicha BD. La aplic1 necesita para trabajar que la Bd este obligatoriamente en modo RULE mientras que la aplic2 necesita que este en modo CHOOSE para ejecutar sus querys correctamente sino demora demasiado. Yo no tengo acceso a los fuentes de ninguna de las aplicaciones así que no puedo ponerle en duro el ALTER SESSION SET OPTIMIZER=choose.
Mi pregunta es: Habrá alguna forma de setear en el cliente Oracle (cliente de conexión instalado en la pc de los usuarios de la aplic2) el modo optimizer? o en algún otro lugar, para que todas las aplicaciones que se conecten con ese cliente lo hagan en ese modo.
Espero sus consejos, cualqueir cosa será bienvenida. Muchas gracias de antemano

Adrian
25 de Abril del 2005
Podrías hacer algo como esto:

create or replace trigger poner_optimizador after logon on database
declare app varchar2(48)
begin
select program
into app
from v$session
where audsid = userenv('sessionid');

if app = 'loquesea.exe' then
execute immediate 'alter session set optimizer_mode = choose';
elseif app = 'otracosa.exe' then
execute immediate 'alter session set optimizer_mode = rule';
end if
end;
/

Saludos

dudakata
25 de Abril del 2005
Eso me puede ayudar. Muchas gracias!!!

sys
25 de Abril del 2005
lo más facil es que sustituyan sus sentencias más pesadas con el hint /+ RULE/ .
Oracle en la 10 ya no da soporte, ni la posibilidad de trabajar con rules. Trabajar con Rules es anticuado y desde la 8i es más rápido si se utiliza cost, sabiendo optimizar las sentencias, los analyze,dbms_stats.gather (es increible), histogramas, etc...