{"id":92,"date":"2009-09-04T15:04:00","date_gmt":"2009-09-04T14:04:00","guid":{"rendered":"http:\/\/csopro.de\/biblog\/2009\/09\/automatisierung-von-analysis-services-aufgaben-ueber-xmla\/"},"modified":"2009-09-04T15:04:00","modified_gmt":"2009-09-04T14:04:00","slug":"automatisierung-von-analysis-services-aufgaben-ueber-xmla","status":"publish","type":"post","link":"https:\/\/www.csopro.de\/biblog\/2009\/09\/automatisierung-von-analysis-services-aufgaben-ueber-xmla\/","title":{"rendered":"Automatisierung von Analysis Services-Aufgaben \u00fcber XMLA"},"content":{"rendered":"<p>Alle Aufgaben, die man im SQL Server Management Studio f\u00fcr den Betrieb eines SQL Server Analysis Services vornehmen kann, k\u00f6nnen auch \u00fcber XMLA gesteuert werden.<\/p>\n<p>Das gilt zum Beispiel f\u00fcr das Aufbereiten (Verarbeiten, process) von Cubes oder dem Backup von Datenbanken. Ich werde mich heute mit dem Backup einer Analysis Services &#8211; Datenbank besch\u00e4ftigen.<\/p>\n<p>Das Sch\u00f6ne ist, dass wir gar nicht die Syntax der XMLA nachschlagen m\u00fcssen. Das SQL Server Management Studio erstellt uns n\u00e4mlich den notwendigen XMLA-Code automatisch (und das gilt f\u00fcr beide Versionen 2005 und 2008). Dazu w\u00e4hlen wir zun\u00e4chst im Kontextmen\u00fc die gew\u00fcnschte Aktion aus:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"BackUp in SQL Server Management Studio\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/backupinsqlservermanagementstudio.jpg\" width=\"301\" height=\"299\" \/><\/p>\n<p>Dann startet sich ein Popup-Fenster, in dem wir die gew\u00fcnschten Einstellungen durchf\u00fchren, aber <strong>nicht<\/strong> auf OK klicken.<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/scriptbutton.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Script Button oben\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/scriptbutton-small.jpg\" width=\"450\" height=\"197\" \/><\/a><\/p>\n<p>Im oberen Bereich befindet sich eine Script-Button. Wenn man auf diesen klickt, wird das zugeh\u00f6rige XMLA erstellt:<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/backup-xmla.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Backup-XMLA\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/backup-xmla-small.jpg\" width=\"450\" height=\"125\" \/><\/a><\/p>\n<p>Dies kann man jetzt sogar direkt im SQL Server Management Studio ausf\u00fchren (Execute!).<\/p>\n<p>Bei Erfolg liefert die Ausf\u00fchrung folgendes Ergebnis:<\/p>\n<p><em>&lt;return xmlns=&#8220;urn:schemas-microsoft-com:xml-analysis&#8220;&gt;<br \/>\n      &lt;root xmlns=&#8220;urn:schemas-microsoft-com:xml-analysis:empty&#8220; \/&gt;<br \/>\n&lt;\/return&gt;<\/em><\/p>\n<p>Das Problem (auf das wir sp\u00e4ter noch zur\u00fcckkommen werden) ist, dass auch bei einem Fehler in der Regel kein Fehler geschmissen wird (bei Analysis Services 2008 kommen manchmal Fehler vor), sondern ein XML zur\u00fcckgegeben wird, in der die XML-Knoten Exception oder Error oder \u00e4hnliches auftauchen. Wie gesagt, dazu sp\u00e4ter mehr.<\/p>\n<p><strong>Wie k\u00f6nnen wir nun ein solches XMLA automatisiert (zeitgesteuert) aufrufen?<\/strong><\/p>\n<p>Die einfachste M\u00f6glichkeit ist \u00fcber den <strong>SQL Server Agent<\/strong>. Wir legen dazu einen neuen Job an. Der erste Schritt des neuen Jobs sieht so aus:<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/stepzumbackupviaxmla.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Step zum Backup via XMLA\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/stepzumbackupviaxmla-small.jpg\" width=\"450\" height=\"513\" \/><\/a><\/p>\n<p>Wie man in obigem Screen Shot sieht, muss als Typ &#8222;SQL Server Analysis Services Command&#8220; ausgew\u00e4hlt, als Server dergew\u00fcnschte SQL Server Analysis Services-Server (hier im Beispiel ssasentsql2008) eingetragen und das XMLA in die gro\u00dfe Textbox Command kopiert werden.<\/p>\n<p>Damit kann dieses XMLA im Rahmen eines SQL Server Agent Jobs ausgef\u00fchrt werden.<\/p>\n<p>Im Log File Viewer kann man nach der Ausf\u00fchrung das ERgebnis der Ausf\u00fchrung wie folgt erkennen:<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/xmlaresult.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Log File Ergebnis der Ausf\u00fchrung eines XMLA Befehles\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/xmlaresult-small.jpg\" width=\"450\" height=\"351\" \/><\/a><\/p>\n<p>Was ich markiert habe, ist genau das Ergebnis, das wir vorhin auch als Ergebnis bei der Ausf\u00fchrung im SQL Server Management Studio gesehen hatten. Hier erkennt man, dass die Ausf\u00fchrung erfolgreich war, weil das Ergebnis &#8222;empty&#8220; ist. Nat\u00fcrlich wird der Job als erfolgreich beendet angezeigt.<\/p>\n<p>Das Problem hierbei ist, dass bei Fehlern bei der Ausf\u00fchrung der Job ebenfalls als erfolgreich abgeschlossen angezeigt wird und die Fehlermeldung nur an dieser Stelle im Log sichtbar ist.<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/fehlerhafterstep.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Ausgabe, wenn das XMLA einen Fehler geliefert hat\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/fehlerhafterstep-small.jpg\" width=\"450\" height=\"365\" \/><\/a><\/p>\n<p>Man erkennt deutlich, dass der Step als erfolgreich markiert ist, aber offensichtlich nicht erfolgreich durchgef\u00fchrt wurde. Die Fehlermeldung habe ich markiert. (In dem Beispiel handelte es sich um das Aufbereiten einer nicht existenten Datenbank)<\/p>\n<p>Dies ist nat\u00fcrlich sehr ung\u00fcnstig, da Administratoren auf das Fehlschlagen eines Jobs reagieren k\u00f6nnen, aber nicht auf irgendwo enthaltene Fehlermeldungen. Deswegen empfehle ich, in produktiven Umgebungen das XMLA nicht direkt im SQL Serevr Agent auszuf\u00fchren, sondern, wie gleich beschrieben im SSIS. Im SQL Server Agent 2008 scheint dieses Problem behoben zu sein. Wenn man obigen fehlerhaften Job im SQL Server Agent 2008 anlegt (sogar auch wenn man als Ziel des XMLA sogar einen 2005er Analysis Services w\u00e4hlt), wird der Fehler im SQL Server Agent erkannt und sinnvoll protokolliert, wie man in folgendem Screen Shot sehen kann:<\/p>\n<p> <a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/fehlerinxmlaok.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Fehler in XMLA korrekt erkannt\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/fehlerinxmlaok-small.jpg\" width=\"450\" height=\"345\" \/><\/a><\/p>\n<p>Nun aber zu einer anderen M\u00f6glichkeit, das XMLA auszuf\u00fchren, als <strong>Integration Services Package<\/strong> im SSIS:<\/p>\n<p>Im <em>Control Flow<\/em> gibt es dort eine Task mit Titel <em>Analysis Services Execute DDL Task<\/em>. Diese ben\u00f6tigt eine Cube-Connection und das zu automatisierende XMLA. Das XMLA kann dabei direkt eingegeben oder aus einer Variable oder aus einem File ausgelesen werden. Letzters wird bei gro\u00dfen XMLAs ben\u00f6tigt, da sonst die Gr\u00f6\u00dfenbeschr\u00e4nkung auf ca. 4000 Zeichen besteht.<\/p>\n<p><a href=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/bild-5.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"Bild\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/bild-5-small.jpg\" width=\"450\" height=\"419\" \/><\/a><\/p>\n<p>Unter <a title=\"Sollution mit Backup als SSIS Paket\" href=\"https:\/\/www.csopro.de\/download\/BackupSSASDBviaSSIS_Internet.zip\">diesem Link <\/a> habe ich ein einfaches Paket zum Download bereit gestellt, dass nach Eingabe einiger Variablen das XMLA automatisch erstellt (\u00fcber Expressions der Execute SSAS DDL Task) und dann ausf\u00fchrt. Die Variablen sind im beigef\u00fcgten Config-File enthalten, so dass Sie das Paket auch einfach \u00fcber die Anpassungen an dieser Config-Datei steuern k\u00f6nnen.<\/p>\n<p>Als Variablen werden verwendet:<\/p>\n<ul>\n<li>\n<div>CubeDatenbank: Die SSAS-Datenbank, die gesichert werden soll.<\/div>\n<\/li>\n<li>\n<div>CubeServer: Der Name des SSAS-Servers, auf dem sich die zu sichernde Datenbank befindet.<\/div>\n<\/li>\n<li>\n<div>Dateiname: Name der zu erstellenden Datei<\/div>\n<\/li>\n<li>\n<div>MitKompression: Soll die Datei komprimiert werden? (im Config-File 0 f\u00fcr nein, 1 f\u00fcr ja eintragen)<\/div>\n<\/li>\n<li>\n<div>mitUeberschreiben: Soll evtl. eine bereiots existierende Datei \u00fcberschrieben werden? (im Config-File 0 f\u00fcr nein, 1 f\u00fcr ja eintragen)<\/div>\n<\/li>\n<li>\n<div>BackupPasswort: Geben Sie das an, wenn Sie Ihr Backup verschl\u00fcsseln wollen, sonst leer lassen (dann wird nicht mit leerem Passwort verschl\u00fcsselt \ud83d\ude42 )<\/div>\n<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"Variablen f\u00fcrs SSIS Backup\" src=\"https:\/\/www.csopro.de\/biblog\/wp-content\/uploads\/2009\/09\/variablenfuerssisbackup.jpg\" width=\"400\" height=\"428\" \/><\/p>\n<p>Ganz analog k\u00f6nnen alle XMLAs mit SSIS ausgef\u00fchrt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Alle Aufgaben, die man im SQL Server Management Studio f\u00fcr den Betrieb eines SQL Server Analysis Services vornehmen kann, k\u00f6nnen auch \u00fcber XMLA gesteuert werden. Das gilt zum Beispiel f\u00fcr das Aufbereiten (Verarbeiten, process) von Cubes oder dem Backup von Datenbanken. Ich werde mich heute mit dem Backup einer Analysis Services &#8211; Datenbank besch\u00e4ftigen. Das &hellip; <a href=\"https:\/\/www.csopro.de\/biblog\/2009\/09\/automatisierung-von-analysis-services-aufgaben-ueber-xmla\/\" class=\"more-link\"><span class=\"screen-reader-text\">Automatisierung von Analysis Services-Aufgaben \u00fcber XMLA<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,10,13],"tags":[],"class_list":["post-92","post","type-post","status-publish","format-standard","hentry","category-analysisservices","category-integrationservices","category-sql-server-agent"],"_links":{"self":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":0,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.csopro.de\/biblog\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}