Messaging - Berenberg

Werbung
Einsatz von Messaging innerhalb
der Oracle Datenbank
Steffen Kantorek
25. September 2013
Berenberg
auf einen Blick
•
Berenberg wurde 1590 gegründet
•
älteste Privatbank Deutschlands
•
Geschäftsbereiche:
•
Private Banking
• Betreuung vermögender Privatkunden und Unternehmer, Familien
und Stiftungen sowie komplexer Vermögen
•
Investment Banking
• Equities: Research, Brokerage, Equity Capital Markets
• Financial Markets: Fixed Income, Debt Capital Markets,
Forex Trading, Strategic Advisory, Mergers & Acquisitions
•
Asset Management
• Vermögensanlage für institutionelle Kunden, quantitative
Anlagestrategien, Währungsmanagement
•
Corporate Banking
•
•
2
Firmenkundenbetreuung Structured Finance, Schifffahrt
17 Standorte in Europa, USA und Asien mit Hauptsitz in Hamburg
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Berenberg
Berenberg - IT
3
•
Oracle Datenbank EE
•
Businesslogik in der Datenbank
•
GUI nur zur Visualisierung
•
Kernkompetenz: Eigenentwicklung
•
Nutzung vieler Oracle Features für Businessanforderungen
•
4 inhouse Datenbanken
•
starker Einsatz von Messaging zur Kommunikation
•
Streams zum Replizieren von Daten
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Agenda
Replizieren und Wiederherstellen von Daten
Messaging
GUI Notification mittels Messaging
asynchrone Prozesse mittels Messaging
Monitoring nachrichtenbasierter Systeme
4
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Änderungen
protokollieren
archivieren von
Daten mit kurzer
Lebensspanne
Performance
Replizierung
Replizieren und
synchronisieren
von
Datenbanken
Entkopplung von
Systemen
Wiederherstellen von Daten
Messaging
GUI Notification
…
mittels Messaging
asynchrone Prozesse
mittels Messaging
Monitoring
nachrichtenbasierter Systeme
5
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Datenbank 1
(operatives System)
Tabelle 1
2
Tabelle 2
1
1a
Datenbank 2
(Data Warehouse)
async.
ORACLE Streams 1b
Capture
3b
ORACLE Streams 3a
Tabelle 1
Tabelle 2
Prozedur
Wiederherstellen
Wiederherstellung
starten
3
Apply Error
Handler
Legende
1) Realtime Auslagern in das Data Warehouse
a) Capture der Daten und Übertragung in das Data Warehouse
b) Apply und Strukturanpassung der Daten im Data Warehouse
2) Reorganisation der Daten im operativen System
3) Wiederherstellen der Daten für das operative System
a) Erstellen der LCRs und Übertragung in das operative System
b) Persistieren der Daten im operativen System und ggf. vorhandene Fehler verwalten
6
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
Auslagern der Daten in ein Drittsystem.
• Übertragung mittels Oracle Streams
• Capture von Insert und Update Statements
• Übertragung als Logical Change Record (LCR)
Im Drittsystem werden die Daten beim Apply an die Struktur des Systems angepasst.
• Trigger auf den Zieltabellen, welche auch bei DML Operationen zünden („DBMS_DDL“Package Firing Once = False)
• Auflösen von Foreign Key Beziehungen zum Reduzieren von Zugriffszeiten
Hinweis
Zu diesem Zeitpunkt sind auf beiden Systemen die Daten redundant
vorhanden.
7
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
• Verfahren
• Archive
• Insert und Update werden übertragen
• Replication
• Insert, Update und Delete werden übertragen (1:1 Replizierung)
• All
• protokollieren aller Änderungen eines Datensatzes, jedes update führt zu
einem Insert in der Zieltabelle
LCR-Trigger
• veraltetet Technologie
• schnelles Verfahren
• Trigger erstellt LCR und überträgt diesen
per AQ an die Ziel DB
• keine Auswirkung auf die Performance
von Geschäftsprozessen
• nicht geeignet für Massendaten
• relativ empfindlich gegenüber DDL
Änderungen
• Auswirkung auf die Performance von
Geschäftsprozessen
8
asynchrones Capture (DML)
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
-- Beispiel: Archive Rule
...
DBMS_STREAMS_ADM.ADD_TABLE_RULES(
TABLE_NAME
=> 'HR.TEST_TABLE',
STREAMS_TYPE
=> 'CAPTURE',
STREAMS_NAME
=> 'CAPTURE_DWH',
QUEUE_NAME
=> 'AQ_CAPTURE',
INCLUDE_DML
=> TRUE,
INCLUDE_DDL
=> FALSE,
INCLUSION_RULE
=> TRUE,
AND_CONDITION
=> ':lcr.get_command_type() not in (''DELETE'')'
);
...
9
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
Reorganisieren der Daten im operativen System
Um eine stabile Performance im operativen System zu gewährleisten, werden die Daten aus
dem operativen System reorganisiert.
• Reorganisieren von Daten, die älter sind als sieben Tage
• kann aufgrund der Datenredundanz jedoch zu einem frei wählbaren Zeitpunkt erfolgen
Hinweis
Löschungen werden im Capture Prozess nicht berücksichtigt und somit nicht an
das Drittsystem übertragen.
10
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
Wiederherstellen der Daten für das operative System
Werden Daten zur nachträglichen Bearbeitung im operativen System benötigt, müssen diese
manuell wiederhergestellt werden.
• kein Capture Prozess im Data Warehouse
• Aufruf einer Prozedur zum Erzeugen eines Logical Change Record(LCR)
• Aufbau des LCR in der Struktur des Zielsystems
• Propagieren des LCR in der korrekten Reihenfolge um Constraint Verletzungen zu
verhindern
Es besteht darüber hinaus die Möglichkeit im operativen System einen DML-Error Handler
zu definieren, welcher Fehler beim Wiederherstellen im operativen System verwaltet.
Hinweis
Beim Wiederherstellen der Daten, findet keine erneute Übertragung vom
operativen System in das Drittsystem statt.
11
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Auslagern
Reorganisieren
Wiederherstellen
CREATE OR REPLACE PROCEDURE DATEN_WIEDERHERSTELLEN(IN_UMSATZ_ID IN NUMBER) IS
LCR
SYS.LCR$_ROW_RECORD;
ROW_LIST
SYS.LCR$_ROW_LIST := SYS.LCR$_ROW_LIST();
MY_ENQ_OPT
SYS.DBMS_AQ.ENQUEUE_OPTIONS_T;
MY_MSG_PROP
SYS.DBMS_AQ.MESSAGE_PROPERTIES_T;
BEGIN
-- LCR aufbauen
ROW_LIST := SYS.LCR$_ROW_LIST();
ROW_LIST.EXTEND(2);
ROW_LIST(1) := SYS.LCR$_ROW_UNIT('UMSATZ_ID'
,SYS.ANYDATA.CONVERTNUMBER(rec.UMSATZ_ID), NULL, NULL, NULL);
ROW_LIST(2) := SYS.LCR$_ROW_UNIT('KUNDE_ID'
,SYS.ANYDATA.CONVERTNUMBER(rec.KUNDE_ID) , NULL, NULL, NULL);
LCR := SYS.LCR$_ROW_RECORD.CONSTRUCT(source_database_name => 'DB1'
,command_type
=> 'INSERT'
,object_owner
=> 'HR'
,object_name
=> 'UMSATZ');
LCR.SET_VALUES('new', ROW_LIST);
-- Streams/ Queuing spezifische Werte setzen ...
DBMS_AQ.ENQUEUE(QUEUE_NAME
=> 'HR.AQ_WAREHOUSE_OUTBOX
,...
,PAYLOAD
=> SYS.ANYDATA.CONVERTOBJECT(LCR)
,... );
END;
12
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Replizieren und Wiederherstellen von Daten
Fazit
• komfortable Möglichkeit, Daten nachträglich zu bearbeiten
• Datenmenge im operativen System wird gering gehalten
• unterschiedliche Datenstrukturen sind kein Problem
• Streams Kenntnisse werden benötigt
Achtung ist geboten bei große Datenmengen innerhalb einer Transaktion. Diese können dafür
Sorgen, dass die Replizierung sehr lange dauert. Daher sollte man sich genau überlegen
welche Daten benötigt werden.
Hinweis:
Weiterführende Informationen mit Code Beispielen gibt es in der DOAG News
(Nr.1, Februar 2012).
13
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Motivation
standardisiertes
Format
Performance
Systemtrennung
Messaging
Replizieren und
Wiederherstellen von Daten
definierte
Schnittstelle
Parallelisierung
Messaging
GUI Notification
…
mittels Messaging
asynchrone Prozesse
mittels Messaging
Monitoring
nachrichtenbasierter Systeme
14
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Schnittstelle
System 1
MESSAGE_TABLE
ROW_TRADE_MESSAGE
1
AQ_MESSAGE
Scheduler
2
TYPE_TRADE_MESSAGE
.APPLY_MESSAGE()
3
TYPE_TRADE_MSG_DELETE
.APPLY()
TYPE_TRADE_MSG_CHANGE
.APPLY()
TYPE_TRADE_MSG_NEW
.APPLY()
4
Businessprozess
Beschreibung
1) Dequeue der Nachricht
2) Übergabe der Nachricht an den Message-Type (Object Type, welcher von einem Object
Type Methoden zum Zugriff auf Tabellen erbt)
3) Parsen der Nachricht und anhand des Nachrichtentyps Übergabe an den spezifischen
Object Type
4) Verarbeitung und ggf. Übergabe an weitere Prozesse durch den spezifischen Object Type
15
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Schnittstelle
Beispiele
t_message TYPE_TRADE_MESSAGE
msg
SYS.AQ$_JMS_TEXT_MESSAGE;
BEGIN
...
t_message := NEW TYPE_TRADE_MESSAGE();
msg.GET_TEXT(payload => t_message.MESSAGE);
t_message.MSG_TYP := msg.GET_STRING_PROPERTY(PROPERTY_NAME => 'MSG_TYP');
t_message.RECEIVE();
...
END;
CREATE OR REPLACE TYPE BODY TYPE_TRADE_MESSAGE IS ...
MEMBER PROCEDURE RECEIVE IS...
CASE SELF.MSG_TYP
WHEN 'NEW' THEN
t_trade_new := TYPE_TRADE_MSG_NEW(IN_TRADE_MESSAGE_ID => SELF.TRADE_MESSAGE_ID
,IN_MESSAGE
=> SELF.MESSAGE);
t_trade_new.APPLY_MESSAGE(); ...
SELF.ROW_INSERT(); ...
END;
CREATE OR REPLACE TYPE BODY TYPE_TRADE_MSG_NEW IS ...
CONSTRUCTOR FUNCTION TYPE_TRADE_MSG_NEW (
IN_TRADE_MESSAGE_ID IN NUMBER, IN_MESSAGE IN VARCHAR2) RETURN SELF AS RESULT
IS ...
SELF.MESSAGE_ID := IN_TRADE_MESSAGE_ID;
SELF.MESSAGE
:= IN_MESSAGE;
SELF.PARSEN(); ...
END;
16
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Systemtrennung
System 2
System 1
MESSAGE_TABLE
Businessprozess
1
ROW_TRADE_MESSAGE
TYPE_TRADE_MESSAGE
3 AQ_MESSAGE
.SEND_NEW()
.SEND_CHANGE()
.SEND_DELETE()
Scheduler
TYPE_TRADE_MESSAGE
.APPLY_MESSAGE()
TYPE_TRADE_MSG_DELETE
TYPE_TRADE_MSG_CHANGE
TYPE_TRADE_MSG_NEW
.APPLY()
.APPLY()
.APPLY()
2
TRADE_MESSAGE
Businessprozess
Beschreibung
1. Erzeugen einer Nachricht je nach Prozess (z.B. Einstellung, Änderung etc.)
2. persistieren der Nachricht
3. Versand an die Schnittstelle per Oracle AQ
4. Verarbeiten der Nachricht in der Schnittstelle
17
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Performance
buffered Message
•
Nachrichten werden im Speicher gehalten
•
schnellere Übertragung von Nachrichten
•
Nachrichten können „verloren gehen“
•
•
•
Möglichkeit einer nachträglichen Synchronisation
„ORA-25307 – Enqueue Rate zu hoch, Fluss-Steuerung aktiviert“
•
Enqueue schneller als Dequeue (5000 Nachrichten Default)
•
umschalten auf persistent
•
automatischer Prüfung um wieder auf buffered zu wechseln
max. 4000 Zeichen pro Message
offener Oracle Service Request:
wenn von buffered auf persistent umgeschaltet wird und in der Queue sich noch
buffered Nachrichten befinden, werden die persistent Nachrichten zuerst
ausgelesen.
18
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Messaging
Performance
System 2
System 1
MESSAGE_TABLE
Businessprozess
ROW_TRADE_MESSAGE
TYPE_TRADE_MESSAGE
.SEND_NEW()
.SEND_CHANGE()
.SEND_DELETE()
.RETRY()
3
AQ_MESSAGE
Scheduler 2
Scheduler
AQ_MESSAGE
TYPE_TRADE_MESSAGE
.APPLY_MESSAGE()
1
TYPE_TRADE_MSG_DELETE
TYPE_TRADE_MSG_CHANGE
TYPE_TRADE_MSG_NEW
.APPLY()
TYPE_TRADE_MESSAGE
.APPLY()
.APPLY()
.GET_MISSING_MESSAGE()
Businessprozess
TRADE_MESSAGE
Beschreibung
1. Bei Nachrichtenlücke Anfrage an das erzeugende System erstellen
2. Anfrage per Oracle AQ senden
3. Verarbeiten der Anfrage und senden der fehlenden Nachrichten
19
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
GUI Notification
nachrichtenbasierte GUI Aktualisierung
zeitnahe
Darstellung
konfigurierbares
Intervall
clientspezifische
Aufbereitung
GUI
Notification
Replizieren und
kein „Polling“
durch die GUI
eigenständiger
Prozess
Wiederherstellen von Daten
Messaging
GUI Notification
…
mittels Messaging
asynchrone Prozesse
mittels Messaging
Monitoring
nachrichtenbasierter Systeme
20
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
GUI Notification
Lösung
Allgemeines
• benötigt von mehreren internen System
• häufige Datenänderungen
• altes Verfahren basierend auf Trigger
• schlechte Performance bei hohen Datenmengen, bzw. viel DML
• Auswirkung auf die Performance der Businessprozesse
Oracle Database Change Notification
Oracle Continuous Query Notification (CQN)
• nicht für volatile Daten geeignet
• Object Change Notification
• potentiell hoher Speicherverbrauch in der
invalidation Queue auf dem Server
• Query Result Change Notification
• Änderungen sind die Ausnahme nicht die
Regel (Read-Only-Tabellen)
• Anwendungen die auf wenig
frequentierte Objekte zugreifen (Beispiel
WEB-Forum)
Quelle:
http://docs.oracle.com/cd/B19306_01/appdev.102/b1
4251/adfns_dcn.htm#BDCHDJGA
Quelle:
http://docs.oracle.com/cd/B28359_01/appdev.111/b2
8424/adfns_cqn.htm#CHEIJIHI
Lösung:
Eigenentwicklung…
21
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
GUI Notification
die Idee
System Change Number
• Verwendung der System Change Number (SCN)
• stellt einen Zeitpunkt dar, zu der ein Datensatz zuletzt geändert wurde und die Transaktion
mit Commit beendet wurde
• kann mit „scn_to_timestamp([scn])“ in einen Timestamp umgewandelt werden
• Pseudocolumn „ORA_ROWSCN“ enthält die SCN der letzten Änderung pro Block/ Row je
nach Tabellenkonfiguration
• keine Indizierung möglich
Beispiel
SELECT ora_rowscn
,scn_to_timestamp(ora_rowscn)
,t.test_table_id AS “ID”
FROM test_table t
WHERE t.erstellt_zst >= TRUNC(SYSDATE)
ORA_ROWSCN
SCN_TO_TIMESTAMP(ORA_ROWSCN)
ID
69047374971
03.09.13 10:23:03,000000000
23981
22
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
GUI Notification
Architektur
GUI
GUI
Message
Message Enqueue
Enqueue
5
1
JMS-QUEUE
Queue
Monitor
Capture
Capture Verwaltung
Verwaltung
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Quelltabellen
Client
Monitor
SCN-Capture
SCN-Capture Job(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
SCN
CAPTURE
Job A
CAPTURE_INFO
Beschreibung
1) Anmeldung der Consumer
2) Überwachen und Sammeln der DML Änderungen der registrierten Tabellen
3) Übergabe der Ergebnismenge an die Schnittstelle
4) Zusammenbau und Versand der JMS Nachricht
5) Auslesen der Queue per Java via JMS-Topic
23
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
• Tabelle muss mit „ROWDEPENDENCIES“ angelegt sein
• damit die SCN pro Datensatz (per ROW) gespeichert wird
• sonst Speicherung auf DB-Block Ebene
• Alternativ ändern mit DBMS_REDEFINITION
GUI
GUI
Message
MessageEnqueue
Enqueue
Capture
CaptureVerwaltung
Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Client
Monitor
SCN-Capture
SCN-CaptureJob(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
24
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
GUI
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
CREATE TABLE TEST_ROWDEPENDENCIE (…)
ROWDEPENDENCIES
TABLESPACE … ;
-- Abfrage auf das Data Dictionary
SELECT table_name, dependencies
FROM
user_tables
WHERE table_name = 'TEST_ROWDEPENDENCIE';
TABLE_NAME
DEPENDENCIES
TEST_ROWDEPENDENCIE
ENABLED
GUI
GUI
Message
MessageEnqueue
Enqueue
Capture
CaptureVerwaltung
Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Client
Monitor
SCN-Capture
SCN-CaptureJob(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
25
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
GUI
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
•
•
•
•
•
Consumer = GUI Client/ Maske/ User
Anmeldung an das Notification System per PL/SQL API
beinhaltet Empfängerliste
jede GUI (Maske) registriert sich zusätzlich als Client Listener
Aufgaben:
• Mapping zwischen DB-Objekten und GUI Definition herstellen
• Definition welche Tabellen von den Capture Jobs überwacht werden
• Monitoring Aufgaben
• erkennen und abmelden inaktiver Consumer
GUI
GUI
Message
MessageEnqueue
Enqueue
Capture Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Quelltabellen
Client
Monitor
SCN-Capture
SCN-CaptureJob(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
26
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
GUI
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
GUI
• Scheduler Jobs
• Überwachung der Tabellen aus der Consumer Verwaltung
• ist ein Client Listener vorhanden, wird die Ergebnismenge der jüngsten DML Änderung
gesammelt und an die Schnittstelle übergeben (Message Enqueue)
GUI
GUI
Message
MessageEnqueue
Enqueue
Capture
CaptureVerwaltung
Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Quelltabellen
Client
Monitor
SCN-Capture Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
27
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
• Erzeugen einer Textnachricht gruppiert nach den jeweiligen Sprach- und sonstigen
Ländereinstellungen des Consumer
• senden der Nachricht an die jeweilige Empfängerliste
• Schnittstelle zwischen GUI und Datenbank ist eine Multisubscriber Queue
• JMS Payloadtype
• Nachrichtenformat JSON
• Nachrichten können buffered oder persistent an versendet werden
• bei „Flow Control“ Exception Nachricht als persistent versenden
GUI
GUI
Message Enqueue
Capture
CaptureVerwaltung
Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Quelltabellen
Client
Monitor
SCN-Capture
SCN-CaptureJob(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
28
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
GUI
GUI Notification
Architektur
QuellTabellen
Consumer
Verwaltung
Capture
Job(s)
Message
Enqueue
GUI
• Auslesen der Queue mittels Java
Weiterführende Informationen mit Code Beispielen gibt es in einer der nächsten
DOAG News Ausgaben (nach der 12c Ausgabe).
GUI
Message
MessageEnqueue
Enqueue
Capture
CaptureVerwaltung
Verwaltung
5
1
JMS-QUEUE
Queue
Monitor
PA_GUI_NOTIFICATION.ANMELDEN()
4
PA_NOTFICATION_MESSAGES
LISTENER
CONSUMER
Quelltabellen
Quelltabellen
Client
Monitor
SCN-Capture
SCN-CaptureJob(s)
Job(s)
Tabelle A
3
Tabelle B
2
Tabelle ...
29
25.09.2013
SCN
CAPTURE
Job A
Einsatz von Messaging innerhalb der Oracle Datenbank
CAPTURE_INFO
asynchrone Prozesse
mittels Messaging
serielle
Verarbeitung
parallele
Verarbeitung
Lastverteilung
asynchrone
Prozesse
Replizieren und
Wiederherstellen von Daten
zentrale
Schnittstelle
Mischform
seriell/ parallel
Messaging
GUI Notification
…
mittels Messaging
asynchrone Prozesse
mittels Messaging
Monitoring
nachrichtenbasierter Systeme
30
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
asynchrone Prozesse
mittels Messaging
asynchron seriell
• asynchrone Aufgaben müssen seriell verarbeitet werden
• z.B.: Worflowprozesse - Einstellung vor Änderung vor Löschung verarbeiten
PACKAGE_AQ
AQ_ASYNC_SERIELL
Scheduler
PROC_APPLY_ASYNC_SERIELL
AQ_DISPATCHER
PROCEDURE A
PROCEDURE B
PROCEDURE ...
asynchron parallel
• asynchrone Aufgaben können parallel verarbeitet werden
• Monitoring Job startet je nach Queue-Auslastung neue Scheduler
• z.B.: E-Mail Versand
Scheduler
A
PACKAGE_AQ
AQ_ASYNC_PARALLEL
...
PROC_APPLY_ASYNC_PARALLEL
Scheduler
N
Monitoring
31
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
AQ_DISPATCHER
PROCEDURE A
PROCEDURE B
PROCEDURE ...
asynchrone Prozesse
mittels Messaging
Mischform
•
•
•
•
•
•
Kombination aus serieller und paralleler Verarbeitung
die Elemente einer Gruppe müssen seriell verarbeitet werden
Unterschiedlicher Gruppen können aber parallel verarbeitet werden
Identifikation für Serialisierung kann mitgegeben werden
Monitoring Job startet je nach Queue-Auslastung und Konfiguration neue Scheduler
z.B.: Einstellung, Änderung und Löschung von Auftrag Nr. 1 müssen seriell Verarbeitet
werden, Auftrag Nr. 2 kann aber parallel zu Auftrag Nr. 1 abgearbeitet werden
Scheduler
A
serialize
ident
PACKAGE_AQ
AQ_ASYNC
...
PROC_APPLY_ASYNC
Scheduler
N
Monitoring
32
25.09.2013
ASYNC_CONFIG
Einsatz von Messaging innerhalb der Oracle Datenbank
AQ_DISPATCHER
PROCEDURE A
PROCEDURE B
PROCEDURE ...
asynchrone Prozesse
mittels Messaging
Beispiel
BEGIN
PA_AQ.ENQUEUE_ASYNC_SERIELL(
IN_IDENT => 'DO_SOMETHING'
,IN_ID
=> 4711 );
END;
CREATE OR REPLACE PACKAGE BODY PA_AQ IS
-- Aufbau XML Message und Enqueue
PROCEDURE ENQUEUE_ASYNC_SERIELL(IN_IDENT IN VARCHAR2, IN_ID IN NUMBER)
...
END;
-- Package zum Verteilen der Aufgaben
CREATE OR REPLACE PACKAGE BODY PA_AQ_DISPATCHER IS
...
PROCEDURE APPLY_MESSAGE(IN_MSG IN SYS.XMLTYPE)
...
v_ident := GET_XML_VALUE(IN_XML => IN_MSG, IN_PFAD => '/async/ident');
v_id
:= GET_XML_VALUE(IN_XML => IN_MSG, IN_PFAD => '/async/id'
);
CASE v_ident
WHEN 'DO_SOMETHING' THEN
PA_SOMETHING(IN_ID => v_id)
...
END;
33
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Monitoring
Motivation
Datenvolumen
Schwellwertüberwachung
Verarbeitungsgeschwindigkeit
Monitoring
Replizieren und
Systemübergreifende
Effekte
„Stoßzeiten“
erkennen
Wiederherstellen von Daten
Messaging
GUI Notification
…
mittels Messaging
asynchrone Prozesse
mittels Messaging
Monitoring
nachrichtenbasierter Systeme
34
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Monitoring
mittels Nagios (Icinga)
Datenbank
Queue
PA_MONITORING
Queue
Monitoring
Message Tabelle
Message Tabelle
Monitoring
Config
Monitoring
Template
Icinga
Server
V_MONITORING
Beschreibung
•
•
•
•
•
35
Job gesteuerter Aufruf des Monitorings
Logik befindet sich im Package PA_MONITORING
Konfiguration befindet sich in separaten Tabellen (Messpunkttyp, Schwellwerte)
Messwerte werden für zwei Tage in der Tabelle „MONITORING“ gesichert
Icinga Schnittstelle ist die View V_MONITORING
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Monitoring
mittels Nagios (Icinga)
Messpunkte
• Überwachung aller Queue- und Message- Tabellen
• Messpunkte/ Kennzahlen:
• Anzahl unverarbeiteter Nachrichten
• Anzahl verarbeiteter Nachrichten
• Wartezeit
• Maximale Verarbeitungsdauer
Weiterführende Informationen mit Code Beispielen gibt es in einer der nächsten
DOAG News Ausgaben.
36
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
IHR
ANSPRECHPARTNER
Fragen?
Präsentation und weiter Publikationen unter:
http://www.berenberg.de/publikationen-it.html
37
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
IHR
ANSPRECHPARTNER
Vielen
Dank für Ihre Aufmerksamkeit.
Steffen Kantorek
Softwareentwickler
Mitwirkende
Tobias Kreidel
Nis Nagel
Kai Pillatzki
Michael Griesser (Freiberufler)
38
25.09.2013
Einsatz von Messaging innerhalb der Oracle Datenbank
Herunterladen