Il y a trois ou quatre ans, j'ai lu dans un blog Oracle quelque part qu'un DBA avait utilisé pour une résolution d'incident d'urgence une fonctionnalité Oracle 10g de substitution SQL en temps réel. Fondamentalement, il a configuré Oracle de telle sorte que chaque fois qu'il recevait une certaine requête A, il exécutait une autre requête B à la place. Aucun changement de code d'application, aucun changement de schéma, juste une configuration de type "exécuter la requête B au lieu de A".
Non pas que j'envisage d'utiliser cette fonctionnalité (je peux penser à des conséquences indésirables), mais par curiosité existe-t-elle vraiment? Si oui, comment s'appelle cette fonctionnalité?
oracle
oracle-10g
bouillon
la source
la source
Réponses:
Cela ressemble au package DBMS_ADVANCED_REWRITE . Tim Hall a une excellente procédure d'utilisation de ce package pour pointer les requêtes d'une application sur une table ou une vue différente .
Si vous souhaitez simplement modifier le plan de requête mais ne pas pointer la requête vers une autre table, vous pouvez utiliser des plans stockés ou des profils SQL.
Par exemple, j'ai des tables
FOO
avec 1 ligne etBAR
2 lignesJe peux déclarer une équivalence de réécriture en disant que les requêtes contre
FOO
devraient plutôt frapperBAR
Maintenant, si je mets
query_rewrite_integrity
à confiance, les requêtes contreFOO
finissent par frapper une table complètement différente.Cela peut créer des plans de requête plutôt intéressants où l'objet que vous interrogez est introuvable dans le plan
la source