Oracle „Lizenzfallen“ im DBMS_XPLAN Package

Das Package DBMS_XPLAN wird von vielen DBAs aber auch Entwicklern dazu genutzt sich die Ausführungspläne von SQL Statements anzeigen zu lassen. Ich selbst nutze das Package sicher mehrmals die Woche – meist mit dem Subprogramm DBMS_XPLAN.DISPLAY_CURSOR. Das dieses Package aber sehr einfach und elegant zu Lizenzverletzungen verleiten kann, ist den meisten nicht bewusst.

Hier sind einige Beispiele, welche Subprogramme zu Lizenzverletzungen führen können.

DBMS_XPLAN.DISPLAY_WORKLOAD_REPOSITORY

Genauso wie die deprecated Funktion DBMS_XPLAN.DISPLAY_AWR wird hier auf das AWR-Repository zugegriffen. Dieses gehört aber zum Diagnostic Pack, somit setzt die Nutzung dieser Subprogramme eine Oracle Enterprise Edition sowie die Diagnostic Pack Lizenz voraus.

Referenz:

Sofern man sich mit Oracle Datenbank Lizenzierung auseinander setzt, ist das zumindest noch nachvollziehbar. Die Einstellung von Instance Parameter control_management_pack_access verhindert die Lizenzverletzung genauso wenig wie die Nutzung einer Oracle Standard Edition Datenbank.

DBMS_XPLAN.COMPARE_PLAN bzw. DBMS_XPLAN.DIFF_PLAN

Bei diesen Funktionen ist es auf den ersten Blick nicht klar, dass diese intern auf den SQL Performance Advisor (der Teil der Real Application Testing Option ist) nutzt.

Mit DBMS_XPLAN.COMPARE_PLAN kann man die Unterschiede von Ausführungsplänen herausfinden. Das Ergebnis ist ein Report (Text, HTML oder XML). Bei Tim Hall gibt es dafür einige Beispiele zur Nutzung dieser Funktion.

Mit DBMS_XPLAN.DIFF_PLAN kann man die Auswirkung von Outlines (Hints) auf ein SQL Statement evaluieren. Die Nutzung ist insofern komplex, weil man sich zuerst eine Outline für das SQL Statement generieren/überlegen muss (beispielsweise durch DBMS_XPLAN.DISPLAY_CURSOR anzeigen und dann abändern).

Da der SQL Performance Advisor Teil von RAT ist, benötigt man eine Enterprise Edition Datenbank sowie die Real Application Testing Option. Die interne Nutzung vom SPA ist absolut nicht ersichtlich und auch die der Oracle Dokumentation nicht erwähnt.