57
Geschäftslogik in der Datenbank Umstellung eines Kernbanksystems Michael Meyer Lead Database Architect November 2010 DOAG-Konferenz 2010, Nürnberg

2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

Embed Size (px)

Citation preview

Page 1: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

Geschäftslogik in der DatenbankUmstellung eines Kernbanksystems

Michael Meyer

Lead Database ArchitectNovember 2010

DOAG-Konferenz 2010, Nürnberg

Page 2: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

2 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Berenberg Bank auf einen Blick

Das Projekt

Geschäftslogik in der Datenbank

Beispiele

• Oracle Types (Grundideen, Beispiele: Kursversorgung, Kunde & Konto, Fulfilment, §24c KWG)

• Standardfelder- und Trigger

• Regelmäßige Reorganisation von Tabellen

• Kapselung von PL/SQL (Zugriffe aus Cobolprogrammen)

• Freigabesystem

• Saldenermittlung

• Reporterstellung (PDF und Excel aus der Datenbank)

• Asynchrone Prozesse

„Bonustrack“

• Data-Masking für Entwicklungsdatenbanken

• Steuerung von Sichtbarkeiten mit der Virtual Private Database (Column-Level-Security)

Page 3: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

3 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Berenberg Bank auf einen Blick

Page 4: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

4 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Das Projekt

Page 5: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

5 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Das Projekt - Rahmendaten

• Abzulösendes System• cobolbasiertes Altsystem• hierarchisches Datenbankmodell• Daten in der Oracle-Datenbank und in diversen sequentiellen und indizierten Dateien gespeichert• Batchorientierte Verarbeitung (kein STP vorhanden)• Terminalemulation als Frontend (4-GL)

• Teilprojekte• Kernbank (KB)• Wertpapier (WP)

• Staffing• Fachbereich• Organisatoren• Architekten (5), Entwickler (Datenbank: 20+, GUI (Java-Swing, .NET): ca. 15)• QS und Test

• geplantes Ende des Projektes• 2012

• Anzahl Objekte (Stand: Juli 2010)• ca. 1600 Tabellen• ca. 1,6 Mio lines of code, davon 40% generiert

Page 6: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

6 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Das Projekt – ein typische Teilprojektorganigramm

LENKUNGSAUSSCHUSS

Auftraggeber / Sponsor

FB: xxxxxORG/IT: xxxxx

Projektleitung BBS -Kernbank

ORG/IT: xxxxx

Teilprojektleitung XXXX

(ORG/IT)

Erfassung u. Abwick-lung gem. Statusmod

online Limitausnutzung

online Devisenposition

Phase

I(D

eta ilssie he

Proj ektplan)

Rechen-zentrum

WP-Projekt

Projektleitung / Architekturmanagemetn

Abhängigkeiten / Konflikte, Architektur,

technischen Paradigmen

ThemaDevisenhandel

Themenverantwortliche aus den Fachbereichen

PL/SQLxxxx

(FGS, SWIFT, Sync., Batch)

PL/SQLxxxx

(GUI, GUI-Types)

SWIFTxxxxxx

(SWIFT u. OBS Anbindung)

AnbindungSWIFT u. OBS

CLS-Abwicklung

Projekt-Team

Fulfillmentxxxx

(Beleg Erstellung u. Versand)

Systemverantwortlicher(ORG/IT)

Phas e

I I(D

etailss ie he

Proj ektpla n)

Anbindung Handelssysteme

Anbindung WP

ConfirmationMatching

PL/SQLxxxxxx

(Statusm., ext. Syst. Buchung, Deploy.)

PL/SQLxxxx

(Datenmigration, Limit, ZKV, Reports)

PL/SQLxxxxx

(XML für Belege, ext. Systeme)

ZKV u. MKP

Nostrodisposition

Online-Info-Center

externe Systeme

COBOL

ASPxxxxx

(CRM und . Berechtigungen)

Review-Team

Projektleitung + Teilprojektleitung +

Fachbereichskoordinator +Themenverantwortlicher + Architekturmanagement +

QS +

weitere Fachbereiche (bei Bedarf)

Fach-bereichko-ordinator

QS

Accessxxxxx

(Meldewesen u. Controlling)

SchnittstellenP-Net, MarketM. etc.

Page 7: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

7 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Das Projekt - Projektstatus

SperrensystemFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

KursversorgungFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Geldhandel IIFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

FreigabesystemFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

ZinsabschlussFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

LimitsystemFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Geldhandel FB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

NostroFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

FX-OptionsFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

CollateralFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

DispositionFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Internes BuchungssystemFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Kleinere ThemenFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

UmsatzerfassungFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Infrastruktur FB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Kredit/AvalFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Devisenhandel IIFB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Devisenhandel FB-Verantwortl.: xxxx

IT-Unterstützung: xxxx

Page 8: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

8 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Geschäftslogik in der Datenbank

Page 9: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

9 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank

Geschäftslogik (engl. Business Logic, auch Anwendungslogik) ist ein abstrakter Begriff in der Softwaretechnik, der eine Abgrenzung der durch die Aufgabenstellung selbst motivierten Logik eines Softwaresystems von der technischen Implementierung zum Ziel hat. Allerdings ist der Begriff unscharf, da eine klare Trennung oft nicht möglich ist. ....

• Oracle-DB ist mehr als eineDatenbank (Speicherort)

• DBMS-Packages• Object Types

• Type Mapping (Java&.NET)

• Mehrfache BL-Umsetzung• Datenbank Abhängigkeit

Daten-ImportDatenbank

Java

FAT-Client

Cobol

Druckaufbereitung

ASP.NET

Page 10: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

10 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Nutzung von Oracle Types – Grundideen

Page 11: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

11 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

Datenbank• ca. in dritter Normalform mit wenigen Redundanzen, die aus Performancegründen zugelassen werden• Generierung von ROW-Types, die die Standard-DMLs pro Tabelle abbilden• entspricht einem %ROWTYPE mit weiteren Attributen und Methoden (Table-API)• Vererbung über „UNDER xxxx“ möglich• polymorphe Prozeduren und Funktionen

DH_MAKLER_ID SCHLUESSEL BESCHREIBUNG ERSTELLT_ID ERSTELLT_ZST GEAENDERT_ID GEAENDERT_ZST GEAENDERT_ZAEHLER GELOESCHT_ZST

1 1 acsdr 1469 21.03.2009 10:42:05 1469 14.06.2010 10:38:52 2

2 2 acdet 1469 21.03.2009 10:42:05 1469 14.06.2010 10:38:52 2

3 3 abghz 1469 21.03.2009 10:42:05 1469 14.06.2010 10:38:52 2

4 4 aaxsw 1469 11.11.2009 22:52:34 1469 14.06.2010 10:38:52 2

Page 12: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

12 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

generierter ROW_TYPE:

CREATE OR REPLACE TYPE ROW_DH_MAKLER UNDER GLOBAL.TYPE_OBJECT( -- object oriented ROWTYPE for DH_MAKLER table-- $Revision: 25013 $-- created : 2008-01-14 09:54:57

-- attributesDH_MAKLER_ID NUMBER(12)

, SCHLUESSEL VARCHAR2(10), BESCHREIBUNG VARCHAR2(4000), ERSTELLT_ID NUMBER(12), ERSTELLT_ZST DATE, GEAENDERT_ID NUMBER(12), GEAENDERT_ZST DATE, GEAENDERT_ZAEHLER NUMBER(12), GELOESCHT_ZST DATE

-- define constructors, CONSTRUCTOR FUNCTION ROW_DH_MAKLER RETURN SELF AS RESULT, CONSTRUCTOR FUNCTION ROW_DH_MAKLER(DH_MAKLER_ID NUMBER, SCHLUESSEL VARCHAR2,

BESCHREIBUNG VARCHAR2, ERSTELLT_ID NUMBER, ERSTELLT_ZST DATE, GEAENDERT_ID NUMBER,GEAENDERT_ZST DATE, GEAENDERT_ZAEHLER NUMBER, GELOESCHT_ZST DATE)RETURN SELF AS RESULT

, CONSTRUCTOR FUNCTION ROW_DH_MAKLER(IN_DH_MAKLER_ID NUMBER) RETURN SELF AS RESULT, CONSTRUCTOR FUNCTION ROW_DH_MAKLER(IN_SCHLUESSEL VARCHAR2, IN_GELOESCHT_ZST DATE)

RETURN SELF AS RESULT, CONSTRUCTOR FUNCTION ROW_DH_MAKLER(IN_SCHLUESSEL VARCHAR2) RETURN SELF AS RESULT

Page 13: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

13 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

generierter ROW_TYPE (cont.):

-- define member functions, MEMBER FUNCTION ROW_EXISTS(IN_DH_MAKLER_ID NUMBER) RETURN BOOLEAN, MEMBER FUNCTION ROW_EXISTS(IN_SCHLUESSEL VARCHAR2, IN_GELOESCHT_ZST DATE)

RETURN BOOLEAN, MEMBER FUNCTION ROW_EXISTS(IN_SCHLUESSEL VARCHAR2) RETURN BOOLEAN, OVERRIDING MEMBER FUNCTION compare(in_type1 GLOBAL.TYPE_OBJECT,in_type2

GLOBAL.TYPE_OBJECT) RETURN INTEGER

-- define member procedures, MEMBER PROCEDURE ROW_INSERT, MEMBER PROCEDURE ROW_UPDATE, MEMBER PROCEDURE ROW_MERGE, MEMBER PROCEDURE ROW_SAVE, MEMBER PROCEDURE ROW_DELETE, MEMBER PROCEDURE ROW_SELECT(IN_DH_MAKLER_ID NUMBER), MEMBER PROCEDURE ROW_SELECT(IN_SCHLUESSEL VARCHAR2, IN_GELOESCHT_ZST DATE), MEMBER PROCEDURE ROW_SELECT(IN_SCHLUESSEL VARCHAR2), MEMBER PROCEDURE ROW_DEFAULT, MEMBER PROCEDURE ROW_LOCK, MEMBER PROCEDURE ROW_LOCK(IN_DH_MAKLER_ID NUMBER), MEMBER PROCEDURE ROW_LOCK(IN_SCHLUESSEL VARCHAR2, IN_GELOESCHT_ZST DATE), MEMBER PROCEDURE ROW_LOCK(IN_SCHLUESSEL VARCHAR2)

) NOT FINAL

Page 14: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

14 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

generierte Trigger (via ErWin)

CREATE OR REPLACE TRIGGER TBI$DH_MAKLERBEFORE INSERTon BBS.DH_MAKLERfor each row

/* -------------------------------------------------------------------------------------Name : TBI$Trigger

BEFORE-INSERT-TRIGGER AUF TABELLE BBS.DH_MAKLERDate : Montag, 20. Oktober 2008 08:20:50------------------------------------------------------------------------------------- */when ( NEW.DH_MAKLER_ID IS NULL)DECLAREBEGINSELECT DH_MAKLER_SEQ.NEXTVAL INTO :NEW.DH_MAKLER_ID FROM DUAL;

END;

CREATE OR REPLACE TRIGGER TBU$DH_MAKLERBEFORE UPDATEon BBS.DH_MAKLERfor each row

/* -------------------------------------------------------------------------------------Name : TBU$Trigger

BEFORE-UPDATE-TRIGGER AUF TABELLE BBS.DH_MAKLERDate : Montag, 20. Oktober 2008 08:20:50------------------------------------------------------------------------------------- */BEGIN:new.Geaendert_ID := SYS_CONTEXT('VPD', 'USERID');:new.Geaendert_ZST := sysdate;:new.Geaendert_Zaehler := :old.Geaendert_Zaehler + 1;

end;

Page 15: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

15 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

ein Blick ins Innere (SELECT) ...

ONSTRUCTOR FUNCTION ROW_DH_MAKLER(IN_DH_MAKLER_ID NUMBER) RETURN SELF AS RESULT

ISmethodenname CONSTANT VARCHAR2(300) := 'BBS.ROW_DH_MAKLER.CONSTRUCTOR(IN_DH_MAKLER_ID NUMBER)';

BEGINSELF.OBJECT_TYPE_NAME := 'BBS.ROW_DH_MAKLER';SELF.ROW_SELECT(IN_DH_MAKLER_ID => IN_DH_MAKLER_ID);RETURN;

EXCEPTIONWHEN OTHERS THEN

GLOBAL.PA_TRACE.TRACE( GLOBAL.PA_TRACE.TRACE_ERROR, methodenname, ' - Exception raised. '

||SELF.TO_STRING()||', SQLcode=' || to_char(SQLCODE) || ', ' || SQLERRM);

RAISE;END;

MEMBER PROCEDURE ROW_SELECT(IN_DH_MAKLER_ID NUMBER)IS

methodenname CONSTANT VARCHAR2(300) := 'BBS.ROW_DH_MAKLER.ROW_SELECT(IN_DH_MAKLER_ID NUMBER)';BEGIN

SELECT DH_MAKLER_ID, SCHLUESSEL, BESCHREIBUNG, ERSTELLT_ID, ERSTELLT_ZST

,GEAENDERT_ID, GEAENDERT_ZST, GEAENDERT_ZAEHLER, GELOESCHT_ZST

INTO SELF.DH_MAKLER_ID, SELF.SCHLUESSEL , SELF.BESCHREIBUNG

,SELF.ERSTELLT_ID, SELF.ERSTELLT_ZST, SELF.GEAENDERT_ID

,SELF.GEAENDERT_ZST, SELF.GEAENDERT_ZAEHLER, SELF.GELOESCHT_ZST

FROM BBS.DH_MAKLER

WHERE DH_MAKLER_ID = IN_DH_MAKLER_ID;EXCEPTION

WHEN OTHERS THENGLOBAL.PA_TRACE.TRACE( GLOBAL.PA_TRACE.TRACE_ERROR, methodenname, ' - Exception raised. '

||'IN_DH_MAKLER_ID = '||IN_DH_MAKLER_ID||';'||', SQLcode=' || to_char(SQLCODE) || ', ' || SQLERRM);

RAISE;END;

Page 16: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

16 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

ein Blick ins Innere (UPDATE) ...

MEMBER PROCEDURE ROW_UPDATEISmethodenname CONSTANT VARCHAR2(100) := 'BBS.ROW_DH_MAKLER.ROW_UPDATE';

BEGIN

IF SYS_CONTEXT('TRACE','TRACE_LEVEL') >= GLOBAL.PA_TRACE.TRACE_TRACE THENGLOBAL.PA_TRACE.TRACE( GLOBAL.PA_TRACE.TRACE_TRACE, methodenname, 'Parameters: ');

END IF;

UPDATE BBS.DH_MAKLERSET SCHLUESSEL = SELF.SCHLUESSEL

,BESCHREIBUNG = SELF.BESCHREIBUNG,GELOESCHT_ZST = SELF.GELOESCHT_ZST

WHERE DH_MAKLER_ID = SELF.DH_MAKLER_IDAND GEAENDERT_ZAEHLER = SELF.GEAENDERT_ZAEHLER

RETURNING DH_MAKLER_ID,SCHLUESSEL,BESCHREIBUNG,ERSTELLT_ID,ERSTELLT_ZST,GEAENDERT_ID,GEAENDERT_ZST,GEAENDERT_ZAEHLER,GELOESCHT_ZST

INTO SELF.DH_MAKLER_ID,SELF.SCHLUESSEL,SELF.BESCHREIBUNG,SELF.ERSTELLT_ID,SELF.ERSTELLT_ZST,SELF.GEAENDERT_ID,SELF.GEAENDERT_ZST,SELF.GEAENDERT_ZAEHLER,SELF.GELOESCHT_ZST;

IF SQL%ROWCOUNT <> 1 THENGLOBAL.RAISE(-20999);

END IF;

EXCEPTIONWHEN OTHERS THEN

GLOBAL.PA_TRACE.TRACE( GLOBAL.PA_TRACE.TRACE_ERROR, methodenname,'-Exception raised.'||SELF.TO_STRING()||', SQLcode=' || to_char(SQLCODE) || ', ' || SQLERRM);

RAISE;END;

Page 17: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

17 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Grundideen (ROW_TYPES)

arbeiten mit einem ROW_TYPEdeclarer_dh bbs.row_dh_makler;

beginr_dh := bbs.row_dh_makler(1);r_dh.dbms_output();r_dh.BESCHREIBUNG := 'Name geändert';r_dh.row_save();r_dh.dbms_output();

end;

<TYPE_OBJECT><OBJECT_TYPE_NAME>BBS.ROW_DH_MAKLER</OBJECT_TYPE_NAME><DH_MAKLER_ID>1</DH_MAKLER_ID><SCHLUESSEL>1</SCHLUESSEL><BESCHREIBUNG>xxxxxxxxxx</BESCHREIBUNG><ERSTELLT_ID>1469</ERSTELLT_ID><ERSTELLT_ZST>21.03.09</ERSTELLT_ZST><GEAENDERT_ID>1469</GEAENDERT_ID><GEAENDERT_ZST>14.06.10</GEAENDERT_ZST><GEAENDERT_ZAEHLER>2</GEAENDERT_ZAEHLER>

</TYPE_OBJECT>

<TYPE_OBJECT><OBJECT_TYPE_NAME>BBS.ROW_DH_MAKLER</OBJECT_TYPE_NAME><DH_MAKLER_ID>1</DH_MAKLER_ID><SCHLUESSEL>1</SCHLUESSEL><BESCHREIBUNG>Name geändert</BESCHREIBUNG><ERSTELLT_ID>1469</ERSTELLT_ID><ERSTELLT_ZST>21.03.09</ERSTELLT_ZST><GEAENDERT_ID>792</GEAENDERT_ID><GEAENDERT_ZST>28.07.10</GEAENDERT_ZST><GEAENDERT_ZAEHLER>3</GEAENDERT_ZAEHLER>

</TYPE_OBJECT>

Page 18: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

18 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Nutzung von Oracle Types – Beispiele

Page 19: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

19 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Überblick

Nutzung von Oracle Types – Beispiel „Kursversorgung“

Page 20: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

20 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Kursversorgung“

• ROW_TYPES stellen die Basiszugriffe auf eine Tabelle sicher• Entwickler arbeiten mit einem TYPE_XXX, die UNDER ROW_TYPES definiert werden

• Beispiel einer Reutersmessage: „NOK Referenzkurs per 23 Juli 2010“

�340�XX�EURNOKREF=�92�110�1�363�2�153�4�0�6�+7.9660�12�+0�13�+0�15�578�19�+0�21�+0�22�+7.9660�23�+7.9750�24�+8.0135�25�+0�26�+0�27�+0�28� �29� : �53�0�66�+0�67� �78�

�79�

�104�37�115�2�118�0�131�0�196�0�197�0�259�209�270�27�271�27�272�27�275�+0�276�+0�277�+0�28

0�0�281�0�282�0�348� �349� �372�+0�374�0�375� : :

�393�+7.9660�394�+7.9750�395�+8.0135�728� �791�+0�792�+0�793�+0�800��801��802��820�0�821�0�822�0�825�0�826� �827� �828�

�831�ECB �832� �833� �836�FFT�837� �838� �841�ECB3�842�

�843� �869�0�874�+0�875�23 JUL 2010�876�22 JUL 2010�877�21 JUL 2010�957�+0�958�0�959�+0�960�0�961�+0�962�0�963�+0�964�0�967��968��975� �976� �977� �980�

�981� �982� �985�+0�986�+0�987�+0�990�0�991�0�992�0�995�

�996�+0�997�+0�998�+0�999�+0�1000�FIX �1001�EURNOK�1002� �1003�

�1010�12:29:51�1011�12:30:10�1012�12:29:14�1021�+0�1029�+0�1030�+0�1031�+0�1032�+0�1033�+0

�1034�+0�1035� �1036� �1037� �1038� �1039� �1040�

�1055�0�1056� �1080�|@@�1275� �1276�

�1277� �1278� �1354�

�1355� �1356� �1383�@hL�1709�0�1789�

�2129�0�2133�0�2134�0�2135�0�2136�0�2137�0�2138�0�2736� �2737� �2738�

: : �2739� : : �2740� : :

�3131�+0�3132�+0�3263�@@@�3264�0�3364�0�3372�+0�3404�+0�3422�

�3694� �3750�+0�3830�+0�3831�+0�4233�+0�4236�0�4237�0�4238�

�4305�+0�4400� �4401� �4402� �1078�+0�4043�0�

Page 21: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

21 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Kursversorgung“

• TYPE_REUTERS_MESSAGE UNDER ROW_REUTERS_MESSAGE

CREATE OR REPLACE TYPE TYPE_REUTERS_MESSAGE UNDER EXT.ROW_REUTERS_MESSAGE(/* ------------------------------------------------------------------------Parst eine Nachricht aus der REUTERS_MESSAGE Tabelle.%Version $Revision: 41291 $------------------------------------------------------------------------ */-- Header Data aus der direkten Reuters MessageRECORD_TYPE NUMBER(5) -- Type or Reuters Record (340=Snap, 316=Update,

, TAG VARCHAR2(5) -- Tag, should be skipped, can be NULL, MSG_RIC VARCHAR2(100) -- RIC, should be skipped, can be NULL, FIELD_LIST_NO NUMBER(5) -- number, should be skipped, can be NULL, RTL NUMBER(6) -- lfd. Nummer, should be skipped, can be NULL

, CONSTRUCTOR FUNCTION TYPE_REUTERS_MESSAGE RETURN SELF AS RESULT, CONSTRUCTOR FUNCTION TYPE_REUTERS_MESSAGE(IN_MESSAGE_ID NUMBER

, IN_GET_HEADER_JN VARCHAR2 DEFAULT 'J') RETURN SELF AS RESULT

, CONSTRUCTOR FUNCTION TYPE_REUTERS_MESSAGE(IN_MESSAGE VARCHAR2, IN_GET_HEADER_JN VARCHAR2 DEFAULT 'J') RETURN SELF AS RESULT

, CONSTRUCTOR FUNCTION TYPE_REUTERS_MESSAGE(IN_MESSAGE EXT.TYPE_AQ_ZKV_REUTERS_INBOX) RETURN SELF AS RESULT

, MEMBER FUNCTION Get_Data( IN_FID NUMBER, IN_GET_ORIGONLY_JN VARCHAR2 DEFAULT 'N') RETURN VARCHAR2

, MEMBER FUNCTION Get_Data_Tab RETURN EXT.TABLE_FID_VALUE PIPELINED)

Page 22: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

22 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Kursversorgung“

• Select-Beispiel (der gesamte Datensatz)

SELECT ext.type_reuters_message(3675002) FROM dual;

SELECT ext.type_reuters_message(3675002).get_data('BID') FROM dual;

• Select-Beispiel (ein einzelnes Attribut)

Page 23: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

23 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Kursversorgung“

SELECT t.dde_acronym, t.wert, t.wert_original, t.*FROM TABLE(ext.type_reuters_message(3675002).get_Data_Tab()) t;

• Select-Beispiel (alle Attribute einer Zeile)

Page 24: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

24 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Kunde & Konto“

• Schachtelung von Types

CREATE OR REPLACE TYPE BBS.TYPE_KONTO_BBS UNDER BBS.ROW_KONTO_BBS(/*--------------------------------------------------------------------Erweitert den ROW-TYPE zur Tabelle BBS.KONTO_BBS.%Version $Revision: 54699 $--------------------------------------------------------------------*/t_konditionen BBS.TYPE_KONTO_BBS_KONDITIONEN,tab_gebuehrbetrag BBS.TABLE_GEBUEHRBETRAG,

-- ConstructorCONSTRUCTOR FUNCTION TYPE_KONTO_BBS(IN_KONTO_BBS_ID IN NUMBER) RETURN SELF AS RESULT,CONSTRUCTOR FUNCTION TYPE_KONTO_BBS(IN_KONTO_BBS_ID NUMBER,

IN_FGS_INFO_JN CHAR) RETURN SELF AS RESULT,CONSTRUCTOR FUNCTION type_konto_bbs RETURN SELF AS RESULT,CONSTRUCTOR FUNCTION type_konto_bbs(in_kontonummer IN VARCHAR2) RETURN SELF AS RESULT,

)NOT FINAL

CREATE OR REPLACE TYPE TYPE_KUNDE UNDER BBS.ROW_KUNDE(-- attributesDEPOT BBS.TABLE_DEPOT,KONTEN_BBS BBS.TABLE_KONTO_BBS,

-- define constructors, CONSTRUCTOR FUNCTION TYPE_KUNDERETURN SELF AS RESULT, CONSTRUCTOR FUNCTION TYPE_KUNDE(IN_STAMMNR VARCHAR2) RETURN SELF AS RESULT

, MEMBER FUNCTION is_bank RETURN BOOLEAN-- ...

) NOT FINAL

CREATE OR REPLACE TYPE TABLE_KONTO_BBS AS TABLE OF BBS.TYPE_KONTO_BBS

Page 25: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

25 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

StreamServe

Nutzung von Oracle Types – Beispiel „Fulfilment“ (AQ, XML)

Fulfilment (Erzeugung von Output für Kunden: Brief, Fax, ...)

Ablauf: Oracle-DB

J-InConnector(Java)

XML-In(Konverter)

Pre-Processor(Skript)

Reply-Out(Skript)

PDF-Out

J-OutConnector(Java)

RepositoryPoet-DB

PDF-Dokumente

XML

Queue: AQ_ORA_STS_XML Queue: AQ_STS_ORA_REPLY

Statusmeldung;ggf. PDF-Datei als BLOB

Page 26: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

26 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „Fulfilment“ (AQ, XML)

• Schachtelung von Types

DECLAREt_270 bbs.type_fulfilment_270; -- abgeleitet von bbs.type_fulfilment (mit Basisroutinen zur

-- Adressholung, Kommunikation mit StreamServe, ...BEGIN

-- Instanz erzeugen

t_270 := bbs.type_fulfilment_270(in_kundenid ,in_kontoid);

t_270.Dokumentdetaildaten_erzeugen(...);t_270.sendToStreamServe;

END;

Page 27: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

27 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „§24c KWG“ (XML)

KWG 24c - Meldungen

• Tägliche Meldungen von Kunden-, Konto-, Bevollmächtigtendaten

• Meldungen im XML-Format

• Übermittlung der täglichen Änderungen

• XML-Dateien werden an einen Dienstleister, der die Daten für die BaFin ( = Bundesanstalt für Finanzdienstleistungsaufsicht ) bereitstellt, übertragen

Page 28: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

28 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Nutzung von Oracle Types – Beispiel „§24c KWG“ (XML)

Pseudocode zur Meldungserstellung:

BEGIN

/* Delta ermitteln */

FOR /* alle melderelevanten Konten */ LOOP

t_kto := TYPE_KWG24CKONTO(kundenid, Kontonummer, .. .);

t_kto.addBBSInhaber(.. .);

t_cmp_kto := getkwg24ckonto(Kontonummer, .. .); -- Vergleichskonto, letzte Version

IF t_kto_compare IS NULL

OR t_kto_compare <> t_kto THEN

addkwg24ckonto(.. .);

END IF;

END LOOP;

/* XML-Ausgabedatei erzeugen */

SELECT

XMLConcat(

-- Anfangs-Datensatz --

XMLELEMENT ("anfangssatz", xmlattributes (verpflichtetenid AS "verpflichteten-id",...)),

-- Konto-Datensaetze -- (liegen bereits als XML-Teildokument vor)

(SELECT XMLAGG (XMLdokument)

FROM kwgexportdateikonto p

WHERE p.laufendedateinummer = in_laufendeDateiNummer),

-- Ende-Datensatz --

XMLELEMENT ("endesatz", xmlattributes (beschreibung AS "kommentar",

anzahldatensatzeinexportdat AS "anzahl-kontodatensaetze"

)

)

) FROM ...

END;

Page 29: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

29 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Vorteile / sinnvolle Einsatzgebiete

• übersichtlicher, wartbarer Programmcode

• OO-Mechanismen (Oracle sollte hier nachbessern: z. B. private Methoden und Attribute)

• geeignet für Einzelsatzbearbeitung

Nachteile / eher nicht sinnvolle Einsatzgebiete

• Massendatenänderungen (���� DML)

• bei UPDATEs werden immer alle Spalten aktualisiert

Nutzung von Oracle Types – Fazit

Page 30: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

30 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Standards für Tabellen: Standardfelder- und Trigger

GEAENDERT_ZAHLER

...

GEAENDERT_ZST

GEAENDERT_ID

ERSTELLT_ZST

ERSTELLT_ID

GELOESCHT_ZST

TABELLE_ID

TABELLEEindeutige technische ID. Wird über Before-Insert-

Trigger ermittelt, wenn nicht übergeben

Erstellt-Felder. Werden über Spalten-Defaults (syscontext) belegt

Letzte Änderungs-Felder. Werden über einen Before-Update-Trigger ermittelt:

:NEW.GEAENDERT_ZST := SYS_CONTEXT('VPD', 'USERID');

:NEW.GEAENDERT_ZST := SYSDATE;

:NEW.GEAENDERT_ZAEHLER := :OLD.GEAENDERT_ZAEHLER + 1;

Über den Gelöscht-Zst können einzelne Sätze logischgelöscht werden

Page 31: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

31 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Regelmäßige Reorganisation von Tabellen - Anforderungen

• Operative Datenbank soll klein gehalten werden

• Zentrale und übersichtliche Definition der Reorg-Vorgänge

• Flexible und einfache Erweiterbarkeit, Anpassungsmöglichkeiten

• Einsatzgebiete

• Tracetabelle nach X-Tagen bereinigen

• Alte, versandte E-Mails entfernen

Page 32: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

32 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Regelmäßige Reorganisation von Tabellen - Tabellenaufbau

REIHENFOLGE

AKTIV

LOESCH_BEDINGUNG

TABELLE

VARIANTE

LETZTER_AUFRUF

REORG_SET

REORG

NAME

REORG_SET

DELETETRUNCATESHRINKCALL

Gruppierung der Reorg-Vorgänge

Reihenfolge innerhalb des Reorg-Sets

Zu reorganisierende Tabelle / Bei CALL steht hier der Name der aufzurufenden Prozedur

Soll Reorg-Vorgangdurchgeführt werden?

WHERE-Bedingung, die die zu löschenden Sätze beschreibt Zeitpunkt des letzten

Reorg-Laufs

Page 33: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

33 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Regelmäßige Reorganisation von Tabellen - Ablauf

alle Reorg-Sets durchlaufen

alle Vorgänge des Reorg-Sets durchlaufen

CASE VARIANTE

WHEN 'DELETE' THEN

EXECUTE IMMEDIATE 'DELETE FROM ' || TABELLE || ' WHERE ' || LOESCH_BEDINGUNG;

WHEN 'TRUNCATE' THEN

EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || TABELLE;

WHEN 'SHRINK' THEN

EXECUTE IMMEDIATE 'ALTER TABLE '|| TABELLE ||' SHRINK SPACE';

WHEN 'CALL' THEN

EXECUTE IMMEDIATE 'BEGIN ' || TABELLE || '; END;';

END CASE;

• Läuft seit Einführung 2007 fehlerfrei• Sehr flexibel bei kurzfristigen Änderungen

• ABER: Dyn. SQL � Freigabeverfahren !

Page 34: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

34 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Kapselung von PL/SQL - Problemstellung

COBOL

Zugriffsschicht

Datenbank

Nur Select, Insert, Update, Delete

• Zugriff von „alten“ COBOL-Programmen auf die DB erfolgt über eine Zugriffschicht, die nur Select, Insert, Update und Delete unterstützt

• Der Aufruf von PL/SQL-Sourcen soll ermöglicht werden

Page 35: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

35 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Kapselung von PL/SQL - Lösung

View

Instead-OfTrigger

PackageErgebnisFehlercode

PL/SQLSource 1

PL/SQLSource n

SpaltenFunktionParameterErgebnisFehlercodeCOBOL

UPDATE

FunktionParameter

SELECT

Fazit: Möglichkeit um PL/SQL für „alte“ Systeme ansprechbar zu machen

Page 36: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

36 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Freigabesystem

Page 37: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

37 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Freigabesystem

Start

Prüfung

freigegeben

(1)

Freigabe

erforderlich

(3)

Teilfreigabe

(2)

Erfasser hat Kompetenz

Eine Unterschrift

wurde geleistet

n-1 Unterschriften

wurden geleistet

Limit überschritten

kein Limit überschritten

alles OK

n-te. Unterschriften

wurden geleistet

Zurück-

weisen

(4)

Zurückweisung

Geschäft ist nicht konfiguert

nicht

konfiguriert

(-1)

Freigabe nicht

notwendig (0)

Option

Legende

Standardablauf

Start-

statusZwischen-

Status

Ende-

status

3

Page 38: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

38 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Freigabesystem

Freigeben einer Freigabe

declaret_fg TYPE_FGS_FREIGABE;

begint_fg := TYPE_FGS_FREIGABE (IN_ANY_ID => 3,

IN_STAMMDATENTYP_NODE_ID =>3,IN_STAMMDATENTYP_ID =>6,IN_VORGANGSTYP_ID =>2);

t_fg.approve_freigabe;end;

Page 39: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

39 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Freigabesystem

• XML als allg. „Schnittstellensprache“• Hinzufügen einer Freigabe:

-- add mit xmldeclarei_xml sys.xmltype;t_fgs_freigabe bbs.type_fgs_freigabe := bbs.type_fgs_freigabe();

BEGINi_xml := xmltype('<?xml version="1.0" ?> <FREIGABE>

<FGS><ANY_ID>82238</ANY_ID> <DL_NODE_ID></DL_NODE_ID><DIENSTLEISTUNG_ID></DIENSTLEISTUNG_ID><TRANSAKTIONSTYP_ID></TRANSAKTIONSTYP_ID><STAMMDATENTYP_NODE_ID>2</STAMMDATENTYP_NODE_ID> <STAMMDATENTYP_ID>3</STAMMDATENTYP_ID> <VORGANGSTYP_ID></VORGANGSTYP_ID> <VOLUMEN_EUR></VOLUMEN_EUR><KUNDE_ID></KUNDE_ID></FGS>

<AENDERUNG><DATENSATZ OWNER="BBS" TABLE="SPERRE" PKNAME="SPERRE_ID" PKWERT="84658">

<ATTRIBUT NAME="geloescht_zst"><ALT></ALT><NEU>04.08.2008</NEU>

</ATTRIBUT></DATENSATZ>

</AENDERUNG></FREIGABE>');

t_fgs_freigabe.add_freigabe(i_xml);end;

Page 40: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

40 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

Saldenermittlung

Page 41: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

41 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Saldenermittlung

Saldo_per_Buchungstag := Summe der Umsatzbeträge bis zum Tag X

-426,43 -514,00 5.08.20102.08.2010

-15,98 2.08.20102.08.2010

103,55 225,22 2.08.201030.07.2010

-121,67 -254,00 15.12.201029.07.2010

132,33 29.07.201029.07.2010

Eröffnung0,00 0,00 25.07.2010

KommentarSaldo per

BuchungstagBetragValutatagBuchungstag

Performance wird unzureichend bei vielen Umsätzen ...

�Aufbau von 2 Materialized Views�MV_1) Saldo über alle Umsätze pro Valuta- und Buchungstag�MV_2) Saldo über alle Umsätze (MV auf MV_1)

Page 42: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

42 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Saldenermittlung

-- Gesamtsaldo pro Tag MV_1CREATE MATERIALIZED VIEW MV_UMSATZ_BBSREFRESH FAST ON COMMITENABLE QUERY REWRITEASSELECT u.konto_bbs_id,

u.valuta,u.buchungsdatum,SUM((u.betrag + abs(u.betrag)) / 2) betrag_haben,COUNT((u.betrag + abs(u.betrag)) / 2) cnt_betrag_haben,SUM((abs(u.betrag) - u.betrag) / 2) betrag_soll,COUNT((abs(u.betrag) - u.betrag) / 2) cnt_betrag_soll,SUM(u.betrag) betrag,COUNT(u.betrag) cnt_betrag,COUNT(*) cnt

FROM bbs.umsatz_bbs uGROUP BY u.konto_bbs_id, u.valuta, u.buchungsdatum;

Aufbau von 2 Materialized Views

-- Gesamtsaldo MV_2CREATE MATERIALIZED VIEW MV_UMSATZ_BBS_TOTALREFRESH FAST ON COMMITENABLE QUERY REWRITESELECT konto_bbs_id,

COUNT(*) cnt_all,SUM(betrag) sum_betrag_total,COUNT(betrag) cnt_betrag_total,SUM(betrag_haben) sum_betrag_haben_total,COUNT(betrag_haben) cnt_betrag_haben_total,SUM(betrag_soll) sum_betrag_soll_total,COUNT(betrag_soll) cnt_betrag_soll_total

FROM mv_umsatz_bbsGROUP BY konto_bbs_id

Page 43: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

43 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Saldenermittlung

SELECT /*+ rewrite */

nvl(SUM(betrag), 0)

FROM (SELECT /*+ rewrite */ -- aktueller gesamtsaldo des Kontos (aus mv_umsatz_bbs_total)

SUM(u.betrag) betrag

FROM bbs.umsatz_bbs u

WHERE u.konto_bbs_id = i_konto_bbs_id

UNION ALL

SELECT /*+ rewrite */ -- NACH dem gewünschten Datum

-- aufgelaufene Umsätze abziehen (aus mv_umsatz_bbs)

-SUM(u.betrag) betrag

FROM bbs.umsatz_bbs u

WHERE u.konto_bbs_id = i_konto_bbs_id

AND u.buchungsdatum > i_stand);

Berechnung des Saldos

Page 44: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

44 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Reporterzeugung: PDF (mit PL/PDF)

CREATE OR REPLACE PROCEDURE HELLOWORLD IS

l_blob BLOB;

BEGIN

/* Initialize, without parameters means: page orientation: portrait; page format: A4 */

plpdf.init;

plpdf.NewPage;

/* Sets the font and its properties */

plpdf.SetPrintFont(

p_family => 'Arial', -- Font family: Arial

p_size => 48 -- Font size: 12 pt

);

/* Draws a rectangle cell with text inside. The rectangle may have a border and fill color specified. */

plpdf.PrintCell(

p_w => 150, -- Rectangle width

p_h => 20, -- Rectangle heigth

p_txt => 'Hello World!' -- Text in rectangle

);

/* Returns the generated PDF document. The document is closed and then returned in the OUT parameter. */

plpdf.SendDoc(p_blob => l_blob); -- The generated document

INSERT INTO STORE_BLOB (blob_file, created_date) VALUES (l_blob, sysdate);

END;

• Tägliche- oder AdHoc-Reports erstellen als pdf• Reports direkt aus der Datenbank heraus drucken

Page 45: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

45 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

PL/PDF - Fazit

Vorteile

• PL/PDF ist ausschließlich in PL/SQL geschrieben

• Erzeugung von PDF-Dokumenten direkt in der Datenbank

• Geringe Kosten

• (einfache Charts möglich)

Nachteile

• kein WYSIWYG

• keine automatischen Spaltensummen oder Gruppierungen

Page 46: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

46 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Reporterzeugung: Excel

• Excel im XML-Format erstellen (ab Excel 2003 lesbar)

declaret global.type_Excel_Document := global.type_Excel_Document();

begint.document_Open;

-- minimale Seitet.worksheet_Open('DOAG-Test-Tab');t.add_SQL_XSL(in_query =>

'SELECT kundenid, inhaber FROM bbs.kunde WHERE ROWNUM<=10');

t.row_Open();t.add_cell(p_data=> 'Anzahl=');t.add_cell(p_formula => 'count(R2C1:R11C1)');t.row_Close;t.worksheet_Close;

t.document_Close;t.document_Save('REPORTS','DH_Makler.xls');

end;

Page 47: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

47 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Asynchrone Prozesse

Verschiedene Situationen erfordern es Aufrufe asynchron zu verarbeiten.

z.B.:

• Performance

• „ORA-04091 mutating table“

• Transaktionsicherer eMail-Versand (resp. alle utl*-Packages)

Page 48: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

48 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Asynchrone Prozesse - Umsetzung

Unterteilung in serielle und parallele Verarbeitung

Standardattribute ID und IDENT zum Aufrufen der Funktionen

Dispatcher-Package zum Verteilen der Aufrufe

Aufruf

seriell

parallel

DispatcherPackage

Queues

DBMS_SCHEDULER

Page 49: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

49 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Asynchrone Prozesse - Beispiel

PROCEDURE APPLY_MESSAGE(IN_MSG IN SYS.XMLTYPE)

IS

v_ident VARCHAR2(50);

v_id NUMBER(12);

BEGIN

v_ident := IN_MSG.EXTRACT('/async/ident//text()');

v_id := IN_MSG.EXTRACT('/async/parameter/id//text()');

CASE v_ident

WHEN 'GLOBAL.EXPORT' THEN -- Export anstossen

GLOBAL.PA_EXPORT.EXPORT_USER(IN_USER_ID => v_id);

WHEN 'GLOBAL.VERARBEITE_ORDER' THEN -- Order einarbeiten

GLOBAL.PA_ORDER.VERARBEITEN(IN_ORDER_ID => v_id);

WHEN 'GLOBAL.MAIL' THEN -- eMail verschicken.

GLOBAL.PA_MAIL.SEND_MAIL(IN_MAIL_ID => v_id);

WHEN 'GLOBAL.MAIL_MESSAGE' THEN -- eMail verschicken.

GLOBAL.PA_MAIL.SEND_MAIL(IN_MESSAGE => IN_MSG);

WHEN 'ORDER.GATTUNG_LOESCHUNG' THEN -- Löschen einer Gattung

ORDER.PA_GATTUNG.LOESCHE_GATTUNG(IN_GATTUNG_ID => v_id);

ELSE

RAISE_APPLICATION_ERROR(-20000,'QUEUE_DISPATCHER : Unbekannter Message Typ.');

END CASE;

END;

Page 50: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

50 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Asynchrone Prozesse - Beispiel

Page 51: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

51 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Asynchrone Prozesse - Fazit

• „Bremsen“ im seriellen Ablauf verzögern nachfolgende Aufrufe

• Zustand der Datenbank ändert sich bis asynchrone Verarbeitung startet

Page 52: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

52 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Vorteile

• single point of thruth

• Wartbarkeit („wo muss ich überall ändern, wenn ...“)

Nachteile

• single point of thruth���� Fehler haben sehr weitreichende Auswirkungen

���� QS (automatisierte Regressionstests)

Zentralisierung der Geschäftslogik

Page 53: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

53 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems

„Bonustrack“

• Data-Masking für Entwicklungsdatenbanken

• Steuerung von Sichtbarkeiten mit der Virtual Private Database (Column-Level-Security)

Page 54: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

54 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Data-Masking für Entwicklungsdatenbanken

Problem:

• Bereitstellung von (Fullsize-) Entwicklungsdatenbanken

• mit allen Geschäftsvarianten, aber ohne Kundennamen, Adressen, ...

Lösungsvariante:

• Oracle Data-Masking

• Bestimmung des relevanten Tabellen + Spalten

• Beim Aufbau der Entwicklungsdatenbanken erfolgt die Anonymisierung der Daten

• zertifiziert

• ABER:

• Initiale Probleme bei der Skripterzeugung im EM(verlorene Objekte, Trigger)

• Laufzeit beim maskieren (ca. 60 Tabellen, 250 Spalten ���� 2 h)

Page 55: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

55 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Sichtbarkeiten mit Virtual Private Database (Column-Level-Security)

Problem:

• Teilweise muss der DB-Support auf nicht anonymisierte Datenbankzugreifen (bei Produktionsproblemen).

• Kundennamen, Adressen dürfen aber nicht sichtbar werden

Lösungsvariante:

• Oracle VPD mit Column-Level-Security

• Bestimmung des relevanten Tabellen und Spalten

• Zugriff für DB-Support über einen bestimmten User

• einzelne Spalten von Tabellen werden ausgeblendet

• Abfrage geben NULL für diese Spalten zurück

Page 56: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

56 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010

Sichtbarkeiten mit Virtual Private Database (Column-Level-Security)

���� keine merkbaren Performanceeinbußen (ca. 60 Tabellen, 250 Spalten)

beginDBMS_RLS.ADD_POLICY (object_schema=>'BBS',

object_name=>'KUNDE',policy_name=>'BBS_KUNDE',function_schema=>'BV',policy_function=>'pa_vpd_reader.fu_policy',sec_relevant_cols=>‘VORNAME,NACHNAME',sec_relevant_cols_opt=>dbms_rls.ALL_ROWS);

end;/

beginDBMS_RLS.DROP_POLICY ('BBS', 'KUNDE', 'BBS_KUNDE');

end;/

FUNCTION fu_policy( obj_schema VARCHAR2, obj_name VARCHAR2 ) RETURN VARCHAR2ISBEGINv_retVal := '0=0';IF USER = 'READER' THENCASE WHEN SYS_CONTEXT('USERENV','DB_NAME') LIKE 'INFO%'

or SYS_CONTEXT('USERENV','DB_NAME') LIKE 'BBS%‘ THENv_retVal := '1=0';

END CASE;END IF;

RETURN v_retVal;END;

Page 57: 2010-K-DEV-Meyer-Geschaeftslogik in der Datenbank · PDF fileektp lan) Rechen-zentrum WP-Projekt Projektleitung / Architekturmanagemetn Abhängigkeiten/ Konflikte, Architektur, technischen

November 2010

Fragen? Anregungen?

Michael Meyer

Lead Database Architect

Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems