132
Ralf Mueller Server Technologies Oracle Corporation Oracle XML Datenbank

Ralf Mueller Server Technologies Oracle Corporation Oracle XML Datenbank

Embed Size (px)

Citation preview

Ralf Mueller

Server TechnologiesOracle Corporation

Oracle XML Datenbank

Agenda

XML in der DatenbankSpeicherformen für XML-Dokumente, Datenbankansätze, Oracle XML Technologie, Architektur der Oracle XML-Datenbank, Installation + Konfiguration

XML-Speicherstrukturen Festlegung der Speicherungsform, XML Schema, Registrierung, objektrelationale Strukturen

Umgang mit XML-DokumentenSpeichern und Abrufen von XML-Dokumenten; Verbindung mit SQL; Protokollzugriff

XML in der Praxis – Szenarien und ImplementierungImplementierung der Szenarien mit der XML-Datenbank, Zusammenspiel mit Oracle-Technologie

Warum XML in der Datenbank ...?

... und nicht einfach im Dateisystem?

Warum XML in der Datenbank ...... und nicht im Dateisystem? relationale Daten bereits vorhanden

– Kombination mit XML Dokumenten– Ausgabe als XML-Dokument

Erweiterung des XML-Datenmodells– Zusätzliche Datenbankvalidierung– Transaktionskonzept– Datennahe Sicherheitskonzepte– Datennahe Logik– ...

XML Standards

XML – W3C DOM – W3C XPath – W3C XML Schema – W3C XSL and XSLT – W3C WebDAV - IETF SQL/XML – ANSI/ISO

Wie speichert man XML-Dokumentein Datenbanken ...?

Herausforderungen

relationale Datenbestände

Abruf als XML

Beispiele:- heterogene Systeme- XML Schnittstellen- Versorgung des Workflow- Abruf per HTTP oder FTP

Herausforderungen

XML-Dokumente

Abruf mit SQL

Überführung in DWHoder andere Anwendung

Beispiele:- XML als Austauschformat im e-Business- Sammlung und Aggregation im DWH- DWH-Versorgung aus heterogenen Systemen

Herausforderungen

relationale Datenbestände

Integritäts-bedingungen

XMLDatenbestände

Beispiele:- XML Dokumente nativ speichern (jur. Gründe)- Validitätsprüfung gegen Stammdaten in einer relationalen Datenbank- Validierung im laufenden Workflow

HerausforderungenReferentielle Integrität in XML

XML-Datenmodell referentielle Integrität

– ID– IDREF– IDREFS

Dokumentbezogen

HerausforderungenReferentielle Integrität in XML

XML-Datenmodell referentielle Integrität

– ID– IDREF– IDREFS

Dokumentbezogen Das Dokument kann

ohne weiteres nicht verlassen werden

1. Lösungsansatz

relationale Speicherung Zwei-Tabellen-Modell

ID TYPE VALUE 1 ELE Order 2 ELE Kunde 3 ELE Name 4 TEX Mustermann 5 ATT id 6 TEXT 4711

ID PARENT_ID 1 NULL 2 1 3 2 4 3 5 1 6 5

1. Lösungsansatz

• Semantik aus Tabellen nicht nachvollziehbar• Schwierige Integration

• z.B. Stammdatentabellen• Tuning schwierig• Indizierung schwierig• Volltextsuche schwierig• Komplexe JOIN-Operationen

2. Lösungsansatz

relationale Speicherung Fachliches Datenmodell

ID NAME DEPOT 1 Muster 4711 2 Meier 4712 3 Schmitt 4713

ID WERTPAPIER 1 VW AG 2 Oracle Corp. 3 Sun Microsys.

KUNDEN

2. Lösungsansatz

• Semantik nachvollziehbar• einfache Integration mit anderen Tabellen• Tuning für bestimmte Abfragen möglich• Volltextsuche schwierig• Komplexe Logik (Dokumentzerlegung)• Informationsverluste

gute Eignung, wenn XML als reines Transportformat dient und die relationale Tabellenform im Vordergrund steht.

3. Lösungsansatz

• Reine XML-Datenbank• "native" XML-Speicherung• für XML Strukturen optimiert• gute XML Schnittstellen• gute XML-Indizierung• Integration mit relationalen Daten schwierig

• Locking-Verhalten• Referentielle Integrität

Native XML-Speicherung

XML:DB Initiative Definition

– Unterstützt das XML-Datenmodell Elemente, Attribute, PCDATA, Kommentare, ...

– Garantiert 1:1-Wiederherstellung des XML-Dokumentes

– Unterstützt standardkonforme Abfragesprachen– Ist unabhängig von physikalischer Speicherung!

HTTP

FTP

SQL*NET

User XDB: XML DB Repository

Oracle Shared Server

XML Schema

Oracle XML DB: Architektur

User SCOTT: XML Dokumente

WebDAV

FTP

Installation der XML DB

Softwareinstallation– Keine Besonderheiten, automatisch bei der DB-

Konfiguration, zusätzliches Schema XDB, FTP und HTTP-Portkonfiguration

Datenbankerstellung

Installation der XML DB

Installation der XML DB

Voraussetzungen:– R2 Standard oder Enterprise Edition– Oracle Java VM – Shared Server um Protokolle zu nutzen

Manuelle Installation in eine bestehende Datenbank– $ORACLE_HOME/rdbms/admin/catqm.sql

[XDB-Passwort] [XDB-TS] [TEMP-TS]– $ORACLE_HOME/rdbms/admin/catxdbj.sql

Deaktivieren der XML DB– $ORACLE_HOME/rdbms/admin/catnoqm.sql– Datenbank neu starten

TCP/IP Port für FTP und HTTP

TCP/IP Port für FTP und HTTP

Manuelle Änderung der Ports über Skripts– $ORACLE_HOME/rdbms/admin/catxdbdbca.sql

[ftp-port] [http-port]

Protokollserver abschalten– Jeweiligen Port auf "0" setzen

XML DB Repository

TableName ACL

Property 1

Property N

Property N

XML Tabellen imUser Schema

B TreeIndex

TextIndex

HierarchicalIndex

FTP

HTTP

xdb$resource

Resource_view

Das Repository

RESOURCE_VIEW PATH_VIEW

SQL> desc path_view Name Null? Type ----------------------------------------- -------- -------------------------- PATH VARCHAR2(1024) RES SYS.XMLTYPE LINK SYS.XMLTYPESQL> desc resource_view Name Null? Type ----------------------------------------- -------- ------------------------- RES SYS.XMLTYPE ANY_PATH VARCHAR2(4000)

Folder anlegen

PL/SQL

per FTP oder im WebDAV-Client

declare result boolean;begin result := dbms_xdb.createFolder('/public/<Ein Name>');end;COMMIT;

Clob

Relational

Die Speicherart richtetsich nach den Anforderungen der Anwendung:

• Konkurrierender Zugriff• Vokabularänderung• Ladeperformance• Abfrage-Performance• Redundanzen• XML Schema Support

Unterschiedliche Speicherarten

Nativ alsDokument

NativObjektrelational

Clob

Relational

Die Speicherart richtetsich nach den Anforderungen der Anwendung:

• Konkurrierender Zugriff• Vokabularänderung• Ladeperformance• Abfrage-Performance• Redundanzen• XML Schema Support

Unterschiedliche Speicherarten

Nativ alsDokument

NativObjektrelational

Dokumentorientiertes XML

Dokument im Vordergrund Dokument-Transformationen Dokument als kleinste Einheit

– Lesen und Schreiben als Ganzes Dokumentteile nur selten Skalare Daten nur selten

– Häufig Volltextsuche XML als medienneutrales Speicherformat

Datenorientiertes XML

Daten im Vordergrund Dokumentkontext nicht unbedingt wichtig Häufig strukturierte Suche

– größer-als und kleiner-als Abfragen XML als Austauschformat

– Standardisierung der Werkzeuge– Integration in die IT-Landschaft

Mischformen

Beide Konzepte in einem Dokument Beispiele:

– Zeitungsartikel mit strukturierten Zusatzinformationen Autor, Zeitung, Erscheinungsdatum ...

– Kreditanträge Strukturierte Kunden- und Kreditdaten Unstrukturierte Begründungen

Technologie-StackXML-Dokumentspeicherung

OS-Blöcke System Calls

Technologie-StackXML-Dokumentspeicherung

OS-Blöcke

relationaleTabellen(Oracle 1.0)

System Calls

SQL

Technologie-StackXML-Dokumentspeicherung

OS-Blöcke

relationaleTabellen

System Calls

SQL

ObjektrelationaleDatenbank(Oracle 8.0)

SQL – ObjektrelationaleSyntax (SQL99)

Technologie-StackXML-Dokumentspeicherung

OS-Blöcke

relationaleTabellen

System Calls

SQL

ObjektrelationaleDatenbank

SQL – ObjektrelationaleSyntax (SQL99)

XML DB(Oracle 9.2)

XML-NavigationXPath

Technologie-Stackrein dokumentorientiertes XML

OS-Blöcke System Calls

SQL

XML DB XML-NavigationXPath

CLOB-Datentyp

relationaleTabellen

Beispiel: Börsennachrichten

Beispiel: BörsennachrichtenBeschreibung als XML Schema

Beispiel: BörsennachrichtenÜberlegungen ... Strukturierte Informationen

– (WKN, Reuters-Code, Quelle, Kontakte, Datum)– Zugriff auf Elemente im Vordergrund– Kombination mit bspw. Kursdatenbank– Strukturierte Speicherung

Unstrukturierte Informationen– Zugriff auf den vollständigen Text im Vordergrund– Volltextsuche– Unstrukturierte Speicherung

Beispiel BörsennachrichtRegistrierung des XML Schemas 1. Ansatz:

– W3C XML Schema wird unverändert in Oracle registriert

– Oracle Enterprise Manager

Beispiel BörsennachrichtRegistrierung des XML Schemas Schema-URL zur

Identifizierung des XML Schemas in der Datenbank

URL sinnvoll jeder String möglich

Beispiel BörsennachrichtErgebnisse: Feingranulares Mapping Abbildung nach Objektmodell darüberhinaus „BODY“-Element SQL-Datentypen Systemgenerierte SQL-Namen

– Case-Sensitiv– Sequence-Element für Eindeutigkeit über Namespaces

hinweg– Neue Namen bei neuer Schema-Registrierung

Tabellen für XML-Dokumente bereits angelegt

"annotated" XML Schema

XML Schema mit "Zusatzinformationen" Herstellerspezifische Tags und Attribute zur

Steuerung der Persistenz Namespace-Konzept bei der Schema-Prüfung ignoriert der Parser gemäß

W3C "alle Namespaces, die er nicht kennt"– Datenbankunabhängige Parser beachten nur das

allgemeine XML Schema– Bei Registrieren in der Datenbank beachtet diese nur das

allgemeine XML Schema und die eigenen "Annotations"

annotated XML Schema

http://www.w3.org/2001/XMLSchema

http://xmlns.oracle.com/xdb

Ein XML Schema kann Annotations fürverschiedene Datenbanken enthalten,da die jeweiligen Datenbanken fremde Annotations gemäß W3C ignorieren sollen

http://xmlns.microsoft.com/xml

Beispiel BörsennachrichtSchema Annotations

Das XML Schema beschreibt die Struktur des XML-Dokumentes, nicht deren physikalische Speicherung in einer Datenbank.

Die Oracle XML DB macht daher Standard-Annahmenbei der Nachbildung des XML-Datenmodells mit Objekttypen.

<xs:complexType name="aktie_t"> <xs:attribute name="wkn" use="required" type="xs:string"> <xs:attribute name="name" use="required" type="xs:string"> <xs:attribute name="reuters" use="required" type="xs:string"> <xs:attribute name="branche" use="required" type="xs:string">  </xs:complexType>

Beispiel BörsennachrichtSchema Annotations

<xs:complexType name="aktie_t" xdb:SQLType="NR_AKTIE_T"> <xs:attribute name="wkn" use="required" xdb:SQLName="AKT_WKN"> <xs:attribute name="name" use="required" xdb:SQLName="AKT_NAME"> <xs:attribute name="reuters" use="required" xdb:SQLName="AKT_REUTERSCODE"> <xs:attribute name="branche" use="required" xdb:SQLName="AKT_BRANCHE">  </xs:complexType>

SQLType: Abbildung von XML-Datentypen auf Oracle-Datentypen

SQLName: Benennung von Elementen in Oracle

Der XML-Komplexe Typ „aktie_t“ wird in der Datenbank als Objekttyp „NR_AKTIE_T“ nachgebildet.

Beispiel BörsennachrichtSchema Annotations

<xs:element name="body" xdb:SQLName="NR_BODY"> <xs:complexType mixed="true" xdb:SQLType="CLOB"> <xs:choice minOccurs="0" maxOccurs="unbounded"> </xs:complexType></xs:element>

SQLType: Abbildung von XML-Datentypen auf Oracle-Datentypen

SQLName: Benennung von Elementen in Oracle

Der komplexe Typ für den Nachrichten-Body wird nicht als Objekttyp, sondern als CLOB abgebildet.

Beispiel BörsennachrichtSchema Annotations

<xs:element name="kontakt" type="kontakt_t" minOccurs="0" maxOccurs="unbounded" xdb:SQLName="NR_KONTAKT" xdb:defaultTable="NR_KONTAKT_TAB" xdb:SQLInline="false"/>

SQLInline: Speicherung in einer separaten Tabelle(true = nein; false = ja)

defaultTable: Name der Objekt-Tabelle

Die Kontakte werden in einer separaten Tabelle NR_KONTAKT_TAB gespeichert

Beispiel: BörsennachrichtenBeschreibung als XML Schema

Speicherung alsGanzes

Beispiel BörsennachrichtRegistrierung des XML Schemas 2. Ansatz:

– Oracle-Annotations– SQLType– SQLName– ...

Beispiel BörsennachrichtErgebnisse: Anforderung genaues Mapping Abbildung nach Objektmodell BODY Element als Fließtext (CLOB) abgebildet SQL-Datentypen Eigene SQL-Namen

– Hier: case-insensitiv– Ohne Sequence-Element– Bei jeder Schema Registrierung gleich

Tabellen für Nachrichten und Kontakte angelegt

Weitere Schema-AnnotationsmaintainDOM

<xs:complexType name="aktie_t" xdb:SQLType="NR_AKTIE_T"xdb:maintainDOM="false">

<xs:attribute name="wkn" use="required" xdb:SQLName="AKT_WKN"> <xs:attribute name="name" use="required" xdb:SQLName="AKT_NAME"> <xs:attribute name="reuters" use="required" xdb:SQLName="AKT_REUTERSCODE"> <xs:attribute name="branche" use="required" xdb:SQLName="AKT_BRANCHE">  </xs:complexType>

maintainDOM: Ein/Ausschalten der "DOM-Fidelity"

Steuert die Speicherung von Kommentaren, Processing Instructions, Mixed Content

Wenn "native XML Speicherung" nicht benötigt wird, kanndie "DOM-Fidelity" so ausgeschaltet werden. Die Performance

verbessert sich.

Schema AnnotationsmaintainDOM

Schema AnnotationsmaintainDOM Informationsverlust

– Kommentare– Processing Instructions– Mixed Content

Sinnvoll ....– Wenn "native XML-Speicherung" nicht nötig ist– Ladeperformance ist "Bottle-Neck"

Beispiel Börsennachrichten

Neue Tabellen anlegen– XMLTYPE als DatentypCREATE TABLE nachrichten_tab( nr_id number(10), nr_nachricht xmltype);

Ohne Angabe eines bereits registrieren XML Schemas fehlen die Angaben zur Objektrelationalen Speicherung,

daher wird dokumentbasiert als CLOB gespeichert.

Beispiel Börsennachrichten

Neue Tabellen anlegen– XMLTYPE als Datentyp

CREATE TABLE nachrichten_tab( nr_id number(10), nr_nachricht xmltype)xmltype column nr_nachricht store as object relationalxmlschema "<schema-url>" element "<root element>"

Tabellen partitionieren

Prinzip– Aufteilung in mehrere physikalische Einheiten– Nach außen eine normale Tabelle

Nutzen: Performance– Abfragen können auf einzelne

Partitionen beschränkt werden(Optimizer)

– Partitionen können als Einheit gelöscht oder verschoben werden

Tabellen partitionierenfür XML-Tabellen Voraussetzungen:

– Objektrelationale Speicherung – Lizenzierung (Datenbank-Option)

Partitionierungskriterien– Range, Hash, List– Partitionierungsschlüssel

Indizes– Globale Indizes– Lokale Indizes

Beispiel BörsennachrichtenPartitionierte Tabelle Neue Tabellen anlegen

create table nachrichten_part_tab of xmltypexmlschema "http://www.oracle.com/aktie/nachrichten.xsd"element "nachricht"partition by range (xmldata.nr_datum)( partition nachrichten_before_1999 values less than (to_date('01-01-1999','DD-MM-YYYY')), : partition nachrichten_2004 values less than (to_date('01-01-2005','DD-MM-YYYY')))/

nachricht:aktiedatumquellekontaktetitelbody

Beispiel Börsennachrichten:XML-Datenmodell In XML ist das Dokument die zentrale Einheit Integritätsbedingungen ohne weiteres nur innerhalb

des Dokumentes möglich Referenz zu anderen Dokumenten oder Daten muss

programmiert werdenaktie:wknnamebranchereuters

kontakte:zielartadresse

1 1

1 *

nachricht:aktiedatumquellekontaktetitelbody

Beispiel Börsennachrichten:Reales Datenmodell Überschreiten der Dokumentgrenze Durch Datenbank-Constraints Integritätsbedingungen möglich zu ...

– relationalen Tabellen – anderen XML-Dokumenten

aktie:wknnamebranchereuters

kontakte:zielartadresse

1

1 *

*

XML Schema referenzieren

<nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"typ="Unternehmensmeldung"

xsi:schemaLocation="http://www.oracle.com/aktie/nachrichten.xsd C:\nachrichten.xsd"

>

W3C-Standardkonforme Verknüpfung von XML Dokumentund XML Schema. Das Dokument wird häufig als "Instanz" des XML Schemas bezeichnet.Gut zu erkennen ist die Lage des Schemadokumentes im Dateisystem.

XML Schema referenzieren

<nachricht xmlns="http://www.oracle.com/aktie/nachrichten.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"typ="Unternehmensmeldung"

xsi:schemaLocation="http://www.oracle.com/aktie/nachrichten.xsd http://www.oracle.com/aktie/nachrichten.xsd"

>

Unter dieser URL wurde das XML Schema in Oracle mit dem Enterprise Manager registriert.

Beispiel BörsennachrichtenStatus .... XML Schema

– Oracle Annotations vorhanden– Schema in der Datenbank registriert

Speicherungsmodell objektrelational– Objekttypen vorhanden– Tabelle vorhanden

Laden

objektrelationale Speicherung– XML Schema muss in XML-Dokument

referenziert sein– FTP und WebDAV– SQL und SQL*Loader

Beispiel BörsennachrichtenLaden mit FTP oder WebDAV

Referenz auf XML Schema?

dokumentbasiert im XML DB Repository

Nein

Ohne Schema-Referenz ist keineTabellenzuordnung und somit keine objektrelationale Speicherung möglich.

Oracle kann nicht wissen, ob dieses XML Dokument gültig ist oder nichtund speichert es daher als Datei ins XML DB Repository.

Beispiel BörsennachrichtenLaden mit FTP oder WebDAV

Referenz auf XML Schema?

XML Schemaregistriert?

dokumentbasiert im XML DB Repository

Ja

Nein

Wenn das XML Schema nicht registriert wurde, kann Oracle ebenfalls nicht prüfen, ob das XML Dokument gültig ist oder nicht.

Es wird daher ebenfalls als Datei ins XML DB Repository abgelegt.

Beispiel BörsennachrichtenLaden mit FTP oder WebDAV

Referenz auf XML Schema?

XML Schemaregistriert?

Verstoß gegenConstraints?

Dokument wirdabgewiesen

Ja

Ja

Ja Wenn die Inhalte des XML-Dokumentsgegen hinterlegte Integritätsbedinungen verstoßen, wird es abgelehnt. Es ist für die Datenbank ungültig.

Beispiel BörsennachrichtenLaden mit FTP oder WebDAV

Referenz auf XML Schema?

XML Schemaregistriert?

Verstoß gegenConstraints?

objektrelational in XMLTYPE-Tabelle

Ja

Ja

Nein

Beispiel Börsennachrichten

SQL INSERTINSERT INTO NR_NACHRICHT_TABVALUES( XMLTYPE ( '<?xml version="1.0"?><nachricht xmlns........ ));

Schemavalidierung

"leichte Schemaprüfung"– beim Einfügen– Strukturprüfung– Performancegründe

vollständige Schemavalidierung– aktivierbar– RDBMS-Trigger

Beispiel BörsennachrichtenZugriff mit HTTP Zugriff mit URL

– Protokoll– Hostname und TCP/IP Port

http://localhost:9080/

Beispiel BörsennachrichtenZugriff mit HTTP Zugriff mit URL

– Protokoll– Hostname und TCP/IP Port– Datenbank-Kürzel

http://localhost:9080/oradb/

Beispiel BörsennachrichtenZugriff mit HTTP Zugriff mit URL

– Protokoll– Hostname und TCP/IP Port– Datenbank-Kürzel– Datenbankschema

http://localhost:9080/oradb/<User-ID>

Beispiel BörsennachrichtenZugriff mit HTTP Zugriff mit URL

– Protokoll– Hostname und TCP/IP Port– Datenbank-Kürzel– Datenbankschema– Tabelle

http://localhost:9080/oradb/<User-ID>/NR_NACHRICHT_TAB

Beispiel BörsennachrichtenZugriff mit HTTP Zugriff mit URL

– Protokoll– Hostname und TCP/IP Port– Datenbank-Kürzel– Datenbankschema– Tabelle– Optional: XPath Einschränkung

http://localhost:9080/oradb/<User-ID>/NR_NACHRICHT_TAB/ROW/nachricht/kontakt[ziel="Finanzen.net"]

Zugriff mit SQL

Zugriff auf XML-Elemente XPath SQL-Funktionen

– EXTRACT– EXTRACTVALUE– EXISTSNODE

Zugriff mit SQL

Gib mir von allen Nachrichten das Datum, die Aktiengesellschaft und den Titel

select extractvalue (value(e), '/nachricht/datum') as datum ,extractvalue (value(e), '/nachricht/aktie/@name') as ag ,extractvalue (value(e), '/nachricht/titel') as titelfrom nr_nachricht_tab e

Zugriff mit SQL

Gib mir von allen Oracle-Nachrichten das Datum und den Titel

select extractvalue (value(e), '/nachricht/datum') as datum ,extractvalue (value(e), '/nachricht/aktie/@name') as ag ,extractvalue (value(e), '/nachricht/titel') as titelfrom nr_nachricht_tab ewhere existsnode( value(e), '/nachricht/aktie[@wkn="871460"]') = 1

Ohne „Query Rewrite“

XML-Dokument

DOM-Baum

wkn

SELECT extractvalue ...FROM nr_nachricht_tab e

Mit „Query Rewrite“

SELECT extractvalue ... FROM nr_nachricht_tab e

Objektrelational gespeichertesXML-Dokument

SELECT e.xmldata. ... FROM nr_nachricht_tab e

Query Rewrite nachricht:aktiedatumquellekontaktetitelbody

aktie:wknnamebranchereuters

kontakte:zielartadresse

Query Rewrite

Optimizer Funktionalität nicht möglich bei ...

– XPath Funktionen– XPath Variablen– Wildcards– UNION Operator

Technologie-StackXML-Dokumentspeicherung

OS-Blöcke

relationaleTabellen

System Calls

SQL

ObjektrelationaleDatenbank

SQL – ObjektrelationaleSyntax (SQL99)

XML DB(Oracle 9.2)

XML-NavigationXPath

QU ERY

REWRITE

Beispiel-BörsennachrichtB-Tree Index Einfaches Beispiel

Voraussetzung– Objektrelationale Speicherung

create index idx_aktie_wkn on nr_nachricht_tab e(extractvalue(value(e),'/nachricht/aktie@wkn')/

Beispiel-BörsennachrichtB-Tree Index

NR_NACHRICHT_TAB Objekt vollständig in einer Tabellenzeileabgelegt

Arrays werden intern als Bytestrom gespeichert

B-Tree Indizes auf Elemente im Array nicht möglich

Default-Abbildung eines XML-Dokumentes mit 1:n Hierarchien

Beispiel-BörsennachrichtB-Tree Index

NR_NACHRICHT_TAB

Auslagerung der 1:n Beziehung in eine eigene Tabelle mit Schema Annotations.

NR_KONTAKTE_TAB

Beispiel-BörsennachrichtB-Tree Index Indizierung eines Elementes in einer

1:n Hierarchie Voraussetzungen:

– Objektrelationale Speicherung– 1:n Hierarchie wird in eigene Tabelle ausgelagert– Schema Annotation "storeVarrayAsTable" wird

auf "true" gesetzt.create index idx_kontaktart on nr_kontakte_tab e(extractvalue(value(e),'/kontakt@art')/

Piecewise Update

XML Dokumentknoten gezielt ändern kein Ersetzen des Gesamtdokumentes nur auf SQL-Ebene

– FTP und WebDAV sind dateiorientiert SQL-Funktion updateXML() Durch Query Rewrite direkte Änderung der

Objektrelationalen Tabellenspalten

Piecewise Update

Ändere den Firmennamen bei den Nachrichten mitder WKN 871460 auf "Oracle Corporation"

update nr_nachricht_tab e set value(e) = updatexml ( value(e), ,'/nachricht/aktie/@name' ,'Oracle Corporation' ) where existsnode ( value(e) ,'/nachricht/aktie[@wkn="871460"]' ) = 1

Piecewise Update

Ändere die Kontaktart "email" nach "Mail"

update nr_kontakte_tab e set value(e) = updatexml ( value(e) ,'/konkakt/@art' ,'Mail' ) where existsnode ( value(e), ,'/kontakt[@art="email"]' ) = 1

Einsatzgebiete für die Praxis

Layoutneutrale Dokumentspeicherung Datenaustausch und Integration

– DWH-Integration mit relationalen Sichten auf XML-Dokumente

– Datenaustausch mit XML-Sichten auf relationale Datenbestände

– XML-Messaging

Layoutneutrale Dokumentspeicherung Dokumente als XMLTYPE unstrukturiert

– u.U. strukturierte Teile– Börsennachrichten

Volltextsuche Stylesheet-Transformationen

Volltextsuchemit Oracle TEXT Volltextindex auf jedes XML-Dokument

möglich Oracle TEXT Index

– Wildcard Suche (links und rechts)– Phrasensuche– Unscharfe Suche (Fuzzy)– Wortstamm– Stopwort-Listen– Thesaurus-Unterstützung

Volltextsuche mit Oracle TEXT

ctx_ddl.create_section_group( group_name => 'nachrichten_sec_group' ,group_type => 'PATH_SECTION_GROUP');

create index idx_nachrichten_volltexton nr_nachricht_tab e (value(e))indextype is CTXSYS.CONTEXTparameters ('section group nachrichten_sec_group')

Index anlegen

Volltextsuche mit Oracle TEXT

select score(1), value(e)from nr_nachricht_tab ewhere CONTAINS ( value(e) ,' (Software and Kooperation) INPATH (/nachricht/body) ' ,1 )>0

Volltextrecherche ...

Stylesheet Transformationen

Datenbankintern– Stylesheet muss in der Datenbank vorliegen

SQL-Funktion– XMLTransform()

Aggregat über mehrere Dokumente – XMLAgg()

Stylesheet-Transformationen

select xmltransform ( value(e) ,xdburitype ( '/public/idevelop/nachricht_html.xsl' ).getxml() )from nr_nachricht_tab e

1:1-Transformation ... n:1 Transformation ...

Stylesheet-Transformationen

View-Definition

TABLE VIEW HTTP-Zugriff 1:1 TransformationHTTP-Zugriff n:1 Transformation

Einsatzgebiete für die Praxis

Layoutneutrale Dokumentspeicherung Datenaustausch und Integration

– DWH-Integration mit relationalen Sichten auf XML-Dokumente

– Datenaustausch mit XML-Sichten auf relationale Datenbestände

– XML-Messaging

Beispiel Börsennachrichten

Kontaktinformationen– relationale Tabelle– schneller Zugriff– Herausforderung:

eine Nachricht hat viele Kontakte

WKN

GESELLSCHAFT

KONTAKTART

ADRESSE

Beispiel BörsennachrichtenKontakt-View

create or replace view nr_kontakteasselect extractvalue (value(e), '/nachricht/aktie/@wkn') as wkn ,extractvalue (value(e), '/nachricht/aktie/@name') as gesellschaft,extractvalue (value(k), '/kontakt/@art') as kontaktart ,extractvalue (value(k), '/kontakt/ziel') as kontaktziel ,extractvalue (value(k), '/kontakt/adresse') as adressefrom nr_nachricht_tab e ,table(xmlsequence(extract(value(e),'/nachricht/kontakt'))) k

Einsatzgebiete für die Praxis

Layoutneutrale Dokumentspeicherung Datenaustausch und Integration

– DWH-Integration mit relationalen Sichten auf XML-Dokumente

– Datenaustausch mit XML-Sichten auf relationale Datenbestände

– XML-Messaging

Beispiel Aktienkurserelationales Tabellenschema

aktien_tab:wknname

kurse_tab:wkndatumkurs

1

*

Beispiel AktienkurseXML Views Erstellen der View

create or replace view aktienkurse_xml as select XMLElement( "Aktienkurse", XMLElement("Aktie", XMLAttributes( wkn as "WKN", ak.name as "Gesellschaft")), XMLElement("Kurse", XMLAgg( XMLElement( "Kurs" ,XMLAttributes( k.datum as "vom"), k.kurs))))as kurse_dokumentfrom aktien_tab ak join kurse_tab k using (wkn)group by wkn, ak.name

XML Views

Nutzbar wie XMLType Tabellen Stylesheet-Transformationen Zugriff durch HTTP einfacher Austausch relational vorliegender

Daten

XML-Datenaustauschmit Views Kommunikation mit Internet-Protokollen

HTTP, FTP

INSTEAD-OFTrigger

Einsatzgebiete für die Praxis

Layoutneutrale Dokumentspeicherung Datenaustausch und Integration

– DWH-Integration mit relationalen Sichten auf XML-Dokumente

– Datenaustausch mit XML-Sichten auf relationale Datenbestände

– XML-Messaging

Oracle Advanced Queuing

Datenbankinternes Messaging Asynchron Point-to-Point / Publish-Subscribe Nutzung der Oracle Datenbank

– Backup / Recovery, Datenintegrität, Skalierbarkeit, Nachrichten-Persistenz

Transaktionskonzept SQL-Zugriff

Oracle Advanced Queuing

Messaging auf einem Rechnerknoten Point-to-Point

Anwendung

Advanced QueueingAnwendung

Anwendung

Oracle

Enqueue Dequeue

Oracle Advanced Queuing

Messaging auf einem Rechnerknoten publish-subscribe

Anwendung

Advanced QueueingAnwendung

Anwendung

Anwendung

Oraclepublish

publish

subscribe

subscribe

Oracle Advanced Queuing

Messaging über Rechnergrenzen

Anwendung

Anwendung

Anwendung

Advanced Queues

Advanced Queues

Advanced Queues

Oracle

Oracle

Oracle

Propagate

Propagate

Enqueue

Enqueue

Anwendung

Dequeue

Dequeue

Oracle AQ Fähigkeiten

Nachrichten– Nachrichten können nach dem Dequeue behalten werden– Nachrichten-Historie– Nachrichten-Transformation– Kombination mit Oracle DWH-Fähigkeiten– Business-Intelligence

API-Unterstützung– SQL, PL/SQL (DBMS_AQ)– Java (JMS, Oracle AQ API, JDBC)

Oracle AQ – PL/SQL Pakete

DBMS_AQADM– Administrative Aufgaben– Einrichten von Queues– Einrichten von Queue Tabellen– Rechteverwaltung

DBMS_AQ– Umgang mit Queues– Einstellen von Nachrichten (ENQUEUE)– Auslesen von Nachrichten (DEQUEUE)

Oracle AQ

Nachrichten-Transformation

Anwendung

Advanced Queues

Advanced Queues

Advanced Queues

Oracle

Oracle

Oracle

Propagate

PropagateAnwendung

Dequeue

Dequeue

Transform

Anwendung

Anwendung

Enqueue

Enqueue

Transform

Oracle AQ - Transformationen

PL/SQL oder Java-Funktion Aktiv ...

– direkt nach dem ENQUEUE– direkt vor dem DEQUEUE– direkt vor oder nach dem PROPAGATE

Oracle AQ und XML DB

Definition des Queue-Payload als XMLType Nachrichten-Transformation mit XSLT ENQUEUE / DEQUEUE mit

– AQ Servlet– Oracle XML DB und RDBMS Trigger

Zugriff auf Dokumentteile Integration mit Views

– Relationale Views auf Queue Tabelle– XML-Views auf relationale Tabellen mit anschließendem

ENQUEUE des virtuellen Dokumentes

Oracle AQ und XML DB

Datenbank IDatenbank III [DWH]

Oracle

Datenbank II [Order]

FTPHTTP

Anwendung

Oracle AQ und XML DB

Datenbank IDatenbank III [DWH]

Oracle

Datenbank II [Order]

FTPHTTP

Enqueue

Log

Anwendung

Oracle AQ und XML DB

Datenbank IDatenbank III [DWH]

Oracle

Datenbank II [Order]

FTPHTTP

Enqueue

Log

Propagate

Propagate

Anwendung

Dequeue

Oracle AQ und XML DB

Datenbank IDatenbank III [DWH]

Oracle

Datenbank II [Order]

FTPHTTP

Enqueue

Log

Anwendung

Propagate

Propagate

Dequeue

Dequeue

Dequeue

Zusammenfassung:Oracle XML DB: zwei Welten ...

SQL XM

L

RDBMS XML Server

... wachsen zusammen!

SQL XM

L

Integrität

Ansichten

Indizes

Oracle

XML-Technologie mit Oracle

Integrität

Ansichten

Indizes

Messaging mit Oracle AQ

Weitere Informationen

Oracle Technology Network– http://otn.oracle.com/tech/xml/xmldb/content.html– http://otn.oracle.com/products/aq/index.html

Dokumentation– Oracle XML database Developers Guide

http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96620/toc.htm

– Oracle Application Developer's Guide - Advanced Queuinghttp://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96587/toc.htm

Ralf Müller Oracle Technology Center 30. Mai, 1997

Oracle8, the O/R Database for VLDB

Ralf Müller, semjena.ppt, 26-May-97

ADT Order: more detailed

Order

idcustomerentry_dol_cntorder_lines

Item

idnamepricedata

Stock

itemquantitydist_01dist_02

OrderLine

idquantitystockorder

in Stock

refers to

has lines

... (customer ADT)

ADT Order: modelling in Oracle8

CREATE TYPE Item_t AS OBJECT ( i_id NUMBER, i_name VARCHAR2(24), i_price NUMBER, i_data VARCHAR2(50),

MEMBER FUNCTION getPricewithVAT RETURN NUMBER);

CREATE TYPE BODY Item_t AS MEMBER FUNCTION getPricewithVAT RETURN NUMBER IS BEGIN RETURN i_price * 1.15; END getPricewithVAT;END;

CREATE TABLE items of Item_t;

standard Oracle7 types

create table from ADT

ADT Order: modelling in Oracle8 (cont.)

CREATE TYPE Stock_t AS OBJECT ( s_item REF Item_t, s_quantity NUMBER, s_dist_01 CHAR(24), s_dist_02 CHAR(24),

MAP MEMBER FUNCTION item_name RETURN VARCHAR2);

CREATE TYPE BODY Stock_t AS MAP MEMBER FUNCTION item_name RETURN VARCHAR2 IS BEGIN RETURN s_item.i_name; END item_name;END;

CREATE TABLE stocks of Stock_t;

reference to item_t

dereference s_item

ADT Order: modelling in Oracle8 (cont.)

CREATE TYPE Order_line_t AS OBJECT (ol_id NUMBER,ol_quantity NUMBER,ol_stock REF stock_t,ol_order REF order_t

);

CREATE TYPE order_line_nt AS TABLE OF Order_line_t;