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