Logo Oracle Deutschland   DBA Community  -  Februar 2013
Oracle XML DB für DBAs
von Ulrike Schwinn, Oracle Deutschland B.V. & Co. KG

Seit Oracle 9i Release 2 gibt es spezielle XML Features in der Datenbank, die unter dem Namen Oracle XML DB zusammengefasst sind. Oracle XML DB (kurz XML DB) steht dabei in jeder Edition (auch Standard und Express Edition) ohne zusätzliche Installation zur Verfügung. Beispiele für Features in der XML DB sind:

  • Bereitstellung von relationalen Daten im XML Format
  • Effizientes Abfragen und Weiterverarbeiten von XML
  • Suche innerhalb eines XML Dokuments oder einer Anzahl von XML Dokumenten
  • Native Oracle XML DB Web Services
  • Zugriffe nicht nur über SQL sondern auch über FTP, WEBDAV und HTTP
  • Standardkonformität (W3C, SQL:2003, SQL/XML 2006)
Mit jedem neuen Oracle Datenbank Release werden zusätzlich wichtige XML DB Erweiterungen im Datenbankumfeld implementiert, die die XML DB für den Datenbankeinsatz bald obligatorisch macht.

Bei den XML DB Features handelt es sich übrigens nicht nur um Entwickler Features, sondern auch um Funkionen, die für DBAs interessant sind. So können beispielsweise der Zugriff auf Dateien im ASM über die XML DB Protokolle ermöglicht werden, das Embedded PL/SQL Gateway für APEX eingesetzt oder Packages wie UTL_HTTP, UTL_MAIL usw. mit speziellen XML Access Control Lists (kurz ACL) abgesichert werden.

Was ist zu tun, um die XML DB zu aktivieren? Wie sieht die Konfiguration aus? Wie kann man Objekte in der XML DB monitoren? Kann man die Standard Werkzeuge wie Enterprise Manager zur Administration einsetzen? Gibt es spezielle Rollen bzw. Privilegien, die ein Entwickler zur Nutzung der XML DB benötigt? Der Tipp beantwortet diese Fragen und illustriert einige interessante Features an Beispielen. Die Beispiele wurden dabei in einer 11.2.0.3 Umgebung durchgeführt.

Zur leichteren Lesbarkeit ist dieser Tipp in folgende Abschnitte unterteilt:
Installation

Die erste Frage, die sich stellt, ist nach dem Stand der Installation. Ein einfache Abfrage auf DBA_REGISTRY gibt die Antwort darauf.
SQL> select comp_name, version, status 
     from dba_registry where upper(comp_name) like '%XML%'

COMP_NAME                      VERSION                        STATUS
------------------------------ ------------------------------ --------
Oracle XML Database            11.2.0.3.0                     VALID
Liefert das Ergebnis NO ROWS, ist die XML DB nicht installiert und kann nachträglich mit dem Database Configuration Assistant oder dem Katalog Skript catqm.sql aus dem Verzeichnis $ORACLE_HOME/rdbms/admin installiert werden. Wie der folgende Ausschnitt zeigt, werden bei der Verwendung von catqm.sql Tablespace Einstellungen und das Passwort für den User XDB abgefragt. Ausserdem wird über die Nutzung von SecureFiles entschieden.
SQL> @catqm
Starting Oracle XML DB Installation ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter Parameter #1 , password for XDB schema:
Enter value for 1: xdb
Enter Parameter #2 , tablespace for XDB:
Enter value for 2: SYSAUX
Enter Parameter #3 , temporary tablespace for XDB:
Enter value for 3: TEMP
Enter Parameter #4 , YES/NO
...................If YES and compatibility is at least 11.2,
...................then XDB repository will be stored as secure files.
...................Otherwise, old LOBS are used
Enter value for 4: 
Die Installation dauert nur einige Minuten und besteht hauptsächlich aus der Erzeugung des XDB Schemas mit allen notwendigen Packages und Views. Möchte man hingegen eine De-Installation durchführen, kann das Skript catnoqm.sql verwendet werden. Zeigt das Ergebnis der Abfrage auf DBA_REGISTRY übrigens INVALID, sollte eine De-Installation und Installation der XML DB Abhilfe schaffen. Wichtig zu wissen ist, dass die Datenbank zwischen Installation und De-Installation heruntergefahren werden muss. Die MOS Note 1292089.1 beschreibt ausführlich die Installation und De-Installation für alle Datenbank Releases.

Konfiguration der Standard Protokolle

Möchte man die Standard Protokolle FTP, HTTP(S) (und die Erweiterung WEBDAV) nutzen, beispielsweise im ASM Kontext (siehe auch Tipp Zugriff auf Dateien in ASM) oder weil die Entwickler diesen Zugriff benötigen, kann ein zusätzlicher einfacher Konfigurationsschritt zur Festlegung der Ports erforderlich sein. Möchte man die Ports ändern oder initial festlegen, eignen sich zum Beispiel folgende einfache Aufrufe.
SQL> execute dbms_xdb.sethttpport(2222);
PL/SQL procedure successfully completed.

SQL>  execute dbms_xdb.setftpport(1111);
PL/SQL procedure successfully completed.
Monitoren lässt sich die Konfiguration mit folgenden Aufruf.
SQL> select dbms_xdb.gethttpport() http, dbms_xdb.getftpport() ftp from dual;

      HTTP        FTP
---------- ----------
      8080       1111
Erhält man den Wert 0, bedeutet dies, dass das Protokoll nicht konfiguriert ist. Alternativ kann das Skript catxdbdbca aus dem Verzeichnis $ORACLE_HOME/rdbms/admin verwendet werden, das die Konfiguration beider Protokolle vornimmt.

Die XML DB registriert die FTP und HTTP(S) Services dynamisch mit dem lokalen Listener, der im LOCAL_LISTENER Parameter spezifiziert wurde. Die Überprüfung kann somit mit lsnrctl status erfolgen. Die dynamische Registrierung stoppt nach der Änderung oder Festlegung der Ports automatisch den FTP/HTTP(S) Service der alten Port Nummern und startet erneut mit den neuen Port Einstellungen, ohne den Datenbank Betrieb zu beeinflussen. Das Ergebnis lässt sich im Enterprise Manager nachprüfen oder wie folgt mit lsnrctl status.
[oracle@sccloud034 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 12-FEB-2013 13:20:00

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                11-FEB-2013 15:57:55
Uptime                    0 days 21 hr. 22 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/11.2.0.3/db/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/sccloud034/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud034.de.oracle.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud034.de.oracle.com)(PORT=2222))
                                                       (Presentation=HTTP)(Session=RAW))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sccloud034.de.oracle.com)(PORT=1111))
                                                        (Presentation=FTP)(Session=RAW))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 3 handler(s) for this service...
The command completed successfully
Im Enterprise Manager findet man diese Information im Bereich "XML Database" unter dem Link "XDB Configuration".



Privilegien und Rollen

Die Standardprivilegien für Entwickler sind normalerweise zur Nutzung der XML DB völlig ausreichend. Um zum Beispiel eine Tabelle vom Typ XMLTYPE anzulegen, wird das CREATE TABLE Privileg benötigt. Allerdings gibt es einige vordefinierte Rollen, die unter Umständen zusätzlich vergeben werden müssen. Es handelt sich hauptsächlich um 4 Rollen, die hinzugefügt wurden: XDBADMIN, XDB_WEBSERVICES, XDB_WEBSERVICES_OVER_HTTP und XDB_WEBSERVICES_WITH_PUBLIC. Im Wesentlichen handelt es sich um die beiden Funktionen Generierung von XML Schemas und die Verwendung von nativen XML DB Web Services.

Wird eine Schema basierte Speicherung genutzt, müssen XML Schemas registriert werden. Der Entwickler kann standardmässig mit einem speziellen Aufruf XML Schemas registrieren, die lokal - also nur von ihm selbst genutzt werden -können. Die Rolle XDBADMIN hingegen gibt dem Anwender das Recht, ein XML Schema global zu registrieren, damit können auch andere Entwickler von der Registrierung profitieren.

Seit Oracle 11g können native XML DB Web Services verwendet werden, die eine leichte Umsetzung von PL/SQL in Web Services erlauben. Mit den Database Native Web Services kann eine SQL-Abfrage oder PL/SQL-Funktion ohne weiteren Aufwand als SOAP-Style Webservice bereitgestellt werden. Um einen Webservice per SOAP aufrufen zu können, benötigt man nur ein WSDL-Dokument - die "Schnittstellenbeschreibung" für den Web Service - das automatisch von den nativen XML DB Web Services generiert wird. Nötig dazu ist das Einrichten der HTTP Schnittstelle (siehe Kapitel Konfiguration der Standard Protokolle) und das Hinzufügen eines ORAWSV Servlets über ein einfaches Skript (siehe Kapitel 33 Oracle XML DB Developer's Guide). Zur Verwendung ist allerdings die Zuteilung gewisser Privilegien erforderlich:
  • XDB_WEBSERVICES erlaubt den Zugriff auf XML DB Web Services über HTTPS
  • XDB_WEBSERVICES_OVER_HTTP erlaubt den Zugriff auf XML DB Web Services über HTTP. es wird dann also kein HTTPS benötigt.
  • XDB_WEBSERVICES_WITH_PUBLIC erlaubt auch auf Objekte zugreifen, die "nur" über einen "Public" Grant bereitstehen. Ohne diese Rolle muss der Datenbankuser Eigentümer der Objekte sein oder explizite Privilegien haben.
Um eine feingranulare Nutzung von Web Services zu implementieren und dem Prinzip des Least Privilege zu genügen, lohnt es sich einen eigenen Web Service User einzurichten. Dieser erhält dann die Privilegien und Rollen CREATE SESSION, XDB_WEBSERVICES und XDB_WEBSERVICES_OVER_HTTP und zusätzlich die EXECUTE Rechte auf die entsprechenden PL/SQL Objekte. Fertig!

Monitoring und Performance

Wie oben schon erwähnt, besitzt Oracle Enterprise Manager Database Control bzw. Cloud Control einen Bereich XML Database (siehe Reiter "Schema"), der die Administration und das Monitoring unterstützen kann. Man erhält schnell einen Überblick über die Konfiguration und über spezielle XML Objekte wie XML Schemas und XMLTYPE Objekte. Es ist sogar möglich XML DB typische Aufgaben wie das Generieren von XML Schemas über den Enterprise Manager zu bewerkstelligen. Der folgende Ausschnitt zeigt die Implementierung in Enterprise Manager Cloud Control 12c.



Mit der Einführung der XML DB sind neue Datenbankobjekte und neue Datentypen zur Datenbank hinzugefügt worden. Die Datenbankobjekte werden zusätzlich oder auch ausschliesslich (siehe DBA_XML_TABLES) in diesen speziellen Views gespeichert. So ist zum Beispiel eine Tabelle vom XMLTYPE Typ nicht in DBA_TABLES sondern in DBA_XML_TABLES gelistet. Folgender Code-Ausschnitt zeigt ein kleines Beispiel.
SQL> create table xml_tab2 of xmltype;
SQL> create table xml_tab1 (xmldoc xmltype);

SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
XML_TAB1
DEPT
EMP
BONUS
SALGRADE

SQL> select table_name from user_xml_tables;
TABLE_NAME
------------------------------
XML_TAB2

SQL> select table_name from user_xml_tab_cols;
TABLE_NAME
------------------------------
XML_TAB1

SQL> select table_name, column_name from user_tab_cols where table_name='XML_TAB1';

TABLE_NAME                     COLUMN_NAME
------------------------------ ------------------------------
XML_TAB1                       XMLDOC
XML_TAB1                       SYS_NC00002$
Zusätzlich werden spezielle XML Indizes zur Steigerung der Performance bei XML typischen Abfragen in DBA_XML_INDEXES gespeichert. Möchte man einen Überblick über die speziellen XML DB Objekte erhalten, können folgende Views hilfreich sein.
  • DBA_XML_TABLES: alle XMLTYPE Tabellen
  • DBA_XML_VIEWS: alle XMLTYPE Views
  • DBA_XML_TAB_COLS: Tabellen mit XMLTYPE Spalten
  • DBA_XML_INDEXES: alle XML Indizes
  • DBA_XML_SCHEMAS: alle XML Schemas
Im Enterprise Manager werden diese Informationen im Bereich "XML Database" gelistet (siehe Screenshot oben). Auch der SQL Developer liefert eine Schnittstelle zur XML DB. Menüpunkte wie "XML Schemas" und "XML DB Repository" geben Einblick in einige XML DB Bereiche.

Die Nutzung von XML DB Features in DBA_FEATURE_USAGE_STATISTICS wird im Gegensatz zu anderen Features und Optionen der Datenbank nur unter einem Eintrag - nämlich XDB - gelistet und kann keinen realistischen Eindruck über die aktuelle Nutzung vermitteln.

Abfragen im XML DB Kontext, d.h. auf XMLTYPE Tabellen und Views oder mit SQL/XML Ausdrücken, werden wie alle Abfragen über eine Analyse des Ausführungsplan ge-tuned. Wichtig zu wissen ist, dass die Wahl der Speicherart und der richtige Einsatz von Indizes entscheidend für die Performance ist. Der XMLTYPE Datentyp lässt nämlich bei der Nutzung drei Arten der Speicherung zu. Ein sorgfältiges Prüfen der Speichermöglichkeiten vorab und der richtige Einsatz kann die Performance späterer Abfragen stark beeinflussen. Das White Paper Oracle XML DB: Choosing the Best XML Type Storage Option for Your Use Case auf OTN gibt einen guten Überblick über den richtigen Einsatz der verschiedenen Speicherarten.

Das häufig genannte XML DB Performance Feature XML Query Rewrite (auch Query Rewrite) stellt eine Optimierung bei Nutzung von XPATH und XQUERY Ausdrücken wie XMLQUERY, XMLTABLE, XMLEXISTS etc. dar. Optimierung bedeutet hier, dass bei der Ausführung keine Rekonstruierung des gesamten XML Dokuments im Memory erforderlich ist - dies würde die Performance nachteilig beeinflussen. Bei der optimierten Nutzung werden dann die entsprechenden Indizes soweit vorhanden genutzt. Ausführungspläne oder spezielle XML Events bzw. Hints können dieses Vorgehen/Verhalten nachweisen oder beeinflussen. Detaillierte Informationen zur Verwendung von XML Indizes und dem XPATH bzw. XML Query Rewrite finden sich im XML Developer Guide in den Kapiteln 5,6 und 8.

Verschiedenes: ACLs, ASM etc.

Wie in der Einleitung schon erwähnt, werden bestimmte Standard Funktionen (unabhängig von den XML Funktionen) der Datenbank auch über die XML DB Features implementiert. Dazu gehören beispielsweise die erweiterten Sicherheits-Einstellungen über die ACLs (kurz für Access Control Lists). Vor Oracle 11g konnten die Packages UTL_SMTP, UTL_TCP, DBMS_LDAP uneingeschränkt verwendet werden. Sie erlaubten einen einfachen Zugriff auf andere Server direkt aus der Datenbank. Ab 11g muss ein expliziter Zugriff über ACLs (Access Control Lists) implementiert werden um den Zugriff zu gewährleisten. Das Package DBMS_NETWORK_ACL_ADMIN dient dazu feingranulare Zugriffe auf bestimmte Hosts und Ports für bestimmte Datenbank Bnutzer einzurichten. Ein gutes Beispiel finden Sie im Tipp Access Control Lists: Schutz vor Missbrauch mächtiger Datenbank-Packages .

Eine weitere Funktion stellt das Kopieren von Dateien via FTP in ASM dar. Die Voraussetzung dazu bildet das XML DB Repository - das nach der Installation zur Verfügung steht. Das XML DB Repository ist eine Art virtuelles Dateisystem, das XML Repository Objekte wie Dateien und Verzeichnisse auf Pfade in einer Hierarchie abbildet. Der Zugriff ist dabei über HTTP oder FTP möglich. Parallel dazu zeigen die Views RESOURCE_VIEW oder PATH_VIEW die Ressourcen in der Datenbankansicht.
SQL> select path from path_view where under_path(res, '/home/OE')=1 ;
PATH 
--------------------------------------------------------------------------------
/home/OE/PurchaseOrders
/home/OE/PurchaseOrders/2002
/home/OE/PurchaseOrders/2002/Apr
/home/OE/PurchaseOrders/2002/Aug
/home/OE/PurchaseOrders/2002/Dec
/home/OE/PurchaseOrders/2002/Feb
/home/OE/PurchaseOrders/2002/Jan
/home/OE/PurchaseOrders/2002/Jul
/home/OE/PurchaseOrders/2002/Jun
/home/OE/PurchaseOrders/2002/Mar
/home/OE/PurchaseOrders/2002/May
/home/OE/PurchaseOrders/2002/Nov
/home/OE/PurchaseOrders/2002/Oct
/home/OE/PurchaseOrders/2002/Sep
/home/OE/purchaseOrder.xsd
/home/OE/purchaseOrder.xsl
/home/OE/xsd
/home/OE/xsl
/home/OE/xsl/empdept.xsl
In HTTP wird diese Information folgendermassen dargestellt.



Beachten Sie dabei, dass die URL den vorher konfigurierte HTTP Port 2222, den Server Namen sccloud003.de.oracle.com und den Pfad /home/OE enthält. In ASM erscheinen die ASM Dateien standardmässig unter dem virtuellen Verzeichnis /sys/asm. Ein Beispiel dazu findet sich im Tipp Zugriff auf Dateien im ASM . Hinweis: PATH_VIEW und RESOURCE_VIEW zeigen allerdings keine ASM Objekte an.

Weitere Informationen zur XML DB können Sie in folgenden Tipps und Links nachlesen

Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...



Zurück zur Community-Seite