2010-k-dev-meyer-geschaeftslogik in der datenbank · pdf fileektp lan) rechen-zentrum...
Post on 05-Feb-2018
217 Views
Preview:
TRANSCRIPT
Geschäftslogik in der DatenbankUmstellung eines Kernbanksystems
Michael Meyer
Lead Database ArchitectNovember 2010
DOAG-Konferenz 2010, Nürnberg
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)
3 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010
Berenberg Bank auf einen Blick
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
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
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.
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
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
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
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
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
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
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
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;
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;
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;
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>
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
19 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010
Überblick
Nutzung von Oracle Types – Beispiel „Kursversorgung“
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�
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)
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)
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)
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
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
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;
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
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;
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
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
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
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
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 !
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
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
36 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010
Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems
Freigabesystem
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
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;
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;
40 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010
Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems
Saldenermittlung
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)
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
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
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
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
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;
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)
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
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;
50 06.10.2010 Geschäftslogik in der Datenbank - Umstellung eines Kernbanksystems - DOAG Konferenz 2010
Asynchrone Prozesse - Beispiel
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
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
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)
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)
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
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;
November 2010
Fragen? Anregungen?
Michael Meyer
Lead Database Architect
Geschäftslogik in der Datenbank –Umstellung eines Kernbanksystems
top related