Was verbirgt sich hinter einer View? - Nutzung von EXPAND_SQL_TEXT in 12c
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG
Wem ist das nicht auch schon mal passiert? Man möchte eine relativ einfache Abfrage tunen und hat es plötzlich mit einem sehr langen Ausführungsplan zu tun. Bei genauer Analyse stellt man fest, dass mehrere Views in der Abfrage genutzt werden; schliesslich gehört es auch zu einer der Best Practices, umfangreiche Abfragen über Views zu verbergen, um die Komplexität der Abfragen zu verringern.
Ein anderer Fall ist die Nutzung von Virtual Private Database (VPD) und das Tunen der zugrunde liegenden "Policy". Noch einmal zur Erinnerung: VPD implementiert die Kontrolle für den Zugriff auf einzelne Zeilen auf der Ebene der Tabelle. Mit einem speziellen Package werden alle Befehle wie INSERT, UPDATE, DELETE und SELECT, die auf eine mit VPD geschützte Tabelle zugreifen, um eine zusätzliche WHERE-Bedingung erweitert. Jeder sieht nur die für ihn durch die WHERE-Bedingung gefilterten Datensätze. Möchte man solch eine Abfrage tunen, muss man herausfinden, wie die Filterbedingung aussieht.
Wie erhält man nun die View Abfrage? Eine Möglichkeit, diese Fragestellungen zu beantworten, besteht darin, das Data Dictionary zu befragen. View Definitionen finden sich in DBA_VIEWS, Policy Definitionen in DBA_POLCIES. Wie zu Beginn schon erwähnt, werden auch im Ausführungsplan die verwendeten Tabellen bzw. Filterkriterien angezeigt. Ab Oracle Database 12c gibt es nun eine dritte Möglichkeit, diese Problematik anzugehen. Die neue Prozedur EXPAND_SQL_TEXT des Package DBMS_UTILITY nimmt eine Abfrage als Eingabe Parameter und ersetzt die View Referenzen durch die zugehörigen Abfragen auf die Tabellen.
Am besten illustrieren wir die neue Funktion an zwei Beispielen. Im ersten Beispiel legen wir die View MY_VIEW an.
Nun verwenden wir diese View in der folgenden Abfrage.
Wie sieht nun das Ergebnis nach Nutzung
der Prozedur EXPAND_SQL_TEXT aus?
Wie man erkennen kann, ist die Verwendung ganz einfach. Das Ganze funktioniert auch für existierende (migrierte) Views oder auch Data Dictionary Views und natürlich mit komplexeren verschachtelten Abfragen.
Um die Funktionsweise in einem weiteren Beispiel zu veranschaulichen, nehmen wir eine Abfrage unter Verwendung von Virtual Private Database. Zur Veranschaulichung dient das Beispiel aus unserem Tipp Oracle Virtual Private Database .
Die Idee dahinter war, dass Auftragsdaten aus der Tabelle OE.ORDERS nur von den Verkäufern, die den Auftrag abgeschlossen haben, lesbar sind. Ausserdem sollen Kunden ihre eigenen Auftragsdaten lesen dürfen. Die Policy enthält eine spezielle Zeichenkette, die als WHERE-Bedingung durch VPD genutzt wird. Folgendes Beispiel illustriert die Verwendung.
Weitere Hinweise dazu finden sich im Handbuch Oracle Database PL/SQL Packages and Types Reference
12c Release 1 (12.1).
Zurück zur Community-Seite
|