Hace tres o cuatro años leí en un blog de Oracle en alguna parte que un DBA había utilizado para una resolución de incidente de emergencia una característica de Oracle 10g de sustitución SQL en tiempo real. Básicamente, configuró Oracle de manera que cada vez que recibía una determinada consulta A ejecutaba otra consulta B en su lugar. Sin cambio de código de aplicación, sin cambio de esquema, solo un simple tipo de configuración "ejecutar consulta B en lugar de A".
No es que esté planeando usar esa función (puedo pensar en algunas consecuencias indeseables), pero por curiosidad ¿existe realmente? En caso afirmativo, ¿cómo se llama esa característica?
oracle
oracle-10g
caldo
fuente
fuente
Respuestas:
Eso suena como el paquete DBMS_ADVANCED_REWRITE . Tim Hall tiene un excelente recorrido sobre el uso de ese paquete para dirigir las consultas de una aplicación a una tabla o vista diferente .
Si simplemente desea cambiar el plan de consulta pero no dirigir la consulta a una tabla diferente, puede usar esquemas almacenados o perfiles SQL.
Por ejemplo, tengo tablas
FOO
con 1 fila yBAR
con 2 filasPuedo declarar una equivalencia de reescritura diciendo que las consultas en su
FOO
lugar deberían golpearBAR
Ahora, si configuro la
query_rewrite_integrity
opción de confianza, las consultas en contraFOO
terminan golpeando una tabla completamente diferente.Eso puede crear algunos planes de consulta bastante interesantes donde el objeto que está consultando no se encuentra en ninguna parte del plan.
fuente