FH Aachen, Abteilung Jülich Umstellung der Team4-eigenen SSIS-Komponenten auf den Standard-Protokoll-Mechanismus auf Basis von Microsoft SQL Server 2012 Johann Jansen y Alegret 23. Dezember 2011 Inhaltsverzeichnis 1. Einleitung 3 2. Grundlagen 2.1. Microsoft SQL Server Integration Services 2.1.1. Allgemeines . . . . . . . . . . . . . 2.1.2. Control Flow . . . . . . . . . . . . 2.1.3. Data Flow . . . . . . . . . . . . . . 2.1.4. Connection Manager . . . . . . . . 2.2. SSIS-Komponenten von Team4 . . . . . . 2.3. Neuerungen bei Microsoft SQL Server 2012 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 5 6 6 12 3. Aufgabenstellung: Machbarkeitsstudie zur Umstellung der SSIS-Komponenten von Team4 auf den Protokoll-Mechanismus von MS SQL Server 2012 (Proof of Concept) 14 4. Analyse 16 4.1. Team4-spezifisches Verfahren zur Speicherung des Protokolls . . . . . . . 16 4.2. Protokollverfahren in Microsoft SQL Server 2012 . . . . . . . . . . . . . . 17 4.3. Vergleich der Verfahren (GAP-Analyse) . . . . . . . . . . . . . . . . . . . 18 5. Realisierung: Notwendige Schritte zur Umstellung des Protokoll-Mechanismus 19 6. Ergebnisse und Schlussfolgerungen 24 7. Zusammenfassung und Ausblick 25 A. Literaturverzeichnis 26 B. Abkürzungsverzeichnis 27 2 1. Einleitung Die Firma Microsoft bietet ein SQL-Datenbanksystem mit dem Namen Microsoft SQL Server an. Die derzeit aktuelle Version ist MS SQL Server 2008R2. Im Jahr 2012 soll eine neue Version mit der Bezeichnung MS SQL Server 2012 herauskommen. Es wurden für Entwicklungs- und Testzwecke schon Vorabversionen veröffentlicht, die zuerst unter dem Codenamen „Denali“ und aktuell als „MS SQL Server 2012RC0“ bereitgestellt wurden. Anhand der bereitgestellten Dokumentation ist schon zu erkennen, dass viele Neuerungen geplant sind. Eine wesentliche Neuerung betrifft die Technologie „SQL Server Integration Services“ (SSIS), die bei bestimmten Version von MS SQL Server mitgeliefert wird. Diese Technologie zur graphischen Erstellung von ETL-Programmen (Extract Transform Load), die als Pakete bezeichnet werden, wird von Team4 viel verwendet. Es wird bei dieser Technologie die Möglichkeit geben, die Pakete in ein neu erschaffenen Katalog abzulegen, der eine spezielle Datenbank ist. Bei der Ausführung dieser Pakete im Katalog werden im Gegensatz zu früher automatisch Protokollierungen vorgenommen. Die Protokolleinträge werden ebenfalls im Katalog gespeichert. Für diese SSIS wurden von Team4 Komponenten entwickelt, mit denen man u. a. in „Lotus Notes“ und in „Microsoft Dynamics CRM“ Daten lesen und schreiben kann. Diese Komponenten erstellen bei der Ausführung ein Protokoll, dass in Datenbanktabellen gespeichert wird. Diese Tabellen sind in einer von Team4 angelegten Datenbankstruktur und werden von keinem anderen Hersteller verwendet. Dies hat den Nachteil, dass die Auswertung der Protokollierung nur mit Reporten von Team4 möglich ist und nicht mit standardisierten Reporten. Diese selbst entwickelten Komponenten sollen in Zukunft ihre Protokolleinträge stattdessen in den Katalog schreiben. Es wird im folgenden untersucht, ob diese Umstellung möglich ist. Dazu werden der alte und der neue Protokoll-Mechanismus verglichen und dokumentiert, was bei einer Umstellung zu berücksichtigen wäre. In dem Proof of Concept wird dann abschließend beurteilt, ob die Umstellung sinnvoll wäre, falls sie überhaupt möglich erscheint. 3 2. Grundlagen 2.1. Microsoft SQL Server Integration Services 2.1.1. Allgemeines Die SQL Server Integration Services (SSIS)von Microsoft sind ein Bestandteil von Microsoft SQL Server. Sie können für Datenintegrationszwecke verwendet werden. Man kann die Daten in Datenbanken damit bereinigen oder auch transformieren. Man kann diese Dateien auf verschiedene Art und Weise sich anliefern lassen und versenden, z.B. auch per FTP. Es können Benachrichtigungen von bestimmten Ereignisse per Email versendet werden. Komplexe Geschäftsprozesse können mit Hilfe der SSIS abgebildet werden.Microsoft (2011b) Es können Daten aus verschiedenen Quellen gelesen und in verschiedene Ziele geschrieben werden. Quellen und Ziele können alle möglichen Arten von Datenbanken sein, aber auch bestimmte Dateien können mit den SSIS verwendet werden. Mitgeliefert werden unter anderem Schnittstellen für Datenbanken, die OLE DB oder ADO.NET unterstützen. Auch sind Schnittstellen für Excel-Dateien, CSV-Dateien (Flat Files) und AccessDateien mitgeliefert. Die Liste der möglichen Datenbankentypen und Dateitypen lässt sich durch Programmierung eigener Komponenten erweitern, bzw. solche Komponenten werden von verschiedenen Firmen angeboten. Team4 bietet aktuell SchnittstellenKomponenten für Lotus Notes und Microsoft Dynamics CRM an. Diese Komponenten lassen sich in den Programmiersprachen VB.NET und C# entwickeln. Die dazu notwendigen Programmressourcen und Interface-Definitionen werden von Microsoft mit dem SQL Server mitgeliefert, bzw. stehen frei verfügbar im Internet zur Verfügung. Zur Erstellung der SSIS-Jobs werden Pakete (Packages) erzeugt, die mit einer graphischen Entwicklungsumgebung bearbeitet werden. Diese Entwicklungsumgebung ist ein Bestandteil des „Business Intelligence Development Studio“ und in „Microsoft Visual Studio“ eingebettet. Es stehen dort einem eine Vielzahl an Tools zur Verfügung. Auf der obersten Ebene ist der „Control Flow“. In diesen Control Flow können einzelne Task eingebunden werden. Diese Tasks sind individuell konfigurierbar. So gibt es z.B. Tasks die SQL-Befehle ausführen oder Skript-Tasks, in denen VB.NET oder C# Code verwendet werden kann. Eine besondere Task ist der „Data Flow“-Task. Dieser wird in der „Data Flow“-Ebene bearbeitet und besteht aus „Data Flow“-Komponenten, die auch individuell konfigurierbar sind. Es können mehrere „Data Flow“-Tasks in einem „Control Flow“ existieren. Im folgenden werde ich auf die beiden unterschiedlichen Ebenen „Control Flow“ und „Data Flow“ eingehen. 2.1.2. Control Flow Der „Control Flow“ ist eine Arbeitsfläche, in der sich Container oder Tasks befinden, die in der Toolbox ausgewählt und auf die Fläche gezogen werden. Container können 4 ein oder mehrere Tasks enthalten, Tasks können aber auch außerhalb eines Containers existieren. Mit dem Container werden Tasks gruppiert, auch ist es möglich, Container ineinander zu schachteln. Ein Task bildet einen einzelnen Prozess ab. Die Tasks sind miteinander über einen „Precedence Constraint“ verbunden. Dort wird bestimmt, ob der nächste Task ausgeführt wird, bzw. welcher Task als nächstes ausgeführt wird. So kann z.B. zwei unterschiedliche Tasks ausgeführt werden, je nachdem ob eine Bedingung erfüllt ist oder nicht. Vorgegebene mögliche Bedingungen sind Erfolg, Misserfolg und Beendigung des vorherigen Task. Tasks werden nacheinander ausgeführt und nicht gleichzeitig. Tasks, die in einem „For Loop Container“ oder in einem „Foreach Loop Container“ enthalten sind, werden so oft ausgeführt, wie es die dazugehörigen Bedingung verlangt. Es kann z.B. eine Liste in einer Variablen gespeichert werden. Die Listeneinträge können dann im Foreach Loop Container durchlaufen werden und dienen innerhalb des Containers als Parameter für die Tasks. 2.1.3. Data Flow Ein „Data Flow“-Task wird in einer eigenen Arbeitsfläche bearbeitet. Dort steht einem in der Toolbox eine Anzahl von Komponenten zur Verfügung, grob eingeteilt in „Data Flow Sources“, „Data Flow Transformation“ und „Data Flow Destination“. Diese werden auf die Arbeitsfläche gezogen und können mit einer „Data Flow Pipeline“ verbunden werden. Mit den Data Flow Source-Komponenten werden Daten aus einer Quelle gelesen, die mit dem Typ der Komponente übereinstimmen muss. Es gibt die mitgelieferte QuellKomponenten und die „Custom Components“. Mitgeliefert werden die Quell-Komponente für die schon im ersten Teil erwähnten Schnittstellen. Die Custom Components gehören zu den von Fremdfirmen entwickelten Schnittstellen-Erweiterungen für andere Dateiformate und Datenbanksysteme. Die Data Flow Destination-Komponente schreibt Daten in ein Ziel. Meistens existieren Ziel-Komponenten zu den gleichen Formaten und Datenbanksystemen wie zu den Quell-Komponenten. Sowohl die Ziel- als auch die Quell-Komponenten müssen meistens konfiguriert werden, z.B. welche Tabellen verwendet werden sollen. Die Verbindung zu der Datenbank bzw. Datei findet meistens über einen „Connection Manager“ statt. Diese werde ich im nächsten Abschnitt beschreiben. Als dritter Typ existieren die Data Flow Transformation-Komponenten. Mit ihnen werden die Daten transformiert. Sie haben einen Datenzulauf und einen Datenabfluss. Von ihnen sind eine große Anzahl mitgeliefert und man muss sie üblicherweise konfigurieren. Ein Data Flow-Task besteht üblicherweise aus einer oder mehreren Quell-Komponenten und einer oder mehreren Ziel-Komponenten. Dazwischen sind oft Transformations-Komponenten, von denen auch mehrere hintereinander sein können. Alle diese Komponenten werden über Data Flow Pipelines verbunden. Diese Pipelines transportieren die Daten von einer Komponente zur nächsten. Es gibt auch Transformations-Komponenten, die Daten von mehreren Pipelines zusammenführen oder die Daten in mehrere Pipelines verteilen. 5 Deswegen müssen die Anzahl der Datenquellen auch nicht mit denen der Datenziele übereinstimmen. 2.1.4. Connection Manager Üblicherweise existiert zu jeder Art von Datenbank oder Datei ein Typ von Connection Manager. Man kann in einem Paket mehrere Connection Manager vom gleichen Typ erstellen, falls mehrere Datenbanken/Dateien vom gleichen Typ verwendet werden. Diese Connection Manager werden sowohl von den Data Flow Source-Komponenten als auch von den Data Flow Destination-Komponenten verwendet. Es gibt auch Connection Manager, die von bestimmten passenden Control Flow-Tasks verwendet werden können. Z.B. kann ein OLE DB-Connection Mananger für den „Execute SQL Task“ verwendet werden. Darüber hinaus gibt es auch Connection Manager für allgemeine Verbindungen, in denen man z.B. Internetressourcen wie eine Website oder eine FTP-Verbindung angeben kann. 2.2. SSIS-Komponenten von Team4 Team4 hat eigene Custom Components für die SSIS entwickelt. Diese werden in Kundenprojekten verwendet, bei denen Microsoft SQL zum Einsatz kommt, aber auch einzeln vermarktet. Es gibt unter anderem den „Team4 Lotus Notes Connector“ und den „Team4 Microsoft Dynamics CRM Connector“. Außerdem gibt es noch einen „Team4 Log Task“. Der Team4 Microsoft Dynamics CRM Connector besteht aus einem Connection Manager für Microsoft Dynamics CRM-Systeme und dazugehörigen Data Flow Source und Data Flow Destination-Komponenten. Abbildung 1: ConnectionManager des Team4 Microsoft Dynamics CRM Connectors 6 Mit der Source kann man sogenannte Entitäten aus dem Microsoft Dynamics CRM (was in etwa einer Tabelle in SQL entspricht) oder das Ergebnis einer FetchXML-Abfrage auslesen. FetchXML ist eine XML-basierte Abfragesprache, die für das Microsoft Dynamics CRM-System verwendet werden kann und als Ergebnis Daten in Tabellenform liefert. Abbildung 2: Source-Komponente des Team4 Microsoft Dynamics CRM Connectors: Auswahl von Quelldatensätzen Aus diesen Daten kann man bestimmte Spalten (Columns) auswählen, die im Data Flow verwendet werden sollen. Abbildung 3: Source-Komponente des Team4 Microsoft Dynamics CRM Connectors: Auswahl von Quellattributen Die Destination-Komponente schreibt Daten in eine Entität. Es sind dort entweder Inserts, Updates oder Deletes möglich. 7 Abbildung 4: Destination-Komponente des Team4 Microsoft Dynamics CRM Connectors: Auswahl von Zielentität Dort muss eine Zuordnung der Eingangsdaten auf die Zielentität durchgeführt werden. Abbildung 5: Destination-Komponente des Team4 Microsoft Dynamics CRM Connectors: Auswahl von Zielattributen Der „Team4 Lotus Notes Connector“ besteht ebenfalls aus einem Connection Manager, Data Flow Source und Destination Komponenten. Lotus Notes ist ein dokumentenorientiertes Datenbanksystem, d.h. die Daten werden nicht in Tabellen, sondern in Dokumenten abgelegt. Jedes dieser Dokumente hat seine Daten in Feldern gespeichert, die in unterschiedlicher Anzahl vorhanden sein können. So ein Feld besteht jeweils aus einen Feldnamen, einen Datentyp und den Daten als Inhalt. Die Lotus Notes-Datenbankserver haben die Bezeichnung Domino. Im Connection Manager muss der Domino-Servername und der Pfad der Datenbank 8 angegeben werden. Es muss außerdem zur Authentifizierung eine Notes-ID und das zugehörige Passwort vorliegen, das ebenfalls im Connection Manager eingegeben wird. Abbildung 6: ConnectionManager des Team4 Lotus Notes Connectors Man kann mit der Source-Komponente aus Lotus Notes-Datenbanksystemen Dokumente auslesen. In der Source-Komponente muss man dann anhand bestimmter Kriterien auswählen, welche Dokumente man haben will. Man kann alle Dokumente, die im Feld FormName einen bestimmten Wert haben auswählen, oder auch eine Selektionsformel in der Lotus Notes-Formelsprache verwenden. Abbildung 7: Source-Komponente des Team4 Lotus Notes Connectors: Auswahl von Quelldatensätzen Man muss dann die Felder, die man haben will mit Namen und Zieldatentyp festlegen. Da bei Lotus Notes-Dokumenten Felder mit dem gleichen Feldnamen nicht zwangsläufig 9 den gleichen Typ haben, werden die Typen zu dem Zieldatentyp konvertiert, falls möglich, ansonsten wird eine Exception geworfen. Abbildung 8: Source-Komponente des Team4 Lotus Notes Connectors: Auswahl von Quellattributen Die Destination-Komponte kann entweder Updates, Insert oder Delete auf NotesDokumente in der Notes-Datenbank schreiben. Es müssen hier die Feldnamen und die Datentypen der Zielfelder festgelegt werden, falls Update oder Insert ausgewählt wurde. Bei Update und Delete müssen die jeweiligen Unique-Ids der Notes-Dokumente bekannt sein, die immer die Primärschlüssel der Notes-Dokumente sind. Sie sind bei allen NotesDokumenten vorhanden und es gibt auch keine andere Möglichkeit einen Primärschlüssel für Notes zu definieren. 10 Abbildung 9: Destination-Komponente des Team4 Lotus Notes Connectors: Auswahl von Zieldokumenten Der „Team4 Log Task“ kann im Control Flow verwendet werden. Er ist ausschließlich dafür konzipiert, eigene Meldungen in die Log-Datenbank zu schreiben. Man kann bei ihm den Typ der Meldung festlegen zwischen „Information“, „Warning“ und „Error“. Abbildung 10: Team4 Log Task Bisher wurde bei ihr wie auch bei den anderen Komponeten eine eigene von Team4 11 entwickelte Datenbankstruktur für Log-Meldungen verwendet worden. Es müssen für alle diese Team4-Komponenten insgesamt ein Connection Manager erzeugt werden vom Typ OLE DB, der auf die Protokolldatenbank zeigt. Diese soll durch den neuen Katalog von Microsoft SQL 2012 abgelöst werden. 2.3. Neuerungen bei Microsoft SQL Server 2012 Microsoft SQL 2012 wird gegenüber seinem Vorgänger MS SQL 2008R2 eine Vielzahl an Neuerungen bietenBachrach u. a. (2011). Die Einrichtung von Datenbankensystem mit Hochverfügbarkeit wird durch die Einführung neuer Technologien vereinfacht. Diese werden unter dem Oberbegriff „MS SQL Server AllwaysOn“ vermarktet. Teilweise gab es die Technologien schon vorher, doch es sind neue hinzugekommen. Zudem gibt es Neuerungen, die die Performance betreffen. Unter anderem wurde die Volltextsuche verbessert, auch gibt es jetzt die Möglichkeit, große Tabellen auf bis zu 15000 Partitionen aufzuteilen. Außerdem gibt es viele Neuheiten bei den Sicherheits- und Überwachungseinstellungen. Durch Datenbank-Authentifizierung kann man jetzt auf Datenbanken zugreifen, ohne eine Login für den SQL-Server zu haben. Die Audit-Funktionalität steht jetzt in allen Versionen von MS SQL 2012 zur Verfügung und wurde erweitert. Bei den SSIS von MS SQL 2012 ist jetzt eine neue Möglichkeit hinzugekommen, Pakete auf dem Server zu veröffentlichen: das „Project Deployment Model“ Ericson u. a. (2011). Es beinhaltet einige Änderungen zum vorherigen „Legacy Deployment Model“, das weiterhin verwendet werden kann. Folgende Unterschiede bestehen zwischen den beiden Modellen: • Anstatt von Konfigurationen werden Parameter verwendet, um die Eigenschaften (Properties) von Paketen zu bestimmen. • Es gibt Dateien (.ispac) für die Veröffentlichung, die das Paket und die Parameter enthällt, anstatt dass man die Paket-Dateien (.dtsx) und die Konfigurationsdateien (.dtsConfig) getrennt gespeichert veröffentlicht. • Das Projekt, das aus Paket und Parameter besteht, wird in einer speziellen neuen Datenbankstruktur, veröffentlicht, die mit dem neuen Modell eingeführt wurde. Diese wird als Katalog bezeichnet. Bei dem vorherigen Modell gab es die Möglichkeit, die Pakete im Dateisystem oder der Systemdatenbank „MSDB“ zu veröffentlichen. • Unterstützung der CLR (“Common Language Runtime“)ist im Gegensatz zu vorher auf Datenbankebene notwendig geworden. • Wichtigster Unterschied im Hinblick auf die Seminararbeit ist folgender: Beim der Ausführung von Paketen werden die Events automatisch erfasst und je nach Einstellung im Katalog gespeichert. Man kann diese dann mit SQL-Abfragen 12 auswerten. Beim vorherigen Model war es notwendig, einen „Log Provider“ dem Paket hinzuzufügen, um Events zu erfassen, sonst wurden diese nicht geloggt. 13 3. Aufgabenstellung: Machbarkeitsstudie zur Umstellung der SSIS-Komponenten von Team4 auf den Protokoll-Mechanismus von MS SQL Server 2012 (Proof of Concept) Die Team4 GmbH hat ein eigenes Customer Relationship Management System mit dem Namen „Lotus Notes CRM“ entwickelt. Viele Kunden dieser Software haben individuelle von Team4 angepasste Versionen dieses CRM-Systems gekauft. Auch gibt es Kunden, die Microsoft Dynamics CRM benutzen und individuelle Anpassungen bei Team4 beauftragen. Oft ist ein regelmäßiger automatischer Datenabgleich mit anderen Datenbanksystem und auch eine Aufbereitung der CRM-Daten für Reporte gewünscht. Bei beiden CRMSystemen gibt es integrierte Möglichkeiten zum Datenimport und Datenexport. Diese erfüllen jedoch nicht immer alle Anforderungen und sind nur eingeschränkt flexibel. Deswegen wird als Hilfsmittel oft ein Microsoft SQL Server mit den SSIS verwendet. Diese haben sich als sehr flexibel herausgestellt, so dass auch komplexe Transformationen relativ einfach umgesetzt werden können. Der Server fungiert dann als Schnittstelle zwischen allen Systemen. Er speichert die Daten zwischen und wird als „Datamart“ bezeichnet. Dieser Datamart führt regelmäßig ETL-Prozesse aus (Extract, Transform, Load). Die Daten werden aus dem Quellsystem geladen, gegebenenfalls transformiert und dann in das Zielsystem gespeichert. Bei den Kundenlösungen ist nicht immer eindeutig festgelegt, was das Quell- und was das Zielsystem ist. Das heißt, es kann auch bidirektionaler Datenaustausch stattfinden. Die ETL-Prozesse werden mit SSIS-Paketen realisiert. Dort kommen dann die Team4-Komponenten zum Einsatz, da ohne diese kein Zugriff der SSIS auf die CRM-Systeme von Microsoft und Team4 möglich ist. Diese Komponenten werden auch einzeln von Team4 angeboten, da sie auch von Fremdfirmen als Schnittstelle von SSIS zu Lotus Notes oder zu Microsoft Dynamics CRM verwendet werden kann. Bei der Ausführung von diesen SSIS-Paketen können einige Informationen anfallen, für die man sich im Nachhinein interessiert: War der Verbindungsaufbau erfolgreich, welche Entität wurde geladen, wie viele Datensätze wurden gelesen bzw. geschrieben, gab es Schwierigkeiten mit den Daten usw... . Für diese Informationen wurde eine eigene Datenbankstruktur erschaffen, in deren Tabellen diese Informationen protokolliert wurden. Man kann in diese Tabellen auch eigene Meldungen mit dem Team4-Log Task eintragen. Doch diese Datenbankstruktur ist nicht standardisiert und wird ausschließlich von Team4Komponenten verwendet. Darum besteht Interesse, diese Datenbankstruktur zu ersetzen. Es muss geprüft werden, ob und wie alle diese interessanten Information erfasst werden können durch den neuen Protokoll-Mechanismus von MS SQL Server 2012 im Project Deployment Model. Dann ist zu prüfen, ob sich relevante Unterschiede in der Verwendung ergeben und ob diese Unterschiede entscheidend für die Nutzbarkeit des neuen Mechanismus ist. 14 Protokolliert werden sollen: • Startzeitpunkt des Paketes • Name des Paketes • Text der Meldung • Ursprungskomponente der Meldung • Zeitpunkt der Meldung • Status der Meldung 15 4. Analyse 4.1. Team4-spezifisches Verfahren zur Speicherung des Protokolls Um Information zur Ausführung von Paketen dauerhaft festzuhalten setzen die Team4Komponenten einen Connection Manager zu einer OLE DB Datenbank voraus, die bei Team4 üblicherweise auf dem Datamart-Server liegt. In dieser Datenbank werden automatisch zwei Tabellen angelegt, falls diese noch nicht vorhanden sind: „T4LogBody“ und „T4LogHdr“. In der Tabelle „T4LogHdr“ stehen nur Informationen, welches Paket wann gestartet ist und wann endete, welche Laufzeit er hatte und ein Statusfeld. Dieses Statusfeld kann drei Werte haben: 0 für OK, 1 für Warning und 2 für Error. Der Status Warning wird gespeichert, wenn es mindestens eine Warnmeldung gegeben hat und keine Fehlermeldung. Error wird als Status gespeichert, wenn es mindestens eine Fehlermeldung gegeben hat. Ansonsten wird „OK“ als Status gespeichert. In der Tabelle „T4LogBody“ werden alle Meldungen gespeichert die von den Team4Komponenten protokolliert werden sollen. Diese enthält folgende Informationen: • ProcName: Name des ausgeführten Paketes • ObjType: Name des Objektes, dass den Protokolleintrag schreibt • StartTime: Startzeit des gesamten Paketes • MsgTime: Uhrzeit des Protokoll-Eintrages • Status: 0 regulär, 1 Warning, 2 Error • Msg: Text der Meldung Alternativ oder zusätzlich kann auch ein Connection Manager zu einer Textdatei verwendet werden, in der die Information gespeichert werden. Diese Möglichkeit wird bei produktiven Systemen von uns höchstens zusätzlich genutzt, da die Auswertung mit dem Team4-Log Report auf der Textdatei nicht möglich ist. Die Anzahl der Informationen, der beim Ausführung der Pakete protokolliert werden, lässt sich bei den Data Flow-Komponenten von Team4 durch Einstellung des Log Levels, einer Eigenschaft der Komponenten, beeinflussen. Das niedrigste Level ist 0 für wenig Protokoll-Einträge, das höchste ist 5 für ausführliche Protokollierung. Dazwischen gibt es noch die Stufen 1 bis 4. Nach der Ausführung des Paketes können keine Informationen ermittelt werden, die aufgrund eines niedrigen Log Levels nicht erfasst wurden. Falls diese Information erwünscht sind, müsste man den Log Level erhöhen und das Paket erneut ausführen, falls dies überhaupt möglich ist. Deshalb sollte man sich vor der Ausführung der Paketes überlegen, welche Informationen man benötigt und welche der eingestellte Log Level bietet. 16 4.2. Protokollverfahren in Microsoft SQL Server 2012 Wenn bei MS SQL 2012 das Project Deployment Model genutzt wird, gibt es in der dazugehörigen SSIS-Katalog-Datenbank Tabellen, in denen alle möglichen Laufzeitinformationen festgehalten werden. Bei der Ausführung eines Paketes, das im Katalog gespeichert ist, kann der Log Level auf vier vorgegebene Stufen gesetzt werden: • None: keine Protokollierung • Basic: Standard Protokollierung • Performance: reduzierte Protokollierung (gegenüber Standard) • Verbose: umfangreichste Protokollierung Unter anderem werden dort alle Events, die während einer Paketausführung erfasst werden, gespeichert. Welche Events erfasst werden, hängt direkt vom Log Level ab. Die Tabelle „internal.event_messages“ enthält für jedes erfasste Event einen Eintrag, die dazugehörige Nachricht wird in der Tabelle „internal.operation_messages“ gespeichert. Die Tabellen sind über einen Fremdschlüssel miteinander verbunden. Dann gibt es noch die Tabelle „internal.operations“, die ebenfalls mit einem Fremdschlüssel angebunden ist. In dieser kann man die Start- und Endzeit des Paketes ermitteln. Darüber hinaus gibt es noch eine Vielzahl von anderen Tabellen in dieser Datenbank, die Daten über die Ausführung der Pakete und die Einstellungen des Katalogs speichern. Diese kann man an dem Datenbankschema „internal“ erkennen, dass als Namensbestandteil vor dem eigentlichen Tabellennamen steht. Die Tabelle event_messages enthält unter anderem folgende Spalten: • package_name: Name des Paketes • event_name: Typ des protokollierten Event • message_source_name: Name des Objektes, dass den Event verursacht hat Die Tabelle operation_messages enhält u.a. folgendes • message: Inhalt der Nachricht • message_time: Uhrzeit der Nachricht Die Tabelle operations enhält u.a. folgendes: • start_time: Startzeit des Paketes • end_end: Endzeit des Paketes Insgesamt lassen sich die gleichen Information wie in den alten Tabellen auch in die neuen übertragen. Sie haben dort jedoch dann eine andere Struktur, die fest von Microsoft vorgegeben ist. Die Informationen werden nicht durch SQL-Befehle, die bisher in der Standard-Bibliothek von Team4 steckten, direkt in die Tabellen eingetragen, sondern durch die Ausführungseinheit von Microsoft, die automatisch protokolliert. 17 4.3. Vergleich der Verfahren (GAP-Analyse) Team4 Protokollverfahren Vorteile: • Ausführlichkeit der Protokollierung lässt sich bei jeder Komponente duch den Log Level einzeln festlegen. • Protokollierung findet auch bei Ausführung im Visual Studio statt. Nachteile: • Eigene Datenbankstruktur notwendig. • Keine standardisierte Berichte sind verwendbar. • Ausschließlich Meldungen von Team4-Komponenten werden protokolliert. • Ausführlichkeit lässt sich nicht mehr bei Ausführung des Paketes verändern. MS SQL Server 2012 Protokollverfahren bei Verwendung des Project Deployment Model Vorteile: • Standardisierter Katalog wird gemeinsam mit anderen Komponenten verwendet. • Standardisierte Berichte sind verwendbar. • Meldungen von allen Komponenten können gemeinsam protokolliert werden. • Ausführlichkeit lässt bei jeder Ausführung eines Paketes neu bestimmen. Nachteile: • Ausführlichkeit der Protokollierung ist nur für das ganze Paket gleich wählbar. • Protokollierung findet nur bei Ausführung im Katalog statt, nicht schon bei der Ausführung im Visual Studio bei der Entwicklung. Zusammenfassung: • Protokollierung findet vorher bei jeder Ausführung statt, nachher nur bei Ausführung aus dem Katalog heraus. • Ausführlichkeit der Protokollierung wird bisher beim Erstellen des Paketes festgelegt und ist bei jeder Ausführung des Paketes gleich. Beim neuen Verfahren wird die Ausführlichkeit erst bei jeder Ausführung einzeln bestimmt. • Protokollierung wird von einer eigenen Datenbankstruktur auf die genormte KatalogDatenbankstruktur verlegt. • Standardisierte Berichte sind nach einer Umstellung verwendbar, vorher nicht. 18 5. Realisierung: Notwendige Schritte zur Umstellung des Protokoll-Mechanismus Im folgenden wird zuerst aufgeführt, welche Meldungen unter welchen Bedingungen bisher protokolliert wurden. Danach wird untersucht, wie diese Meldungen und die Bedingungen auf das neue Konzept von MS SQL Server 2012 übertragen werden können. Team4 Log Task: Dieser Task erzeugt explizit einen Eintrag in der Tabelle T4LogBody. Man kann dort folgendes einstellen: • Process name: Enthällt den Namen des Paketes. Kann nicht durch die Maske verändert werden und wird im Feld ProcName übernommen • Object name: Frei wählbare Bezeichnung des Objektes der Meldung. Dort wird üblicherweise eingegeben, im welchem Kontext die Log-Meldung stattfindet und kommt ins Feld ObjType. • Message type: Man kann zwischen drei vorgegebenen Werte für den Typ einer Nachricht auswählen: Message, Warning, Error. Dieser Typ wird direkt im Feld Status der Tabelle T4LogBody verwendet. 0 wird bei Message, 1 für Warning und 2 für Error verwendet. • Message text: Hier kann der Text der Nachricht frei eingegeben werden. • Variable: Hier kann eine verfügbare Variable ausgewält werden. Verfügbar sind Variablen, die im gleichen Bereich (Scope) oder einem übergeordnetem angelegt wurden. Der Wert dieser Variable wird als Bestandteil der Nachricht als Text angehängt. Diese zusammengesetzt Nachricht kommt ins Feld Msg. Die sonstigen Felder der Tabelle werden automatisch gefüllt. StartTime enthält die Startzeit des Paketes, MsgTime enthält die Uhrzeit der Benachrichtigung. Bei den folgenden Komponenten kann man keine eigenen Meldungen in die Log-Tabelle T4LogBody schreiben. Hier werden die Meldungen durch die Ergebnisse der Ausführung während der Ausführung erzeugt. Man kann in sechs Stufen die Anzahl der automatisch erzeugten Meldungen einstellen. Bei 0 sind die wenigsten Meldungen, die nur über das wichtigste berichten. Bei 5 werden die meisten Meldungen geschrieben. Es folgt eine Aufzählung, was unter welchen Bedingungen protokolliert wird: Team4 MS CRM Source: Die Protokollierung ist abhängig von dem Log Level. Folgendes wird in dieser Komponente protokolliert: LogLevel ≥ 0 : • Version des MS CRM Connector 19 • Hinweis auf Probeversion, falls Software nicht registriert wurde LogLevel ≥ 1 : • Name MS CRM Connection, die für die Ausführung der Komponente angegeben wurde • Name der Entität aus MS CRM System, das die Ausführung der Komponente ausgewählt wurde. • Username, der auf das MS CRM zugreift LogLevel ≥ 2 : • Version der MS CRM Source • Version des MS CRM Connection Manager • Version der T4 Standard Bibliothek LogLevel ≥ 3 : • Es wird protokolliert, dass Daten gelesen werden: „[PrimeOutput] Retrieving entities from CRM“ LogLevel ≥ 4 : • Es wird protokolliert, welche Bestandteil (Column) der Entität bzw. des Resultates der fetchXML-Abfrage zum Auslesen ausgewählt wurden (Name und Datentyp) LogLevel ≥ 5 : • Es wird der Wert aller Bestandteile aller ausgelesenen Datensätze protokolliert. Team4 MS CRM Destination: Folgendes wird in dieser Komponente protokolliert: LogLevel ≥ 0 : • Version des MS CRM Connector • Hinweis auf Probeversion, falls Software nicht registriert wurde • Anzahl der veränderten Entitäten LogLevel ≥ 1 : • Name MS CRM Connection, die für die Ausführung der Komponente angegeben wurde • Name der Entität aus MS CRM System, das die Ausführung der Komponente ausgewählt wurde. 20 • Username, der auf das MS CRM zugreift • Modus des Schreibzugriffes LogLevel ≥ 2 : • Version der MS CRM Destination • Version des MS CRM Connection Manager • Version der T4 Standard Bibliothek LogLevel ≥ 3 : LogLevel ≥ 4 : • Es wird protokolliert, welche Bestandteil (Column) der Entität zu welchem Bestandteil der eingehenden Data-Flow-Pipe zugeordnet wurde. (Namen und Datentypen beider Bestandteile). LogLevel ≥ 5 : • Es wird der Wert aller Bestandteile aller geschriebenen Datensätze protokolliert. • Der Primärschlüssel (Uniqueidentifier) eines jeden geschriebenen Datensatzen oder die Art des Schreibzugriffes (Insert, Update, Delete) Team4 Lotus Notes Source: Folgendes wird in dieser Komponente protokolliert: LogLevel ≥ 0 : • Version des Team4 Lotus Notes Connector LogLevel ≥ 1 : • Name der Notes-Datenbank, die in der zugeordneten Notes Connection ausgewählt wurde • Benutzerdaten, die für den Datenbankzugriff benutzt werden • Verwendete Selektionsformel(leer, falls nicht ausgewählt) • Ausgewählter Wert für das Notes-Feld FormName, falls diese Auswahlfunktion des Connectors verwendet wurde LogLevel ≥ 2 : • Version der Team4 Notes Connection • Version der Team4 Lotes Bibliothek 21 • Version der Team4 Standard Bibliothek • Name der Notes Connection Manager • Version des Lotus Notes Server (Domino) • Anzahl der Dokumente, die der Selektionsformel entsprechen LogLevel ≥ 3 : • Aufbau der Verbindung zum Lotus Notes Server LogLevel ≥ 4 : • Es wird protokolliert, welche Felder in den Notes-Dokumenten als welcher Datentyp eingelesen wird LogLevel ≥ 5 : • Die Werte aller Felder von allen eingelesenen Dokumenten werden protokolliert Team4 Lotus Notes Destination: Folgendes wird in dieser Komponente protokolliert: LogLevel ≥ 0 : • Version des Team4 Lotus Notes Connector LogLevel ≥ 1 : • Name der Notes-Datenbank, die in der zugeordneten Notes Connection ausgewählt wurde • Benutzerdaten, die für den Datenbankzugriff benutzt werden • verwendete Abschlussformel • Ausgewählter Wert für das Notes-Feld FormName, falls diese Auswahlfunktion des Connectors verwendet wurde • Ausführungsmodus (Insert, Update, Delete) LogLevel ≥ 2 : • Version der Team4 Notes Connection • Version der Team4 Lotes Bibliothek • Version der Team4 Standard Bibliothek • Name der Notes Connection Manager • Version des Lotus Notes Server (Domino) 22 LogLevel ≥ 3 : • Aufbau der Verbindung zum Lotus Notes Server LogLevel ≥ 4 : • Es wird protokolliert, welche Felder in den Notes-Dokumenten als welcher Datentyp geschrieben wird LogLevel ≥ 5 : • Die Werte aller geschriebener Felder von allen veränderten Dokumenten werden protokolliert Alle diese Komponenten nutzen die gleichen Tabellen für ihr Protokoll. Sie greifen zum protokollieren auf eine Team4-Standard-Bibliothek zu, die gemeinsam genutzt wird. Diese enthält die Funktionen, die die Einträge erzeugt. Die eine Funktion heißt „Print“ und bei ihr kann der Log Level angegeben werden, am dem die Meldung protokolliert wird. Für Warnmeldungen gibt es „PrintWarning“ , für Fehlermeldungen „PrintError“. Diese werden immer protokolliert. Man muss sich zuerst überlegen, welche Meldungen von Team4-Komponenten bei MS SQL Server 2012 unter welchen Bedingungen protokolliert werden sollen. Man muss dazu die bisherigen Log Level 0 bis 5 auf die Log Level „None“, „Perfomance“, „Basic“ und „Verbose“ von MS SQL Server 2012 zuordnen. Um dieses zu bewerkstelligen muss man bei der Protokollfunktion in der Team4-Standard-Bibliothek jeweils ein Event auslösen, dass bei dem ausgewählten Log Level einen Eintrag verursacht. Folgende Events werden bei den Log Level-Einstellungen protokolliertMicrosoft (2011a): • None: Keine Events • Perfomance: Nur OnWarning und OnError • Basic: Alle Events außer Custom und Diagnostic Events • Verbose: Alle Events inklusive Custom und Diagnostic. Die Funktionen für die Warn- und Fehlermeldungen sollten dann das Event „OnError“ bzw. „OnWarning“ auslösen. Für allgemeine Informationsmeldungen wäre das Event „OnInformation“ geeignet. Mit ihm könnte man die Informationen von Log Level 0 bis 4 protokollieren. Die Detailinformation sollten nur bei Verbose protokolliert werden. Das könnte man realisieren, wenn die Meldungen auf Log Level 5 Ebene den Event „OnCustomEvent“ auslösen. Man muss außerdem in den Komponenten die Einstellmöglichkeit des Log Levels entfernen, da dies erst durch die Ausführung bestimmt werden soll. Es müssen die entsprechenden Stellen in den Quellcodes und in den Masken des GUIs der Komponenten abgeändert werden. 23 6. Ergebnisse und Schlussfolgerungen Die Umstellung der Protokollierung von dem bisherigen Mechanismus auf den neuen ist möglich. Allerdings lassen sich nicht so viele unterschiedliche Stufen bei der Protokollierung abbilden. Auch lassen sich nicht die Komponenten einzeln in Hinsicht auf die Ausführlichkeit einstellen. Es ist also keine 100-prozentige deckungsgleiche Realisierung möglich. Die Informationen, die in einem der bisherigen Einträge vorhanden waren, werden auch nicht in identischer Weise gespeichert. Wesentliche Informationen wie Status der Meldung und Text sind jedoch auch im neuen Protokollsystem vorhanden, wenn auch wieder nicht vollständig deckungsgleich. So ist beim früheren Mechanismus ein eigenes Feld für den Status vorgesehen, beim neuen wird dies anhand des Event-Typs bestimmt. Der größte Nachteil bei der Umstellung ist, dass die Protokollierung nur noch bei Ausführung im Katalog stattfindet. Dies erfordert außerdem die Verwendung des neuen Veröffentlichungsmodell, anstatt des bisherigen. Dieses hat auch an anderen Stellen einige Änderungen bei der Entwicklung von SSIS-Projekten zu Folge. Es gibt die Möglichkeit, durch Einfügen eines Log Providers auch während der Entwicklung zu protokollieren, doch die Verwendung dieser ist beim Project Deployment Model nicht sinnvoll, da dann Protokollinformationen mehrfach abgelegt werden. Denn diese Log Provider nutzen nicht den Katalog zur Speicherung des Protokolls, sondern jeweils eigene spezifische Ziele. Sie sollten also spätestens bei der Veröffentlichung vom Paket wieder entfernt werden. 24 7. Zusammenfassung und Ausblick Die Anforderungen von Kapitel 3 können mit dem Verfahren aus der Analyse mit den Mitteln aus der Realisierung umgesetzt werden. Zur Umstellung muss vor allem der Quellcode der Team4-Standardbibliothek verändert werden, der von allen Komponenten gemeinsam genutzt wird. Dann muss in den Komponenten die Möglichkeit herausgenommen werden, den Log Level zu bestimmen. Dazu sind Änderungen im Quellcode der Komponenten notwendig und in deren Maskendesigns . Ich halte die Umstellung des Protokollmechanismus für sinnvoll. Die Protokollierung findet nicht mehr in einer eigene Datenbankstruktur statt, in der nur eigene Meldungen von Team4-Komponenten stehen. Durch die Protokollierung in der standardisierten Katalog-Datenbank bei Verwendung des Project Deployment Models sind die Informationen gemeinsam mit denen von anderen ersichtlich und können mit standardisierten Reports ausgewertet werden. Dies bietet für die Vermarktung der Komponente als einzelne Software große Vorteile. Es werden nur standardisierte Protokolltechniken verwendet, der Kunde muss nicht noch einen Report zur Auswertung des Team4-Protokolls kaufen oder umständlich die Protokoll-Tabellen auslesen. Er können zur Auswertung des Protokolls Reporte verwenden, die teilweise schon von Microsoft mitgeliefert werden oder kostenlos im Internet verfügbar sind. Diese Reporte haben zudem auch den Vorteil, die Protokollmeldungen von allen Komponenten anzuzeigen. Es wird von Team4 erhofft, dass durch die Standardkonformität eine Zertifizierung der Komponenten durch Microsoft stattfinden kann. Dass würde die allgemeinen Marktchancen noch einmal deutlich erhöhen. 25 A. Literaturverzeichnis Literatur [Bachrach u. a. 2011] Bachrach, Ann ; Yu, Daniel ; Komo, Darmadi ; Ashok, Gopal ; Hodgins, Joanne ; Javaheri, Pej ; Mcbride, Sabrena ; Tharian, Tharun: Whats New Whitepaper 7 11. Website, 2011. – Online verfügbar http://download. microsoft.com/download/E/9/D/E9DBB1BB-89AE-4C70-AF02-AAFC29451A85/SQL_ Server_Whats_New_Whitepaper_7_11.pdf; besucht am 21.12.2011. [Ericson u. a. 2011] Ericson, Gary ; Price, Ed ; Sabota, Ms.: Project Deployment Overview in SQL Server Denali CTP1 - SSIS. Website, 2011. – Online verfügbar http://social.technet.microsoft.com/wiki/contents/articles/ project-deployment-overview-in-sql-server-quot-denali-quot-ctp1-ssis. aspx; besucht am 21.12.2011. Revision 8 [Microsoft 2011a] Microsoft: catalog.set_execution_parameter_value (SSISDB Database). Website, 2011. – Online verfügbar http://msdn.microsoft.com/en-us/ library/ff877990%28v=sql.110%29.aspx; besucht am 22.12.2011. [Microsoft 2011b] Microsoft: SQL Server Integration Services. Website, 2011. – Online verfügbar http://msdn.microsoft.com/en-en/library/ms141026(v=SQL.110) .aspx; besucht am 21.12.2011. 26 B. Abkürzungsverzeichnis CRM Customer Relationship Management ETL Extract Transform Load FTP File Transfer Protocol MS Microsoft SQL Structured Query Language SSIS SQL Server Integration Services 27