GTUG 17./18. April 2012 in Ratingen Portierung einer Oracle PL/SQL basierenden Anwendung auf HP NonStop mit SQL/MX [email protected] Aluminium Norf GmbH Koblenzer Str. 120 41468 Neuss ALUNORF Ein Walzwerk für die Welt 1 Gliederung • • • • Aufgabenstellung Motivation Herausforderungen Lösungsansätze – Zieldatenbank SQL/MX • Hoffnungsträger: Referentielle Integrität, Trigger, Stored Procedures – Lösungsansatz LOGDB in 2 Schritten • Datenbank von Oracle auf NonStop verlagern • Server auf NonStop verlagern – Lösungsansatz BDEDB mit 2 Wegen • Prototyp BDEDB mit Java Stored Procedures BEA Weblogic 8.1.4 auf NonStop • BDEDB mit BDESRV auf NonStop • Fazit ALUNORF Ein Walzwerk für die Welt 2 Aufgabenstellung • LOG-Datenbank von Oracle nach S-Serie Mehrere 100 WINDOWS Clients und Server Ein multithreaded WINDOWS Server (LOGSRV) Anwendungslogik ca. 80% in PL/SQL Client/Server Kommunikation über TCP/IP (Request/Reply) WINDOWS Managementtool Oracle 9i WINDOWS Cluster • BDE-Datenbank von Oracle nach S-Serie (-> Folgeprojekt) Ca. 150 WINDOWS Clients Eine multithreaded WINDOWS Middleware (Server) Anwendungslogik ca. 80% in PL/SQL Client/Server Kommunikation über • COM bzw. ActiveX Control und • TCP/IP (Request/Reply) zur Middleware WINDOWS Managementtool Oracle 9i WINDOWS Cluster ALUNORF Ein Walzwerk für die Welt 3 Aufgabenstellung LOGDB IT-Support & Entwicklung WINDOWS Cluster WINDOWS Cluster Node1 in RZ1 T1 T2 LOGSRV Produktion Oracle LOGDB BDE‘s Server Client1 TCP/IP Request/Reply Server1 Client2 Server2 Client3 Server3 Oracle Call Interface (OCI) T1 WINDOWS APIs C/C++ Library ActiveX DLL LogDBCI.exe NonStop API C++ Library COBOL Library Oracle Call Interface (OCI) T2 LOGSRV Oracle LOGDB WINDOWS Cluster Node2 in RZ2 ALUNORF Ein Walzwerk für die Welt 4 Aufgabenstellung LOGDB Viewer ALUNORF Ein Walzwerk für die Welt 5 Aufgabenstellung LOGDB Viewer ALUNORF Ein Walzwerk für die Welt 6 Motivation • LOGDB/BDEDB zunehmend strategischer – – LOGDB stark erweitert zu einer System Management DB (Ende 2006) BDEDB stark erweitert für Konfiguration und Softwareverteilung aller BDEs (Ende 2007) • Oracle Cluster nur ausfallsicher, nicht hochverfügbar – Heute: Oracle RAC (ab Standard Edition) ist graduell besser • Oracle NUP Lizenzen pro User und Device – Heute: Oracle RAC Standard Edition mit CPU Lizenz wäre preiswerter • NonStop ohne Mehrkosten für Lizenzen – NonStop Resourcen waren verfügbar • NonStop ist hochverfügbar „out of the box“ – Heute: NS-Serie mit XP-Storage -> „out of many boxes“ • Alunorf suchte einen geeigneten SQL/MX Prototypen – – außerhalb des Kerngeschäftes projektierbar mit wenig Resourcen ALUNORF Ein Walzwerk für die Welt 7 Herausforderungen • Welche Oracle Datenbankfeatures sind noch nutzbar? – PL/SQL, Stored Procedures (SP), Sequences, Referentielle Integrität insb. Cascading DELETE für FK, Trigger, Transaction Isolation für SP, Dynamisches SQL • Wohin mit der PL/SQL Businesslogik? • Wie mit dem WINDOWS Client kommunizieren? – ODBC, RSC/VSP… – Massendaten zum WINDOWS Client? • Performance ? – Bis Ende 2011 S-Serie im Einsatz ALUNORF Ein Walzwerk für die Welt 8 Oracle Features • • • • • • • • kontra PL/SQL und Emb-SQL Stored Procedures in PL/SQL BLOBs Sequences Cascading delete für FK Trigger Transaction Isolation für SP Dynamisches SQL – Performant – Query plan caching plus Statement Rewrite SQL/MX Features • • • • • • • • ANSI SQL und Emb-SQL Stored Procedures in Java Nicht implementiert Nicht implementiert Nicht implementiert Quasi nicht implementiert Hilfskonstrukte mit MP ALIAS Dynamisches SQL – Langsam – ? ALUNORF Ein Walzwerk für die Welt 9 Anwendungslogik mit PL/SQL • PL/SQL ist vollständige Programmiersprache – – – Variablen, Cursor, Ablaufkontrolle, Prozeduren, Funktionen, Trigger, Transaktion, Errorhandling, Exceptions… Über externe PL/SQL Prozeduren kann Oracle mit C/C++ und Java Code nahezu beliebig erweitert werden Menge Standardprozeduren für IP, Webservices, Queues ist sehr hoch • Eine Stored Procedure (oder Function) ist ein funktionaler Aspekt einer Anwendung (oder Library) • Ein Set von Stored Procedures (oder Functions) ist die Anwendung (oder Library) und heißt Packet • Der Server ist die Oracle Datenbank (out of the box) – Stored Procedures in PL/SQL können von beliebigen Datenbank Clients (und Servern) aufgerufen werden • OCI, ODBC, JDBC…. – Im Rahmen einer Session oder Connection können Stored Procedures konsumiert und orchestriert werden ALUNORF Ein Walzwerk für die Welt 10 Anwendungslogik mit PL/SQL - Package CREATE OR REPLACE PACKAGE LOGSRV IS FUNCTION Version RETURN VARCHAR2 ; FUNCTION LogEvt( vAppName vAppInst vEvtDateTime vEvtMasch vEvtCategory vEvtType vEvtLevel vEvtInfo ) RETURN NUMBER ; VARCHAR2, VARCHAR2, VARCHAR2, VARCHAR2, VARCHAR2, NUMBER, NUMBER, VARCHAR2 FUNCTION LogEvtData( vAppName vAppInst vEvtDateTime vEvtMasch vEvtCategory vEvtType vEvtLevel vEvtInfo vEvtData ) RETURN NUMBER ; VARCHAR2, VARCHAR2, VARCHAR2, VARCHAR2, VARCHAR2, NUMBER, NUMBER, VARCHAR2, RAW ... END LOGSRV ; / ALUNORF Ein Walzwerk für die Welt 11 Anwendungslogik mit PL/SQL - Package Body CREATE OR REPLACE PACKAGE BODY LOGSRV IS FUNCTION Version RETURN VARCHAR2 IS BEGIN RETURN '2.1.2' ; END; FUNCTION LogEvt( vAppName VARCHAR2, vAppInst VARCHAR2, vEvtDateTime VARCHAR2, vEvtMasch VARCHAR2, vEvtCategory VARCHAR2, vEvtType NUMBER, vEvtLevel NUMBER, vEvtInfo VARCHAR2 ) RETURN NUMBER IS vRet NUMBER := 0 ; vEvtId NUMBER := 0 ; vCurAlarmEvtID NUMBER := 0; vCurAlarmState NUMBER := 0; vCurAlarmHistory NUMBER := 0; vEvtInfo2 VARCHAR2(512); vEvtType2 NUMBER := 0; BEGIN IF vEvtType = 5 THEN vRet := LOGSRV.LogAlarmExist( vAppName, vAppInst, vEvtMasch, vEvtCategory, vCurAlarmEvtID, vCurAlarmState, vCurAlarmHistory ) ; IF vRet = 0 THEN vEvtInfo2 := 'AlarmSet with error NO_DATA_FOUND, alarm does not exist' ; vEvtType2 := 2 ; SELECT S_LOGEVT_EVTID.NEXTVAL INTO vEvtId FROM DUAL ; vRet := LOGSRV.LogEvtCreate( vAppName, vAppInst, vEvtDateTime, vEvtMasch, vEvtCategory, vEvtType2, vEvtLevel, vEvtInfo ) ; … ALUNORF Ein Walzwerk für die Welt 12 Abbild. der Anwendungslogik auf NonStop • PL/SQL – Programmiersprache mit Emb-SQL (COBOL, C/C++,…) • Stored Procedure – Messagetyp eines Pathway Servers (Request/Reply) – PL/SQL SP Parameter müssen in der Messagestruktur abgebildet werden • Package – Summe aller Messagetypen eines Pathway Servers • Oracle Call Interface (OCI) – NonStop Anwendungen • • SERVERCLASS_SEND_, WRITEREADX, … C/C++ und COBOL Library – Middleware für non-NonStop Anwendungen • RSC, CSL, VSP, SOAP, …. – Massendaten bleiben problematisch für Non-ODBC Anwendungen • UMS für RSC, CSL, VSP möglich ALUNORF Ein Walzwerk für die Welt 13 Lösungsansatz LOGDB - Phase 1 1. Oracle wird verlagert auf SQL/MX - BLOBs werden simuliert (VARCHAR & ODBC/MX binding) - SEQUENCEs werden simuliert (Tabelle) - Cascading delete für foreign keys müssen manuell ausprogrammiert werden 2. LOGSRV mit ODBC/MX gegen SQL/MX - PL/SQL Packages als C++ Klassen Stored Procedures als C++ Methoden C++ Exception statt PL/SQL Exception Highlevel C++ OdbcLib ersetzt OciLib 3. LOGDB-GUI mit ODBC/MX gegen SQL/MX - Highlevel C++ OdbcLib ersetzt OciLib (wie LOGSRV) ALUNORF Ein Walzwerk für die Welt 14 Lösungsansatz LOGDB – Phase 1 Start IT-Support & Entwicklung WINDOWS Cluster WINDOWS Cluster Node1 in RZ1 T1 T2 LOGSRV Produktion Oracle LOGDB BDE‘s Server Client1 TCP/IP Request/Reply Server1 Client2 Server2 Client3 Server3 Oracle Call Interface (OCI) T1 WINDOWS APIs C/C++ Library ActiveX DLL LogDBCI.exe NonStop API C++ Library COBOL Library Oracle Call Interface (OCI) T2 LOGSRV Oracle LOGDB WINDOWS Cluster Node2 in RZ2 ALUNORF Ein Walzwerk für die Welt 15 Lösungsansatz LOGDB – Phase 1 IT-Support & Entwicklung NonStop Server 4 CPU mit 1 GB RAM SQL/MX LOGDB Produktion BDE‘s Server OdbcLib & ODBC/MX Client1 TCP/IP Request/Reply OdbcLib & ODBC/MX Server1 Client2 Server2 Client3 Server3 T1 WINDOWS APIs C/C++ Library ActiveX DLL LogDBCI.exe T1 LOGSRV WINDOWS Cluster ALUNORF Ein Walzwerk für die Welt 16 Lösungsansatz LOGDB - Phase 1 Fazit 1. Oracle wird verlagert auf SQL/MX – ODBC/MX • ODBC/MX ist das bessere ODBC für NonStop – – • • • – ODBC/MX i.A. nur mit prepared cursors performant Keine Nested Cursors in ODBC/MX Memory Leaks in ODBC/MX und somit keine Langzeitstabilität (div. Fehlerbilder) SEQUENCE Simulation mit UPDATE/SELECT wenig performant • – Timestamp Behandlung Publish / Subscribe Caching von PK IDs nötig (ca. 50-100 sinnvoll) Reorganisation der Datenbank mit foreign keys weniger performant • Foreign keys Definitionen entfernt 2. Oracle LOGSRV mit ODBC/MX gegen SQL/MX – – Insgesamt ist das System komplexer (weil verteilter) Auf S-Serie deutlich langsamer als Oracle, wenige Optimierungspotentiale verblieben (ROWSET) 3. LOGDB-GUI mit ODBC/MX gegen SQL/MX - Auf S-Serie trotz Optimierung deutlich langsamer als Oracle, wegen Dyn-SQL Entwickler und Administratoren im Performancefrust ALUNORF Ein Walzwerk für die Welt 17 Lösungsansatz LOGDB - Phase 2 1. LOGSRV wird Pathway Server 2. VSP als Middleware für (fast alle) Clients • • • Eigenentwicklung (RSC-Ersatz) und Standard seit 1993 für Clients in der Alunorf Sehr performant Sehr stabil ALUNORF Ein Walzwerk für die Welt 18 Lösungsansatz LOGDB – Phase 2 Start IT-Support & Entwicklung NonStop Server SQL/MX LOGDB Produktion BDE‘s Server OdbcLib & ODBC/MX Client1 TCP/IP Request/Reply OdbcLib & ODBC/MX Server1 Client2 Server2 Client3 Server3 T1 WINDOWS APIs C/C++ Library ActiveX DLL LogDBCI.exe T1 LOGSRV WINDOWS Cluster ALUNORF Ein Walzwerk für die Welt 19 Lösungsansatz LOGDB – Phase 2 IT-Support & Entwicklung NonStop Server Pathsend VSP Produktion BDE‘s Server Client1 VSP (TCP/IP) Request/Reply LOGSRV SQL/MX LOGDB Emb-SQL/MX OdbcLib & ODBC/MX LogSrv DLL Server1 Client2 Server2 Client3 Server3 WINDOWS APIs C/C++ Library ActiveX DLL LogDBCI.exe ALUNORF Ein Walzwerk für die Welt 20 Lösungsansatz LOGDB - Phase 2 Fazit 1. LOGSRV wird Pathway Server – C++ Code ist gute Ausgangsbasis, d.h. die Abbildung von C++/OdbcLib auf C++/EmbSQL ist überschaubar Skalierbarkeit erfordert zusätzliche Modularisierung – • • • • – 2. Die Sequenz Erzeugung muss in einen neuen (Pathway) Server ausgelagert werden Mehrere Aktionen müssen in einer Transaktion zusammengefasst werden !!! Performance erheblich besser als in Phase 1, erreicht aber nicht jene von Oracle Performance vom LOGDB-GUI unverändert schlecht Das System ist noch komplexer als in Phase 1 VSP als Middleware für (fast alle) Clients – – – Messagestrukturen müssen nicht geändert werden, weil das VSP-Protokoll transparent ist Die meisten Clients benötigen nur eine neue DLL (die anderen einen compile&link) VSP ist proprietär (aber Alunorf Standard für jegliche Message basierte Kommunikation zur NonStop) NS-Serie (2012) LOGSRV dramatisch schneller (ca. Faktor 7, von max. 350 auf 2400 Ereignisse pro Sekunde) LOGDB-GUI erheblich schneller und klar praxistauglich (immer noch langsamer als Oracle) Entwickler und Administratoren sind begeistert ALUNORF Ein Walzwerk für die Welt 21 Gesamtfazit „Oracle kontra SQL/MX“ (Sicht Alunorf) Die Entscheidung zur Portierung der Anwendung auf NonStop war insg. richtig • Oracle und SQL/MX liegen in Konzeption und Funktionalität weit auseinander und die Kluft wird größer – – – Oracle 9-11g ist deutlich überlegen in Funktionalität und programmers productivity SQL/MX (und SQL/MP) punktet klar in Hochverfügbarkeit TCO Betrachtungen überlasse ich den Managern… (aber…) • • – Aktuell: Überlegungen einer Rückportierung von SQL/MX auf SQL/MP • • • • • XP-Storage basierende NS-Series Systeme sind ähnlich komplex wie Oracle RAC Systeme TCO Vorteile der NonStop Systeme werden geringer werden SQL/MX hat es bislang nicht geschafft ,strategisch zu werden (ca. 3 Mio. Zeilen C/COBOL FC100) Nur graduelle Vorteile von SQL/MX gegenüber SQL/MP Weiterentwicklung von SQL/MX kommt scheinbar kaum voran (gemessen an Oracle, SQLServer, MySQL, …) Migration von S-Serie auf NS-Serie zeigt konzeptionelle Schwächen von SQL/MX i.B. Upgrade/Export/Import/ Entwickler für SQL/MX oder SQL/MP zu begeistern ist schwer, wenn diese Oracle Erfahrung aufgebaut haben (leider unvermeidbar) – – weil in SQL/MX ein PL/SQL Äquivalent fehlt, ist es für viele Entwickler nur ein „neueres“ SQL/MP Komplexe Reports/Queries werden heute überwiegend auf Oracle erstellt (klar: Produktion auf NonStop) • – – Datenreplikation relevanter Tabellen mit DDF von NonStop zu Oracle Praxisfremde Implementierungen, z.B. TRIGGER, helfen nicht zu besserer Akzeptanz Stored Procedures in Java wurden von uns intensiv getestet • • funktionieren gut im Zusammenspiel mit ODBC/MX und BEA Weblogic, benötigen aber zus. Skills benötigen enorme Resourcen und waren auf S-Serie viel zu langsam, gemessen an PL/SQL ALUNORF Ein Walzwerk für die Welt 22 GTUG 17./18. April 2012 in Ratingen [email protected] Aluminium Norf GmbH Koblenzer Str. 120 41468 Neuss ALUNORF Ein Walzwerk für die Welt 23