Trzy lub cztery lata temu przeczytałem gdzieś na blogu Oracle, że DBA użył do rozwiązania incydentu awaryjnego funkcji Oracle 10g zastępowania SQL w czasie rzeczywistym. Zasadniczo skonfigurował Oracle w taki sposób, że za każdym razem, gdy otrzymywał określone zapytanie A, zamiast tego wykonywał kolejne zapytanie B. Bez zmiany kodu aplikacji, bez zmiany schematu, po prostu prosta konfiguracja typu „wykonaj zapytanie B zamiast A”.
Nie dlatego, że planuję użyć tej funkcji (myślę o pewnych niepożądanych konsekwencjach), ale z ciekawości, czy ona naprawdę istnieje? Jeśli tak, jak nazywa się ta funkcja?
oracle
oracle-10g
Rosół
źródło
źródło
Odpowiedzi:
To brzmi jak pakiet DBMS_ADVANCED_REWRITE . Tim Hall doskonale posługuje się tym pakietem, aby skierować zapytania aplikacji do innej tabeli lub widoku .
Jeśli chcesz tylko zmienić plan zapytań, ale nie kierujesz zapytania do innej tabeli, możesz użyć zapisanych konturów lub profili SQL.
Na przykład mam tabele
FOO
z 1 rzędem iBAR
2 rzędamiMogę zadeklarować równoważność przepisania, mówiąc, że
FOO
zamiast tego zapytania powinny trafićBAR
Teraz, jeśli ustawię
query_rewrite_integrity
na zaufany, zapytania przeciwkoFOO
trafią do zupełnie innej tabeli.To może stworzyć dość interesujące plany zapytań, w których nie ma w planach szukanego obiektu
źródło