Einsatz von Oracle bei DB Research Guido Haase DOAG Regionaltreffen 23.10.2007 Agenda 1 Wer sind wir? Was machen wir? 2 Oracle Infrastruktur und Konventionen 3 Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8) 4 Einsatz von Oracle Features 5 Anhang G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 2 Wer sind wir? Was machen wir? Wer sind wir? Deutsche Bank Research Think Tank der Deutschen Bank (DB) für Trends in Wirtschaft, Gesellschaft und 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 unter www.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. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 3 Wer sind wir? Was machen wir? 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 4 Wer sind wir? Was machen wir? Was machen wir als Research IT? Publikationserstellung und Verteilung Kunden und Abos Dokumente ReCAS MS-Office ReREGION HTML-Editor ReWAS WebContent ReBUILD ReADMIN Stammdaten DB LDAP ReWEB Web-Angebot Notes ReMAIL Mail Delivery G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 5 Rebase Content / Stammdaten Länder/Regionen Wer sind wir? Was machen wir? Was machen wir als Research IT? Zeitreihen-Management (Data Warehouse Charakter) Excel-Add-In Zeitreihen-Lieferanten Eurostat ReCHART Publikationscharts Bloomberg ReTIS Suche, Workspace ETL Global Insight ReCORA Country Rating Rebase … G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 6 ReSEM Sector Model 3. Party eViews, Stata, … Wer sind wir? Was machen wir? 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 7 Wer sind wir? Was machen wir? 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 8 Wer sind wir? Was machen wir? 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 9 Agenda 1 Wer sind wir? Was machen wir? 2 Oracle Infrastruktur und Konventionen 3 Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8) 4 Einsatz von Oracle Features 5 Anhang G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 10 Oracle-Infrastruktur und Konventionen 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), 2004-2007: Oracle 9.2 (Linux) Oracle 8.1.6 (HPUX) 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 11 Oracle-Infrastruktur und Konventionen 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 12 Oracle-Infrastruktur und Konventionen 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 13 Oracle-Infrastruktur und Konventionen 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 14 Oracle-Infrastruktur und Konventionen Schema-Konventionen Beispiel für DML-Logging user_groups (usgr) usgr_id creator cr_date updator up_date updator_system name status label_teit_id description relm_buse_id VARCHAR2(20) VARCHAR2(20) DATE VARCHAR2(20) DATE VARCHAR2(30) VARCHAR2(80) VARCHAR2(4) VARCHAR2(20) VARCHAR2(2000) VARCHAR2(20) update_logs (uplo) not null not null not null not null not null not null not null not null not null not null null uplo_id syno_name obj_id obj_id_part2 operation audit_date updator updator_system sys_att_name old_value new_value VARCHAR2(20) VARCHAR2(30) VARCHAR2(20) VARCHAR2(20) VARCHAR2(1) DATE VARCHAR2(20) VARCHAR2(30) VARCHAR2(40) VARCHAR2(4000) VARCHAR2(4000) CREATE OR REPLACE TRIGGER recasp.usgr_uplo_tr AFTER INSERT OR UPDATE OR DELETE ON recasp.user_groups FOR EACH ROW DECLARE v_op VARCHAR2(1) := 'U'; BEGIN IF 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, ... END; G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 15 :new.name); not null not null not null null not null not null not null not null not null null null Oracle-Infrastruktur und Konventionen 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 16 Agenda 1 Wer sind wir? Was machen wir? 2 Oracle Infrastruktur und Konventionen 3 Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8) 4 Einsatz von Oracle Features 5 Anhang G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 17 Migration Oracle 9.2 nach 10.2 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 18 Migration Oracle 9.2 nach 10.2 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 19 Migration Oracle 9.2 nach 10.2 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 20 Migration Oracle 9.2 nach 10.2 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' G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 21 Migration Oracle 9.2 nach 10.2 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. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 22 Migration Oracle 9.2 nach 10.2 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 zu SELECT * FROM (SELECT ..., proc_result(...) result FROM ... WHERE ...) WHERE result=1 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 23 Migration Oracle 9.2 nach 10.2 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 ! G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 24 Agenda 1 Wer sind wir? Was machen wir? 2 Oracle Infrastruktur und Konventionen 3 Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8) 4 Einsatz von Oracle Features 5 Anhang G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 25 Einsatz von Oracle Features 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; Feature CPU / RAM / DB Size Express Standard Enterprise 1 CPU / 1 GB / 4GB Edition 1: 2 Sockets No Limit (Windows, Linux) Edition: 4 Sockets / RAC Java Support Ja Ja Virtual Private Database Ja Secure Application Role Ja Oracle Text Patitioning G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 26 Ja Ja Ja Option Einsatz von Oracle Features 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 und kö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. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 27 Einsatz von Oracle Features 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-Wrapper CREATE OR REPLACE PROCEDURE test (para1 VARCHAR2) AS LANGUAGE JAVA NAME 'testpackage.Testklasse.test(java.lang.String)'; G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 28 Einsatz von Oracle Features 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 speichert Einstellungen der Kompilierung. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 29 Einsatz von Oracle Features 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" G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 30 Einsatz von Oracle Features 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? G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 31 Migration Oracle 9.2 nach 10.2 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 32 Einsatz von Oracle Features 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. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 33 Einsatz von Oracle Features 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). G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 34 Einsatz von Oracle Features 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 35 Einsatz von Oracle Features 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 36 Einsatz von Oracle Features 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 37 Einsatz von Oracle Features 4.2 Virtual Private Database (VPD) CREATE TRIGGER recasp.tosc_before_ins_upd_tr BEFORE INSERT recasp.topic_schemas FOR EACH ROW DECLARE BEGIN IF :new.relm_buse_id IS NULL THEN :new.relm_buse_id := sys_context('REWARE', 'REWARE_USERID'); END IF; END; topic_schemas (tosc) tosc_id relm_buse_id creator cr_date updator up_date updator_system topi_schema type label_teit_id extendable thes_id VARCHAR2(20) VARCHAR2(20) VARCHAR2(20) DAT E VARCHAR2(20) DAT E VARCHAR2(30) NUMBER(2) VARCHAR2(1) VARCHAR2(20) VARCHAR2(4) VARCHAR2(4) not null not null not null not null not null not null not null not null not null not null null null tosc_relm_fk -- einmalig Secure session-based Application Context: CREATE CONTEXT reware USING recasp.reware_security_context; -- Trusted Package CREATE OR REPLACE PACKAGE recasp.reware_security_context AS PROCEDURE set_user_context(p_userid VARCHAR2); PROCEDURE clear_context; END; DBMS_RLS.ADD_POLICY( object_schema => ,object_name => ,policy_name => ,function_schema => ,policy_function => ,statement_types => ,update_check => 'RECASP' 'TOPIC_SCHEMAS' 'TOSC_READ_POLICY', 'RECASP', 'RL_SECURITY.GENER_READ_SEC' 'SELECT' FALSE); DBMS_RLS.ADD_POLICY( object_schema => ,object_name => ,policy_name => ,function_schema => ,policy_function => ,statement_types => ,update_check => 'RECASP' 'TOPIC_SCHEMAS' 'TOSC_WRITE_POLICY' 'RECASP' 'RL_SECURITY.GENER_WRITE_SEC' 'INSERT,UPDATE,DELETE' TRUE); realms (relm) buse_id creator cr_date updator up_date short_name VARCHAR2(20) VARCHAR2(20) DATE VARCHAR2(20) DATE VARCHAR2(20) not not not not not not null null null null null null G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 38 -- Policy Functions CREATE 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; Einsatz von Oracle Features 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) G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 39 Einsatz von Oracle Features 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 40 Einsatz von Oracle Features 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 Stemming, Fuzzy Search G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 41 Einsatz von Oracle Features 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 42 Einsatz von Oracle Features 4.3 Oracle Text Beispiel 1: Zeitreihensuche G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 43 Einsatz von Oracle Features 4.3 Oracle Text Volltextindex für Zeitreihen Zeitreihen-Tabelle time_series (tise) tise_id: VARCHAR2(20) tise_freq: VARCHAR2(2) tise_desc: VARCHAR2(2000) … CREATE INDEX recasp.tise_desc_i ON recasp.time_series (tise_desc) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('stoplist ctxsys.empty_stoplist lexer recasp.tise_lexer wordlist recasp.tise_wordlist storage recasp.recasp_storage_l memory 50M'); SQL: Alle Tageszeitreihen (tise_freq='D') mit Kalkstein/Chalk (inkl. Stemming) im Beschreibungsfeld SELECT tise_id FROM tise WHERE contains(tise_desc, '$kalkstein or $chalk')>0 AND tise_freq = 'D' G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 44 Einsatz von Oracle Features 4.3 Oracle Text Beispiel 2: Volltextsuche in Dokumenten G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 45 Einsatz von Oracle Features 4.3 Oracle Text Volltextindex für Dokumente CREATE INDEX BLOR_IM ON blob_records(blobelem) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('stoplist recasp.multilang_stoplist filter ctxsys.auto_filter …); Dokument-Tabelle (blor) blor_id: VARCHAR2(20) blobelem: BLOB ctx_doc.filter(…) Dokument-Text-Tabelle (blot) Tabelle(n) mit Metadaten zum Dokument query_id: NUMBER title: VARCHAR2(200) document: CLOB author: VARCHAR2(200)… Datastore-Prozedur: recasp.dose_text_datastore(…) Dokument-Such-Tabelle (dose) blor_id: VARCHAR2(20) dose_text: VARCHAR2(2) publ_date DATE G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 46 XML CREATE INDEX DOSE_IM ON docu_search(dose_text) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS('section recasp.dose_text_sectioner datastore recasp.dose_text_datastore …); Einsatz von Oracle Features 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. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 47 Agenda 1 Wer sind wir? Was machen wir? 2 Oracle Infrastruktur und Konventionen 3 Migration Oracle 9.2 (Linux, Latin) nach 10.2 (AIX, UTF-8) 4 Einsatz von Oracle Features 5 Anhang G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 48 Anhang dbresearch Homepage G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 49 Anhang 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 G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 50 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 Meinung der Deutsche Bank AG oder ihrer assoziierten Unternehmen entspricht. Alle Meinungen können ohne vorherige Ankündigung geändert werden. Die Meinungen können von Einschätzungen abweichen, die in anderen von der Deutsche Bank veröffentlichten Dokumenten, einschließlich Research-Veröffentlichungen, vertreten werden. Die vorstehenden Angaben 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 keine Gewähr übernommen. G. Haase · DOAG Regionaltreffen 23.10.2007 · Seite 51