Erzeugen von Testfällen mit DBMS_SQLDIAG
von Ulrike Schwinn, ORACLE Deutschland B.V. & Co. KG
Der Erfolg beim Tunen von SQL Statements oder gar die Behebung von aufgetretenen Fehlern bei der SQL-Ausführung ist häufig davon abhängig, einen reproduzierbaren Testfall
zur Verfügung zu stellen. Dies kann eine sehr umständliche und zeitaufwändige Aufgabe sein, da nicht nur die Abfrage und die Tabelle selbst,
sondern häufig auch zugehörige Objekte wie Synonyme, Indizes usw. erzeugt werden müssen. Der sogenannte Test Case Builder (auch TCB),
mit Teilfunktionen auch schon in 10.2.0.4 vorhanden, bietet hier eine Möglichkeit, diesen Vorgang stark zu vereinfachen.
Die Idee dahinter ist, alle Informationen, die zu einem SQL Statement gehören, automatisch zu speichern und die Möglichkeit zu bieten,
einen Import dieser Informationen in eine weitere Datenbank zu ermöglichen. Dies kann beispielsweise dann sinnvoll sein, wenn eine Analyse durch spezielle Consultants
oder durch den Oracle Support erforderlich ist. Die Informationen, die TCB exportiert und importiert, umfassen nicht nur das Statement, sondern auch
die notwendigen Tabellen und Indizes, PL/SQL Objekte, Optimizer Statistiken und die relevanten Initialisierungsparameter.
Implementiert ist der Test Case Builder über das Package DBMS_SQLDIAG. Teilfunktionen sind auch graphisch über die Support Workbench des Enterprise Managers zu nutzen. Dabei enthält DBMS_SQLDIAG eine Vielzahl von Funktionen und Prozeduren, die nicht nur helfen
einen Testfall aufzubauen, sondern auch Diagnosen durchzuführen und sogar SQL Patches einzuspielen. In diesem Tipp konzentrieren wir uns auf das
Exportieren und Importieren einer Testumgebung und die aktuelle Funktionalität in der 11.2.0.2 Datenbank.
Wie schon erwähnt, besteht das Package DBMS_SQLDIAG aus einer Vielzahl von Unterprogrammen. Die folgende Liste beschreibt die relevanten Programme für
den Export und den Import:
- EXPORT_SQL_TESTCASE zum Exportieren der Testumgebung unter Angabe von SQL_ID, SQL_Text usw.
- EXPORT_SQL_TESTCASE_DIR_BY_INC zum Exportieren einer Testumgebung unter Angabe einer "Incident Id"
- EXPORT_SQL_TESTCASE_DIR_BY_TXT zum Exportieren einer Testumgebung unter Angabe eines SQL-Texts
- IMPORT_SQL_TESTCASE zum Import einer mit TCB exportierten Testumgebung
Im Beispiel nutzen wir folgende Abfrage auf die Tabelle SALES, die im Demo-Schema SH zu finden ist. Der ausführende
User muß DBA Privilegien besitzen, allerdings sollte nicht der User SYS genutzt werden.
Damit die Dateien exportiert werden können, ist ein logisches Directory notwendig. Es lautet hier DIAGDIR und verweist
auf ein existierendes physikalisches Verzeichnis. Das Exportieren der Testumgebung dieser Abfrage kann dann folgendermassen aussehen:
In unserem Fall wird der Parameter "exportData" auf TRUE (der Standard ist FALSE) eingestellt, damit auch die Daten und nicht nur
die Definitionen exportiert werden. Je nach Umfang der Informationen dauert die Ausführung von DBMS_SQLDIAG.EXPORT_SQL_TESTCASE
einige Minuten. Im Verzeichnis DIAGDIR finden sich nach der erfolgreichen Ausführung 14 unterschiedliche Dateien im XML, SQL oder DMP Format.
Bis auf "xxxxmain.xml" sind die Dateien für den internen Gebrauch oder als Informationsquelle gedacht und müssen in der Regel vor der eigenen Nutzung editiert
werden. Die Datei-Namen verschiedener Durchläufe sind unterschiedlich; der Präfix innerhalb eines Durchlaufs (hier "oratcb4_00205EE90001") bleibt
allerdings erhalten. Folgende Liste gibt einen kurzen Überblick und eine Beschreibung der Dateien.
oratcb4_00205EE90001dpexp.dmp | EXPDP Dump-Datei der genutzten Objekte |
oratcb4_00205EE90001dpexp.log | EXPDP Logdatei |
oratcb4_00205EE90001README.txt | Beschreibung des Import |
oratcb4_00205EE90001dpexp.sql | internes EXPDP-Skript für TCB |
oratcb4_00205EE90001dpimp.sql | internes IMPDP-Skript für TCB |
oratcb4_00205EE90001sql.xml | das SQL Statement |
oratcb4_00205EE90001ts.xml | Tablespace-Liste |
oratcb4_00205EE90001ol.xml | Objekt-Liste |
oratcb4_00205EE90001xpls.sql | Explain Plan |
oratcb4_00205EE90001xplo.sql | Explain Plan mit Outline Hints |
oratcb4_00205EE90001xplf.sql | Explain Plan mit DBMS_SQLDIAG |
oratcb4_00205EE90001ssimp.sql | Import der Systemstatistiken |
oratcb4_00205EE90001xpl.txt | Explain Plan Logdatei |
oratcb4_00205EE90001main.xml | Metadatendatei |
Nun kann man mit einem einfachen Aufruf die Informationen in eine andere Datenbank importieren. Dazu wird als Argument der Name eines logischen
Directories der Datenbank (hier auch DIAGDIR) und der Name der "xxxxmain.xml" Datei angegeben. Auch hier ist ein User mit DBA Privilegien nötig.
Verwendet man ein leeres Schema z.B. TESTUSER, um die Informationen in die gleiche Datenbank zu importieren, sieht der Aufruf folgendermassen aus.
Nach dem Import sind die notwendigen Objekte und die entsprechenden Statistiken im Schema TESTUSER vorhanden. Die Testumgebung ist erstellt!
Nun können die importierten Objekte und die zusätzlichen Informationen in den Dateien (siehe Beschreibung oben) genutzt werden, um das
Statement auszuführen. Das Statement selbst befindet sich in der oratcb4_00205EE90001sql.xml Datei. Die Outline Hints aus dem Skript
oratcb4_00205EE90001xplo.sql geben beispielsweise zusätzliche Informationen zur Ausführung in der Testumgebung.
Folgendes Beispiel zeigt eine mögliche Anwendung.
Möchte man mehr zu den der Nutzung von DBMS_SQLDIAG erfahren, findet man weitere Informationen im
Oracle® Database PL/SQL Packages and Types Reference
11g Release 2 (11.2) Handbuch.
Zurück zur Übersicht
Zurück zur Community-Seite
|