Vor drei oder vier Jahren las ich irgendwo in einem Oracle-Blog, dass ein DBA für eine Notfalllösung eine Oracle 10g-Funktion zur Echtzeit-SQL-Substitution verwendet hatte. Grundsätzlich hat er Oracle so konfiguriert, dass jedes Mal, wenn es eine bestimmte Abfrage A erhielt, stattdessen eine andere Abfrage B ausgeführt wurde. Keine Änderung des Anwendungscodes, keine Schemaänderung, nur eine einfache Konfiguration vom Typ "Abfrage B anstelle von A ausführen".
Nicht, dass ich vorhabe, diese Funktion zu verwenden (ich kann mir einige unerwünschte Konsequenzen vorstellen), aber existiert sie aus Neugier wirklich? Wenn ja, wie heißt diese Funktion?
oracle
oracle-10g
Brühe
quelle
quelle
Antworten:
Das klingt nach dem Paket DBMS_ADVANCED_REWRITE . Tim Hall verfügt über eine hervorragende Anleitung zur Verwendung dieses Pakets, um die Abfragen einer Anwendung auf eine andere Tabelle oder Ansicht zu verweisen .
Wenn Sie lediglich den Abfrageplan ändern möchten, die Abfrage jedoch nicht auf eine andere Tabelle verweisen möchten, können Sie gespeicherte Konturen oder SQL-Profile verwenden.
Zum Beispiel habe ich Tabellen
FOO
mit 1 Zeile undBAR
mit 2 ZeilenIch kann eine Umschreibäquivalenz deklarieren, die besagt, dass Abfragen gegen
FOO
stattdessen getroffen werden solltenBAR
Wenn ich mich nun
query_rewrite_integrity
auf vertrauenswürdig einstelle ,FOO
treffen Abfragen gegen eine völlig andere Tabelle.Dadurch können einige interessante Abfragepläne erstellt werden, bei denen das von Ihnen abgefragte Objekt nirgends im Plan zu finden ist
quelle