Einsatz von Oracle bei DB Research Visual Studio, ODT (Oracle Developer Tools for VS.NET) Wer sind...

51
Guido Haase DOAG Regionaltreffen 23.10.2007 Einsatz von Oracle bei DB Research

Transcript of Einsatz von Oracle bei DB Research Visual Studio, ODT (Oracle Developer Tools for VS.NET) Wer sind...

Guido HaaseDOAG Regionaltreffen23.10.2007

Einsatz von Oracle bei DB Research

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 2

Agenda

11 Wer sind wir? Was machen wir?

22

33

44 Einsatz von Oracle Features

55

Oracle Infrastruktur und Konventionen

Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8)

Anhang

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 3

Wer sind wir?

Deutsche Bank Research

� Think Tank der Deutschen Bank (DB) für Trends in Wirtschaft, Gesellschaftund Finanzmärkten. Leiter ist Prof. Dr. Norbert Walter.

� Ca. 90 Mitarbeiter, davon ca. 50% Analysten (meist Volkswirtschaftler) und ca.50 % Service-Abteilungen. (Research IT, Marketing, Übersetzung, …).

� Öffentliche Research-Ergebnisse / Publikationen stehen im Internet unterwww.dbresearch.de zur Verfügung.

Vortragender (Guido Haase)

� Mitarbeiter von DB Research, Research IT. Team-Leiter ist Franz Stevens.

� Arbeitsschwerpunkt: Datenbanknahe Software-Entwicklung (Java, Oracle)

� Oracle-Erfahrung seit 1994, Dipl.-Ing. (BA), Dipl.-Math.

11 Wer sind wir? Was machen wir?

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 4

Was machen wir als Research IT?

� ReWARE (Research Warehouse)= Solution / Plattform für (makroökonomische) Research-Abteilungen (DB Research)

� Oracle Datenbank (Rebase) als zentrales Repository– Ziel: Keine Insellösungen mit Access / Excel

� Vielzahl technischer Komponenten– Anwendungen (Namen beginnen nach Konvention mit RE…)

– Office-Add-Ins (Word, Excel) zur Automatisierung und Zugriff auf Rebase

– Hintergrundprozesse (Monitoring, Mailing, Reporting, Loader, …)– Web-Infrastruktur / Web-Angebot

11 Wer sind wir? Was machen wir?

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 5

Was machen wir als Research IT?

Publikationserstellung und Verteilung

11 Wer sind wir? Was machen wir?

Rebase

DB LDAP

ReCAS

ReBUILD

MS-Office

Web-Angebot

ReREGION Länder/Regionen

Kunden und Abos

ReMAIL Mail Delivery

Dokumente

ReWEB

Content / Stammdaten

ReWAS WebContent

ReADMIN Stammdaten

HTML-Editor

Notes

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 6

Was machen wir als Research IT?

Zeitreihen-Management (Data Warehouse Charakter)

11 Wer sind wir? Was machen wir?

Rebase

Bloomberg

Global Insight

Eurostat

ReTIS

Excel-Add-In

ReSEM Sector Model

Suche, Workspace

ReCORA Country Rating

ReCHART Publikationscharts

3. Party eViews, Stata, …

Zeitreihen-Lieferanten

ETL

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 7

Basis-Technologien / Tools

� Oracle (10.2)– Unternehmenslizenz für Oracle Server EE (inkl. Partioning)– Tools: TOAD, PowerDesigner (Schemapflege)

� Java (1.5)– Fat Clients: WebStart, Swing, JDBC (Thin)– Web: Apache/Tomcat, Servlets, JDBC

– Tools: JBuilder, NetBeans, JClassChart, Open Source (FOP, POI, JCalendar, …)

� Microsoft (Office-Add-Ins)– VBA (DB-Zugriff: OLE DB)– .NET (DB-Zugriff: ODP - Oracle Data Provider for .NET)

Tools: Visual Studio, ODT (Oracle Developer Tools for VS.NET)

11 Wer sind wir? Was machen wir?

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 8

Rahmenbedingungen

� Heterogene Benutzergruppen und Frontends– Analysten wollen Office (Excel) / Analyse-Software (Statistikprogramme)– Publikationsassistenten wollen Office (Word) / einfache Tools (Windows L&F)

– Marketing, Webmaster wollen Automatisierung, Multi-Media

– (End-) Kunden wollen Print-Publikationen (PDF) / Web / Blackberry / Mail

� Dynamische und flexible Anforderungen des Fachbereichs (DB Research)– Evolutionäre Entwicklung (kurze Entwicklungszyklen, häufiges Deployment)

� Strenge DB-Vorgaben bezüglich Sicherheit– 4 Eyes Principle, Separation of Duty, Least Privileges, Account-Management, Logging– Offizielle Vorgaben für Software-Entwicklung folgen Wasserfall-Modell

– Change Management, Regelmäßige Revision

11 Wer sind wir? Was machen wir?

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 9

Domänenlogik

� PL/SQL als Domain-Layer (nach Fowler: Transaction Script)– Komplexität der Domänenlogik (Geschäftslogik) meist gering

Ausnahme: Vorhersage-Modelle im Zeitreihenbereich, Rechtesystem

– Viele CRUD-Anwendungen, häufiges Hinzufügen von Attributen

� Empfehlung: http://martinfowler.com/articles/enterprisePatterns.html

Martin Fowler:

Patterns für Enterprise

Application-Architecture

11 Wer sind wir? Was machen wir?

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 10

Agenda

22 Oracle Infrastruktur und Konventionen

11

33

44 Einsatz von Oracle Features

55

Wer sind wir? Was machen wir?

Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8)

Anhang

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 11

Oracle-Versionen und Instanzen

Oracle-Versionen und Plattformen (historisch)

� Bis 2001: Oracle 8.1.5 (Windows NT 4), Oracle 8.1.6 (HPUX)

� 2001-2004: Oracle 8.1.6 (Sun Solaris), Oracle 8.1.6 (HPUX)

� 2004-2007: Oracle 9.2 (Linux)

� Seit Mai 2007: Oracle 10.2 (AIX)Administration von interner Infrastrukturgruppe (GTO/IES)

Oracle Instanzen (2007)

� Rebase Produktion und Standby (BCP-Lokation)

� Internet Produktion (Teilkopie von Rebase) und Standby

� UAT (User Acceptance Test)

� Development, Daily (tägliche Kopie)

22 Oracle-Infrastruktur und Konventionen

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 12

Produktions-Instanz

Produktions-Datenbank (Rebase)

� Oracle-Version: Enterprise Edition 10.2.0.3, 64 Bit with Partioning

� Rechner : IBM p550, AIX OS 5.3.4

� Prozessor: 2mal 4-core boards, 1.6 GHz

� Hauptspeicher: 24 GB RAM (20 SGA)

� Datenvolumen: Tablespaces: ca. 220 GB (400 GB SAN)

Schema-Objekte

� Ca. 500 Tabellen (überwiegend "Entity"-Tabellen)

� Ca. 300 PL/SQL-Packages, 170.000 Line of Code

� Ca. 8 Mio. Zeitreihen, 700 Mio. Zeitreihenwerte (partitionierte IOT, ca. 50 GB)

22 Oracle-Infrastruktur und Konventionen

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 13

Schema-Konventionen

� Trennung von Applikations-Schema und Connect-User– Ein „ReWARE-Owner-Schema“ (locked) mit Tabellen, PL/SQL (Definer Right)

– Alle Tabellen, Views, Packages besitzen ein Public Synonym.

– Applikationen greifen stets über Public Synonym und technischen User zu.

� Alle Schema-Objekte und Kommentare in Englisch– Englische Begriffe sind meist kürzer als deutsche. Fachsprache ist meist Englisch.

� IDs grundsätzlich vom Typ VARCHAR2(20), <Synonym>0..0<SequenceNo>– Vorteil: Eindeutige ID innerhalb der DB, Vorteile in Java (nullable, String=Objekt)

– Nachteil: Erhöhter I/O und Platzbedarf und geringere Performance (Joins!)– Alternative: GUID (Global Unique Identifier), select sys_guid() from dual

22 Oracle-Infrastruktur und Konventionen

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 14

Schema-Konventionen

� DDL– Alle Schema-Änderungen werden per Skript erst getestet und dann deployed.

– Produktive Deployments über DB-Tool Remedy (4-Augen-Prinzip)

� DML– Alle Schreibzugriffe (DML) über PL/SQL-Prozeduren. IDs als OUT-Parameter.

– Array-In-Schnittstellen über "flachgeklopfte" Object Type Collections.

– Updates, Deletes werden in eine Tabelle (update_logs) per Trigger protokolliert.

� Sparsame Verwendung von Views– Beispielsweise als externe Schnittstellen bzw. bei erwarteten Änderungen.

– Komplexes Lesen über PL/SQL mittels PIPE ROW

22 Oracle-Infrastruktur und Konventionen

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 15

Schema-Konventionen

� Beispiel für DML-Logging

22 Oracle-Infrastruktur und Konventionen

update_logs (uplo)

uplo_idsyno_nameobj_idobj_id_part2operationaudit_dateupdatorupdator_systemsys_att_nameold_valuenew_value

VARCHAR2(20)VARCHAR2(30)VARCHAR2(20)VARCHAR2(20)VARCHAR2(1)DATEVARCHAR2(20)VARCHAR2(30)VARCHAR2(40)VARCHAR2(4000)VARCHAR2(4000)

not nullnot nullnot nullnullnot nullnot nullnot nullnot nullnot nullnullnull

user_groups (usgr)

usgr_idcreatorcr_dateupdatorup_dateupdator_systemnamestatuslabel_teit_iddescriptionrelm_buse_id

VARCHAR2(20)VARCHAR2(20)DATEVARCHAR2(20)DATEVARCHAR2(30)VARCHAR2(80)VARCHAR2(4)VARCHAR2(20)VARCHAR2(2000)VARCHAR2(20)

not nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnull

CREATE OR REPLACE TRIGGER recasp.usgr_uplo_trAFTER INSERT OR UPDATE OR DELETEON recasp.user_groups FOR EACH ROW

DECLAREv_op VARCHAR2(1) := 'U';

BEGINIF inserting THEN

wri_logs.ins_uplo('I', 'USGR', :new.usgr_id, null, null);RETURN;

END IF;IF deleting THEN v_op := 'D'; END IF;wri_logs.ins_uplo(v_op, 'USGR', :old.usgr_id, 'NAME', :old.name, :new.name);...

END;

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 16

Benutzer- und Rechteverwaltung

� Eigene Benutzerverwaltung bzw. Tabelle (ca. 120.000 User)– Aufwändig wegen Security-Vorgaben (password expiry, locking, logging, ...)

� Wenige Named User (DBAs/Entwickler, Technische Connect User)– Teilweise problematisch, da Tools (z.B. Access) Named User brauchen

� Jede Applikation nutzt einen Connect-User mit minimalen SQL-Rechten– Einsatz von Secure Application Role (set_role nach erfolgreicher Anmeldung)

� Eigene Rechteverwaltung (siehe auch Anhang)– Systemrechte (entsprechen i. W. Oracle Rollen), z.B. rewas_admin, webmaster– Objektrechte, z. B. Lesezugriff auf Zeitreihen, Editor einer Publikationsreihe

22 Oracle-Infrastruktur und Konventionen

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 17

Agenda

33

11

44

22 Oracle Infrastruktur und Konventionen

55

Wer sind wir? Was machen wir?

Einsatz von Oracle Features

Anhang

Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8)

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 18

Grundlagen Unicode Zeichensatz

� Dokumentation– http://www.oracle.com/technology/tech/globalization/index.html, http://www.unicode.org

� UNICODE-Encodings (Implementierungen der Codepoints)– UCS-2 (Universal Character Set): 2 Byte fix, Unicode Standard 3.0, kompakt für asiatische

Schriftzeichen, Standard für Java– UTF-8 (UCS Transformation Format 8-Bit): 1-4 Bytes (variable), 7-bit ASCII Obermenge,

Europäische Zeichen: 1-2 Byte, asiatische Zeichen 3 Byte, Internet-Standard– UTF-16: Erweiterung von UCS-2 mit 2 oder 4 Bytes, Windows-Standard (ab Windows 2000)

� Oracle-Unicode-Zeichensätze– Namensstandard: <Language><Bit Size><Encoding> (AL=All Languages)– AL32UTF8: UTF-8-Codierung, Neuester Unicode-Standard, Unicode Database Character Set– AL16UTF16: UCS-2-Codierung, Neuester Unicode-Standard, Default National Character Set– UTF8: Heute Deprecated, Nur Unicode 3.0, seit Oracle 8

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 19

Zeichensatz-Migration

� Ziel: Zeichensatz-Umstellung– Von: WE8ISO8859P15 (Western Europe ISO 8859 Page 15): (=Latin-1+Euro)– Neu: AL32UTF8 (National Character Set bleibt bei AL16UTF16)

� Konsequenzen– Erhöhter Speicherbedarf (10-30%) für SQL CHAR-Typen– Erhöhter Prozessorbedarf bei Stringverarbeitung in PL/SQL (laut DOKU)– Umstellung von nls_length_semantic von BYTE auf CHAR

– Note: 144808.1 "Examples and limits of BYTE and CHAR semantics usage"– Instanz-Parameter, Parameter gilt nur für neu erstellte Objekte!– Umstellung über Export/Import als Teil der Migration (csalter-Skript nicht anwendbar)

� Nützliche SQL-Funktionen– UNISTR('\<UCS2 code>'): Erzeugung von Unicode select UNISTR('\20AC') FROM dual

Beispiel. EuroZeichen: Latin-15: A4, Java/C#: \u20AC, HTML: &#x20AC; oder &euro;– DUMP(<column>,1016): Hexadezimale Anzeige von Spalteninhalten

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 20

Probleme der Zeichensatzumstellung

Datenbankseitige Probleme

� Physikalische 4000-Byte-Grenze für VARCHAR!– Anzahl der speicherbaren Zeichen reduziert sich in Abhängigkeit von Daten!

– Teilweise Umstellung auf CLOB vor der Migration

– Oracle Tool csscan liefert gute Dienste zur Analyse vor der Migration.

� nls_length_semantic gilt nicht für die Deklaration von PL/SQL-Variablen ?!?– Verwendung von %TYPE, %ROWTYPE funktioniert.

– variable VARCHAR(100) entspricht variable VARCHAR(100 Byte) !

� „alter index ... rebuild online“ deutlich beschränkter (ORA-1450).– Ging vorher für VARCHAR2(2000), jetzt nur noch VARCHAR2(946 BYTE)

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 21

Probleme der Zeichensatzumstellung

Applikationsseitige Probleme

� Änderungen im Source-Code notwendig:– Streaming (Servlets, Files, …) innerhalb der Anwendungen auf UTF-8 umstellen!

(Default meist betriebssystemabhängig, Windows: MS Windows 1252 CodePage)– z.B. POI erfordert explizite Angabe des Encodings setEncoding(HSSFCell.ENCODING_UTF_16)

– z.B. DatabaseMetaData.getColumns(), rs.getInt("column_size") liefert Byteanzahl!

� Windows SQL-IDEs sind häufig nicht Unicode-fähig!– sqlplus(w) / TOAD können kein Unicode darstellen– Oracle SQL Developer in "Tools->Preferences->Encoding" auf UTF-8 umstellen– Office, ODT (Oracle Developer Tool) können Unicode.

� Hausgemachte Probleme:– Verwendung eines zeichensatzabhängigen Verschlüsselungsalgorithmus (RC4)– Änderung des Monatnamens bei TO_CHAR mittels 'MON' von 'Mär' auf 'MRZ'

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 22

Datenbank-Migration

� Vorbereitung (Testen!)– Analyse und Bereinigung möglicher Längenprobleme in PL/SQL und beim Import (csscan)– Umstellung der Java-Anwendungen auf 10.2 JDBC-Treiber (bei uns ORA-600 mit 9.2-Treiber)

� Migration– Erzeugen der Oracle 10.2-Instanz mit nls_length_semantic=BYTE ! (wichtig)– Umstellen auf nls_length_semantic=CHAR, Tabellen anlegen, Import der Schemata mit Daten– Änderung einiger Oracle Text-Indizes, Aufbau der Oracle Text-Indizes

(User CTXSYS kein DBA mehr, Datastores nicht mehr in CTXSYS, alle Preferences mit Schema)

� Nachbearbeitung– Umstellung von Perfstat auf AWR (Automatic Workload Repository)– Optimizer-Probleme und sonstige Probleme gelöst.

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 23

Probleme durch 10.2 / Neue Plattform

� GROUP BY impliziert kein ORDER BY mehr

� Oracle JVM deutlich langsamer als früher bzw. als Betriebssystem JVM

� Teilweise ORA-600 bei Oracle Text / SCORE– Workaround: alter session set "_projection_pushdown"=false;

� Probleme mit CBO / offensiven SQL-Statements– z.B. zu frühe / häufige Ausführung von teuren PL/SQL-Funktionen in SQL.

Workaround:SELECT ... FROM ... WHERE ... AND proc_result(...)=1 umformuliert zuSELECT * FROM (SELECT ..., proc_result(...) result FROM ... WHERE ...)WHERE result=1

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 24

Fazit

� Wechsel der Oracle-Version von 9.2 auf 10.2 relativ problemlos– Ein Muss wegen 9.2 Desupport

– Gewonnene Features / Gesamtperformance rechtfertigen den Aufwand

– Wie erwartet einige Probleme mit dem Optimizer.

� Wechsel des Zeichensatzes.– Datenbank-Migration (bei uns) relativ einfach z.B. VARCHAR2(2000)->VARCHAR2(4000)

– Überraschend problematisch und aufwändig bezüglich bestehender Anwendungen.

– Der Gewinn ist erst mittelfristig / langfristig. Eine Investition in die Zukunft !

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 25

Agenda

44

11

33

22 Oracle Infrastruktur und Konventionen

55

Wer sind wir? Was machen wir?

Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8)

Anhang

Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 26

4 Oracle Editionen und Features

� http://www.oracle.com/database/product_editions.html� SELECT * FROM V$OPTION ORDER BY PARAMTER;

SELECT * FROM dba_registry ORDER BY comp_name;

44 Einsatz von Oracle Features

OptionPatitioning

JaJaJaOracle Text

JaSecure Application Role

JaVirtual Private Database

JaJaJava Support

No LimitEdition 1: 2 Sockets

Edition: 4 Sockets / RAC

1 CPU / 1 GB / 4GB

(Windows, Linux)

CPU / RAM / DB Size

EnterpriseStandardExpressFeature

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 27

4.1 Java Stored Procedures

� Dokumentation (10g)– Java Developer's Guide (218 Seiten), JDBC Developer's Guide (484 Seiten)

� Grundlagen Oracle JVM– Oracle 10g JVM ist J2SE 1.4.2 kompatibel (Oracle 9i: 1.3, Oracle 11g: 1.5)– PL/SQL-Package dbms_java dient zur Administration.

– Jede Oracle Session verhält sich wie eine eigene JVM.

– Core Java sind „native compiled“ / Ahead-of-Time compilation.

– Eigene Klassen werden interpretiert undkönnen mittels ncomp compiliert werden.

– Oracle 11g unterstützt (wieder) Just-In-Time Compiler (JIT).

– Oracle JVM interagiert mit Oracle Libraries und nicht mit OS.

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 28

4.1 Java Stored Procedures

� Entwicklungsprozess– Entwicklung in gewohnter IDE (z.B. JDeveloper)

– Abweichungen zur normalen JVM:– Connection ist implizit gegeben und verwendet JDBC server-side internal driver.DriverManager.getConnection("jdbc:default:connection:")

– GUIs sind nicht sinnvoll / supported.– Threading erfolgt über Oracle-Mechanismen. Eigene Threads sollten vermieden werden.– Einstiegspunkt sind statische Methoden (nicht die main-Methode).– Java System.out kann auf serveroutput umgeleitet werden.set serveroutput on; exec dbms_java.set_output(999999);

– Aufruf der Java-Klassen (statische Methode) mittels PL/SQL-WrapperCREATE OR REPLACE PROCEDURE test (para1 VARCHAR2)

AS LANGUAGE JAVA

NAME 'testpackage.Testklasse.test(java.lang.String)';

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 29

4.1 Java Stored Procedures

� Deployment– Laden des Source-Codes oder der kompilierten Klassen mittels loadjava-Utility

– Klassen/Properties werden als Schema-Objekte geladen (gilt auch für jar).Klassennamen stehen mit Kurznamen / Alias in user_objects.select

dbms_java.longname(object_name)

from user_objects

where object_type='JAVA CLASS'

– Tabelle JAVA$OPTIONS speichertEinstellungen der Kompilierung.

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 30

4.1 Java Stored Procedures

Beispiel: Zugriff auf Deutsche Bank LDAP-Verzeichnis (Group Directory)

� Verwendung von JNDI (Java Naming and Directory Interface)– Tutorial: http://java.sun.com/products/jndi/tutorial/getStarted/TOC.html– Verarbeitung ähnlich zu JDBC, Abfragesprache aber LDAP Filter– Java schreibt Ergebnis in "GLOBAL TEMPORARY TABLE" db_dir_temp, damit alle

Clients das Ergebnis lesen können.– Performance von LDAP teilweise deutlich langsamer als SQL (TimeLimit setzen)

� PL/SQL-Package (db_dir)– Umsetzung von Parametern in LDAP-Filter (UPN-Notation)search(p_mail_address => '%haase%', p_db_location_city => 'frankfurt')LDAP-Filter: (&('mail=*haase*')('dblocationcity=frankfurt'))

� Alternative: Implementierung über PL/SQL-Package dbms_ldap (seit 9.2)– siehe auch DOAG News 3/2007-Artikel "Datenqualität für Verzeichnisdienste"

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 31

4.1 Java Stored Procedures

Beispiel: PL/SQL-Mailing� Verwendung von JavaMail zur Versendung von Mails mit Anhang

– Dokumentation: http://java.sun.com/products/javamail– Laden von mail.jar, activation.jar notwendig

� Prozedur send_mails als Wrapper für Java Stored Procedure.– Body kann vom Typ CLOB sein. Anhänge vom Typ BLOB oder Dateien in UTL_FILE_DIR.

� PL/SQL-Package mail_send erlaubt (asynchrone) Versendung von Mails.– Mails werden in eine Mail-Tabelle (Queue) gespeichert und asynchron versendet.– Versendung kann über 2 SMTP-Server erfolgen und wird im Fehlerfall wiederholt.

� Alternative: Implementierung über utl_mail– SMTP_OUT_SERVER ist Paramter der init.ora?– Attachment ist RAW (32K-Genze) und kein BLOB?

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 32

4.1 Java Stored Procedures (Fazit)

� Architektonisch fragwürdig– Kein Ersatz für Applikationsserver !

– Skalierung auf der Datenbank? Lizenzkosten?

– Mögliche Performance-Probleme in Java reist Datenbank mit runter. Monitoring?– Deployment nicht unkritisch

� Moderater Einsatz zur Erweiterung fehlender PL/SQL-Features ist ok.– Falls man überhaupt PL/SQL verwendet

33 Migration Oracle 9.2 nach 10.2

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 33

4.2 Virtual Private Database (VPD)

� Dokumentation– Oracle Database Security Guide 10.2, Kapitel 14 & 15 (ca. 50 Seiten)

– siehe auch DOAG News 3/2007-Artikel "Fine Grained Access Control"

� Fine-grained Access Control (Row Level Security)– Grundidee: Server modifiziert SQL durch Anhängen von Prädikaten

Prädikat wird (dynamisch) durch eine Policy Function geliefert.FUNCTION policy_function(v_schema VARCHAR2, v_object VARCHAR2)

RETURN VARCHAR2

– Policies können für Tabellen und Views vergeben werden.

– Policies wandeln eine Tabelle faktisch in eine View (transiente View).

– Policies können dynamisch (Default), statisch oder Context-Sensitive sein.– RETURN-Wert=NULL: keine Einschränkung. "1=0": kein Ergebnis.

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 34

4.2 Virtual Private Database (VPD)

� Administration– PL/SQL-Package dbms_rls dient zur Administration.

– Mehrere Policies pro Objekt werden mit AND verknüpft.

– Policies können gruppiert und gruppenweise aktiviert/deaktiviert werden.– Für select, insert, update, delete sind unterschiedliche Policy-Functions möglich.

– Für den User SYS gelten keine Security Policies (z.B. Export-Problem).

– View dba_policies zeigt Policies. v$vpd_policy zeigt Prädikate für aktuelle Cursor.

� Virtual Private Database (VPD)– Grundidee: Kombination aus Fine-grained Access Control und Appl. Context– Oracle 10.2 erlaubt auch Column-Level VPD

(deshalb RLS=Row Level Security ein unglücklicher Name).

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 35

4.2 Virtual Private Database (VPD)

� Application Context– Grundidee: Speicherung von globalen / session-abhängigen Attributen.– Jeder Context kann eine Menge von Attributen und Werten speichern.

– Es gibt verschiedene Contexttypen: z.B. global (SGA), session-based (UGA).– Oracle liefert den Context USERENV für lesenden Zugriff auf Umgebung.

Beispiel: SELECT SYS_CONTEXT('userenv','host') FROM dual

� Secure session-based Application Context ist für VPD relevant.– Grundidee: Setzen der Attributwerte erfolgt in einem Trusted PL/SQL-Package.

Beispiel: CREATE CONTEXT testcontext USING test_context_package;

In Trusted Package: dbms_session.set_context('testcontext', 'dep_id', '10')

In Policy Function: RETURN 'dep_id=sys_context(''testcontext'',''dep_id'')'

– Aufruf der Trusted PL/SQL-Package vor erstem Datenzugriff (z.B. Logon-Trigger)

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 36

4.2 Virtual Private Database (VPD)

� Warum machen wir VPD?– Ursprünglich wurde ReWARE als Plattform für eine Abteilung entwickelt

– Neue Anforderung: Weitere Mandanten mit teilweiser Datenteilung bzw. Trennung

– VPD ist/war einfachste Lösung, da (fast) keine Änderungen am Code notwendig sind.

� Mögliche Alternativen (auf der Datenbank)– Kontrolle der Sichtbarkeit über Views oder Lesen über PL/SQL

– Eigenes Schema pro Mandant (GRANTs auf geteilte Daten)

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 37

4.2 Virtual Private Database (VPD)

� Vorgehen– Neue Tabelle Realms mit Daten zu Mandanten (Client-Begriff war bereits vergeben)

– Benutzer werden Mandanten zugeordnet (z.B. durch Abteilungszugehörigkeit).

– Context (REWARE), eine Trusted-Package und Policy-Package(s) angelegt.

– Änderungen an mandantenabhängigen Tabellen:

– Erweiterung um Realm-Id mit Foreign Key auf Tabelle Realm– Verknüpfen mit Security Policy (DBMS_RLS.ADD_POLICY)

– Before-Insert Trigger setzt Realm-Id aus Context.Der Realm des Erstellers einer Zeile wird dadurch zum Besitzer der Zeile.

– Applikationen setzen Context-Attribute nach erfolgreichem Login beim Start.

(Kein Context -> keine Daten über Prädikat '1=0' sichtbar)

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 38

4.2 Virtual Private Database (VPD)

44 Einsatz von Oracle Features

tosc_relm_fk

realms (relm)

buse_idcreatorcr_dateupdatorup_dateshort_name

VARCHAR2(20)VARCHAR2(20)DATEVARCHAR2(20)DATEVARCHAR2(20)

not nullnot nullnot nullnot nullnot nullnot null

topic_schemas (tosc)

tosc_idrelm_buse_idcreatorcr_dateupdatorup_dateupdator_systemtopi_schematypelabel_teit_idextendablethes_id

VARCHAR2(20)VARCHAR2(20)VARCHAR2(20)DATEVARCHAR2(20)DATEVARCHAR2(30)NUMBER(2)VARCHAR2(1)VARCHAR2(20)VARCHAR2(4)VARCHAR2(4)

not nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnot nullnullnull

DBMS_RLS.ADD_POLICY(object_schema => 'RECASP',object_name => 'TOPIC_SCHEMAS',policy_name => 'TOSC_READ_POLICY',,function_schema => 'RECASP',,policy_function => 'RL_SECURITY.GENER_READ_SEC',statement_types => 'SELECT',update_check => FALSE);

DBMS_RLS.ADD_POLICY(object_schema => 'RECASP',object_name => 'TOPIC_SCHEMAS',policy_name => 'TOSC_WRITE_POLICY',function_schema => 'RECASP',policy_function => 'RL_SECURITY.GENER_WRITE_SEC',statement_types => 'INSERT,UPDATE,DELETE',update_check => TRUE);

-- Policy FunctionsCREATE OR REPLACE PACKAGE recasp.rl_security AS

FUNCTION gener_read_sec (d1 VARCHAR2, d2 VARCHAR2)RETURN VARCHAR2;FUNCTION gener_write_sec(d1 VARCHAR2, d2 VARCHAR2)RETURN VARCHAR2;

END;

CREATE TRIGGER recasp.tosc_before_ins_upd_trBEFORE INSERT recasp.topic_schemasFOR EACH ROWDECLAREBEGIN

IF :new.relm_buse_id IS NULL THEN:new.relm_buse_id :=sys_context('REWARE', 'REWARE_USERID');

END IF;END;

-- einmalig Secure session-based Application Context:CREATE CONTEXT reware USING recasp.reware_security_context;

-- Trusted PackageCREATE OR REPLACE PACKAGErecasp.reware_security_contextAS

PROCEDURE set_user_context(p_userid VARCHAR2);PROCEDURE clear_context;

END;

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 39

4.2 Virtual Private Database (VPD)

� Folgerungen / Anmerkungen– Ausgewählte Named User (neben SYS) dürfen ohne Context global lesen.

– Explizites Anmelden an andere Mandanten notwendig (Syntax: User@<Realm>)

(Zulässige Mandantenwechsel werden über das eigene Rechtesystem gesteuert)– Rechtesystem kennt mittlerweile globale und mandanten-abhängige Rechte.

� Probleme– Perfomance-Tuning schwierig (SQL-Trace zeigt z.B. nur Original-SQL).

– Policy-Function sollte aus Performance-Gründen kein SQL enthalten.– Deployment der Policy-Function bei permanenter Tabellennutzung schwierig (Lock)

� Fazit– Ein gutes Feature (falls man es braucht)

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 40

4.3 Oracle Text

� Dokumentation– Text Application Developer‘s Guide (ca. 200 Seiten), Text Reference (ca. 500 Seiten)– siehe auch DOAG News 3/2007-Artikel "Thesauri und Text-Retrieval mit Oracle 10g"

� Einsatzgebiete von Oracle Text / Indextypen– Volltextsuche in Dokumenten

– Indextyp: CONTEXT, Query-Operator: CONTAINS– Synchronisierung: asynchron über ctx_ddl.sync_index

– Katalog-Anwendungen– Indextyp CTXCAT, Query-Operator: CATSEARCH– Synchronisation: transaktional– Performant für „Mixed Queries“ bei kleinen Textfragmente bzw. Dokumenten

– Dokument-Klassifikation– Indextyp CTXRULE, Query-Operator: MATCHES

– XML-Suche– Indextyp CTXPATH, Query-Operator: existNode(), Index für Spalte XMLTYPE

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 41

4.3 Oracle Text

� Grundidee– Ein Textindex speichert pro Wort (Token) die Dokumente, die das Wort enthalten.

Sonderzeichen (z.B. Satzzeichen) werden nicht indidiziert.– Überblick über den Oracle Text Indexing Process

44 Einsatz von Oracle Features

Stemming, Fuzzy Search

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 42

4.3 Oracle Text

� Aufbau eines Context-Index– Erstellen des Indexes mittels

CREATE INDEX <IndexName> ON <TableName> (<Column>)INDEXTYPE IS ctxsys.context PARAMETERS ('<Preferences>')

– Optionales Anpassen der Index-Präferenzen über ctx_ddl.create_preference

– Monitoring über ctxsys-Views ctx_index_errors, ctx_pending, ctx_indexes, …

� Einige Abfrage-Features eines Context-Index– Logische Operatoren, z.B. where contains(text_col, 'dog and cat')>0

– Stemming, z.B. where contains (text_col, '$dog')>0

– Proximity Searching, z.B. where contains(text_col, 'near((dog,cat),1)')>0

– Wildcard Searching, z.B. where contains(text_col, 'cat%')>0

– Scoring, z.B.select SCORE(1) from xyz where contains(text_col, 'cat%', 1)>0

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 43

4.3 Oracle Text

� Beispiel 1: Zeitreihensuche

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 44

4.3 Oracle Text

� Volltextindex für Zeitreihen

44 Einsatz von Oracle Features

Zeitreihen-Tabelle time_series (tise)

tise_id: VARCHAR2(20)

tise_freq: VARCHAR2(2)

tise_desc: VARCHAR2(2000)

CREATE INDEX recasp.tise_desc_i ONrecasp.time_series (tise_desc)INDEXTYPE IS CTXSYS.CONTEXTPARAMETERS('stoplist ctxsys.empty_stoplist

lexer recasp.tise_lexerwordlist recasp.tise_wordliststorage recasp.recasp_storage_lmemory 50M');

SQL: Alle Tageszeitreihen (tise_freq='D') mit Kalkstein/Chalk (inkl. Stemming) im BeschreibungsfeldSELECT tise_id FROM tiseWHERE contains(tise_desc, '$kalkstein or $chalk')>0AND tise_freq = 'D'

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 45

4.3 Oracle Text

� Beispiel 2: Volltextsuche in Dokumenten

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 46

4.3 Oracle Text

� Volltextindex für Dokumente

44 Einsatz von Oracle Features

Dokument-Tabelle (blor)blor_id: VARCHAR2(20)

blobelem: BLOB

Dokument-Text-Tabelle (blot)query_id: NUMBER

document: CLOB

Dokument-Such-Tabelle (dose)blor_id: VARCHAR2(20)

dose_text: VARCHAR2(2)

publ_date DATE

CREATE INDEX BLOR_IM ON blob_records(blobelem)INDEXTYPE IS CTXSYS.CONTEXTPARAMETERS('stoplist recasp.multilang_stoplist

filter ctxsys.auto_filter …);

ctx_doc.filter(…)

CREATE INDEX DOSE_IM ON docu_search(dose_text)INDEXTYPE IS CTXSYS.CONTEXTPARAMETERS('section recasp.dose_text_sectioner

datastore recasp.dose_text_datastore …);

Tabelle(n) mit Metadaten zum Dokumenttitle: VARCHAR2(200)

author: VARCHAR2(200)…

Datastore-Prozedur:recasp.dose_text_datastore(…)

XML

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 47

4.3 Oracle Text (Fazit)

� Ein Feature, was man häufiger einsetzen sollte!– Volltextsuche ist häufig eine gute Ergänzung zur strukturierten Suche.– Anwender sind Google gewohnt (einfache Suche für "Simple Search").– Basistechnologie für Oracle Secure Enterprise Search.

� Handhabung– Die initiale Anwendung ist sehr einfach.– Optimale Nutzung (z.B. Konfiguration) kostet etwas Zeit / Erfahrung.– Oracle Text kostet aufgrund der Architektur Ressourcen.– Vorsicht bei Multimedia-Dateien (Bilder, Audio, Video) mit den Filtern.

� Teilweise Performance-Probleme bei großen Datenmengen– Ausführungsplan des Optimizer teilweise unverständlich schlecht– Initiale Suche bei nicht geladenem Cache und großen Daten kann sehr lang sein.

44 Einsatz von Oracle Features

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 48

Agenda

55 Anhang

22

33

44 Einsatz von Oracle Features

Oracle Infrastruktur und Konventionen

Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8)

Wer sind wir? Was machen wir?11

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 49

dbresearch Homepage

55 Anhang

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 50

Google Web-Suchsyntax

� Such-Grundlagen– Automatische "und"-Suche. Case-Insesitive-Suche.– Wortgruppensuche (Phrasen) über Anführungszeichen "wort1 wort2"– Stoppwörter sind über +Stoppwort oder Wortgruppensuche suchbar.– Ausschließende Begriffe über -Wort.– Ergebnisses nach Relevanz sortiert.– Wortstammsuche/Wortvarianten (implizit) nur für Englisch!

� Erweiterte Suche / Features– Eingabe-Korrekturvorschlag (Meinten Sie: …)– Anzeige der Links auf eine Seite. Anzeige indizierter Seiten aus dem Cache.– Einschränkung auf Dateityp, Sprache, Position (Titel, URL, Site), Index-Zeitraum.– Odersuche über "OR" (Logische Ausdrücke/Klammerung scheint nicht zu gehen)– Zugverbindungen z.B. Frankfurt München 13:30

55 Anhang

G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 51

Disclaimer

© Copyright 2007. Deutsche Bank AG, DB Research, D-60262 Frankfurt am Main, Deutschland. Alle Rechte vorbehalten.Bei Zitaten wird um Quellenangabe „Deutsche Bank Research“ gebeten.

Alle Meinungsaussagen geben die aktuelle Einschätzung des Verfassers wieder, die nicht notwendigerweise der Meinungder Deutsche Bank AG oder ihrer assoziierten Unternehmen entspricht. Alle Meinungen können ohne vorherigeAnkündigung geändert werden. Die Meinungen können von Einschätzungen abweichen, die in anderen von der DeutscheBank veröffentlichten Dokumenten, einschließlich Research-Veröffentlichungen, vertreten werden. Die vorstehendenAngaben werden nur zu Informationszwecken und ohne vertragliche oder sonstige Verpflichtung zur Verfügung gestellt.Für die Richtigkeit, Vollständigkeit oder Angemessenheit der vorstehenden Angaben oder Einschätzungen wird keineGewähr übernommen.