Ausführen von Batchvorgängen (XMLA)
Sie können den Befehl Batch in XML for Analysis (XMLA) verwenden, um mehrere XMLA-Befehle mit einer einzigen XMLA-Execute-Methode auszuführen. Sie können mehrere im Batch-Befehl enthaltene Befehle entweder als Einzeltransaktion oder als individuelle Transaktionen für jeden Befehl in Serie oder parallel ausführen. Darüber hinaus können Sie Out-of-Line-Bindungen und andere Eigenschaften im Batch-Befehl für die Verarbeitung mehrerer Microsoft SQL Server Analysis Services-Objekte festlegen.
Ausführen von transaktionalen und nicht transaktionalen Batchbefehlen
Der Befehl Batch führt Befehle in einer von zwei Methoden aus:
Transaktion
Wenn das Transaction-Attribut des Batch-Befehls auf True gesetzt ist, führt der Batch-Befehl alle im Batch-Befehl enthaltenen Befehle in einer Einzeltransaktion aus – einem transaktionalen Batch.Wenn ein beliebiger Befehl in einem transaktionalen Batch fehlschlägt, führt Analysis Services ein Rollback für jeglichen Befehl im Batch-Befehl aus, der vor dem fehlgeschlagenen ausgeführt wurde, und der Batch-Befehl wird unmittelbar beendet. Jegliche noch nicht ausgeführten Befehle im Befehl Batch werden nicht ausgeführt. Nachdem der Befehl Batch beendet wurde, meldet der Befehl Batch alle Fehler, die für den fehlgeschlagenen Befehl aufgetreten sind.
Nicht transaktional
Wenn das Transaction-Attribut auf False gesetzt ist, führt der Batch-Befehl jeden im Batch-Befehl enthaltenen Befehl in einer separaten Transaktion aus – einem nicht transaktionalen Batch. Wenn ein beliebiger Befehl in einem nicht transaktionalen Batch fehlschlägt, führt der Batch-Befehl weiterhin alle Befehle nach dem fehlgeschlagenen Befehl aus. Nachdem der Batch-Befehl versucht hat, alle im Batch-Befehl enthaltenen Befehle auszuführen, meldet der Batch-Befehl alle aufgetretenen Fehler.
Alle Ergebnisse, die von Befehlen zurückgegeben werden, die im Batch-Befehl enthalten sind, werden in der gleichen Reihenfolge zurückgegeben, in der die Befehle im Batch-Befehl enthalten sind. Die von einem Batch-Befehl zurückgegebenen Ergebnisse fallen unterschiedlich aus, je nachdem, ob der Batch-Befehl transaktional oder nicht transaktional ist.
Hinweis |
---|
Wenn ein Batch-Befehl einen Befehl enthält, der keine Ausgabe zurückgibt, wie z. B. der Befehl Lock, und dieser Befehl erfolgreich ausgeführt wurde, gibt der Batch-Befehl ein leeres root-Element innerhalb des Elements der Ergebnisse zurück. Das leere root-Element stellt sicher, dass jeder in einem Batch-Befehl enthaltene Befehl dem für die Ergebnisse des Befehls geeigneten root-Element zugeordnet werden kann. |
Zurückgeben von Ergebnissen von transaktionalen Batchergebnissen
Ergebnisse von Befehlen, die in einem transaktionalen Batch ausgeführt werden, werden nicht zurückgegeben, solange der Batch-Befehl noch nicht vollständig ausgeführt ist. Die Ergebnisse werden nicht nach Ausführung eines jeden Befehls zurückgegeben, da jeder fehlgeschlagene Befehl in einem transaktionalen Batch dazu führt, dass ein Rollback für den gesamten Batch-Befehl und alle darin enthaltenen Befehle durchgeführt wird. Wenn alle Befehle erfolgreich gestartet und ausgeführt werden, enthält das return-Element des ExecuteResponse-Elements, das von der Execute-Methode für den Batch-Befehl ausgegeben wird, ein results-Element, das wiederum ein root-Element für jeden erfolgreich ausgeführten Befehl enthält, der im Batch-Befehl enthalten ist. Wenn ein Befehl im Batch-Befehl nicht gestartet werden kann oder fehlschlägt, gibt die Execute-Methode einen SOAP-Fehler für den Batch-Befehl aus, der den Fehler des fehlgeschlagenen Befehls enthält.
Zurückgeben von Ergebnissen von nicht transaktionalen Batchergebnissen
Ergebnisse von Befehlen, die in einem nicht transaktionalen Batch ausgeführt werden, werden in der Reihenfolge zurückgegeben, in der sie im Batch-Befehl enthalten sind und wie sie von jedem Befehl zurückgegeben werden. Wenn keiner der Befehle, die im Batch-Befehl enthalten sind, erfolgreich gestartet werden kann, gibt die Execute-Methode einen SOAP-Fehler zurück, der einen Fehler für den Batch-Befehl enthält. Wenn mindestens ein Befehl erfolgreich gestartet werden kann, enthält das return-Element des ExecuteResponse-Elements, das von der Execute-Methode für den Batch-Befehl ausgegeben wird, ein results-Element, das wiederum ein root-Element für jeden im Batch-Befehl enthaltenen Befehl enthält. Wenn mindestens ein Befehl in einem nicht transaktionalen Batch nicht gestartet werden kann oder fehlschlägt, enthält das root-Element für diesen fehlgeschlagenen Befehl ein Error-Element, das den Fehler beschreibt.
Hinweis |
---|
Solange mindestens ein Befehl in einem nicht transaktionalen Batch gestartet werden kann, wird der nicht transaktionale Batch als erfolgreich ausgeführt angesehen, auch wenn jeder im nicht transaktionalen Batch enthaltene Befehl einen Fehler in den Ergebnissen des Batch-Befehls zurückgibt. |
Verwenden von serieller und paralleler Ausführung
Sie können den Batch-Befehl verwenden, um eingeschlossene Befehle seriell oder parallel auszuführen. Wenn die Befehle seriell ausgeführt werden, kann der nächste im Batch-Befehl enthaltene Befehl nicht gestartet werden, solange nicht der Batch-Befehl, der aktuell ausgeführt wird, abgeschlossen ist. Wenn die Befehle parallel ausgeführt werden, können mehrere Befehle gleichzeitig vom Batch-Befehl ausgeführt werden.
Um die Befehle parallel auszuführen, fügen Sie die Befehle, die parallel ausgeführt werden sollen, der Paralleleigenschaft des Batch-Befehls hinzu. Aktuell unterstützt Analysis Services nur die parallele Ausführung zusammenhängender, sequenzieller Process-Befehle. Alle anderen XMLA-Befehle, wie beispielsweise Create oder Alter, die in die Parallel-Eigenschaft eingebunden werden, werden seriell ausgeführt.
Analysis Services versucht, alle Process-Befehle, die in die Parallel-Eigenschaft eingebunden werden, parallel auszuführen. Es gibt allerdings keine Garantie dafür, dass alle enthaltenen Process-Befehle parallel ausgeführt werden. Die Instanz analysiert jeden Process-Befehl, und wenn die Instanz ermittelt, dass der Befehl nicht parallel ausgeführt werden kann, wird der Process-Befehl seriell ausgeführt.
Hinweis |
---|
Damit Befehle parallel ausgeführt werden können, muss das Transaction-Attribut des Batch-Befehls auf True gesetzt sein, da Analysis Services nur eine aktive Transaktion pro Verbindung unterstützt und nicht transaktionale Batches jeden Befehl in einer separaten Transaktion ausführen. Wenn Sie die Parallel-Eigenschaft in einen nicht transaktionalen Batch einbinden, tritt ein Fehler auf. |
Beschränken paralleler Ausführung
Eine Analysis Services-Instanz versucht, so viele Process-Befehle wie möglich parallel auszuführen. Die Anzahl ist durch den Computer beschränkt, auf dem die Instanz ausgeführt wird. Sie können die Anzahl gleichzeitig auszuführender Process-Befehle beschränken, indem Sie das maxParallel-Attribut der Parallel-Eigenschaft auf einen Wert setzen, der die maximale Anzahl an Process-Befehlen angibt, die parallel ausgeführt werden können.
Beispielsweise enthält eine Parallel-Eigenschaft die folgenden Befehle in der aufgelisteten Reihenfolge:
Create
Process
Alter
Process
Process
Process
Delete
Process
Process
Das Attribut maxParallel dieser Parallel-Eigenschaft ist auf 2 gesetzt. Daher führt die Instanz die vorherige Liste der Befehle wie in der folgenden Liste beschrieben aus:
Befehl 1 wird seriell ausgeführt, da Befehl 1 ein Create-Befehl ist und nur Process-Befehle parallel ausgeführt werden können.
Befehl 2 wird seriell ausgeführt, nachdem Befehl 1 abgeschlossen wurde.
Befehl 3 wird seriell ausgeführt, nachdem Befehl 2 abgeschlossen wurde.
Die Befehle 4 und 5 werden parallel ausgeführt, nachdem Befehl 3 abgeschlossen wurde. Obwohl Befehl 6 auch ein Process-Befehl ist, kann Befehl 6 nicht parallel mit den Befehlen 4 und 5 ausgeführt werden, da die maxParallel-Eigenschaft auf 2 gesetzt ist.
Befehl 6 wird seriell ausgeführt, nachdem die Befehle 4 und 5 abgeschlossen wurden.
Befehl 7 wird seriell ausgeführt, nachdem Befehl 6 abgeschlossen wurde.
Die Befehle 8 und 9 werden parallel ausgeführt, nachdem Befehl 7 abgeschlossen wurde.
Verwenden des Batchbefehls für die Verarbeitung von Objekten
Der Befehl Batch enthält mehrere optionale Eigenschaften und Attribute, die speziell eingebunden wurden, um die Verarbeitung mehrerer Analysis Services-Projekte zu unterstützen:
Das ProcessAffectedObjects-Attribut des Batch-Befehls gibt an, ob die Instanz ebenfalls Objekte verarbeiten soll, die als Ergebnis eines Process-Befehls, der im Batch-Befehl für die Verarbeitung eines bestimmten Objekts enthalten ist, eine erneute Verarbeitung erfordern.
Die Eigenschaft Bindings enthält eine Auflistung von Out-of-Line-Bindungen, die von allen Process-Befehlen im Batch-Befehl genutzt werden.
Die Eigenschaft DataSource enthält eine Out-of-Line-Bindung für eine Datenquelle, die von allen Process-Befehlen im Batch-Befehl genutzt wird.
Die Eigenschaft DataSourceView enthält eine Out-of-Line-Bindung für eine Datenquellensicht, die von allen Process-Befehlen im Batch-Befehl genutzt wird.
Die Eigenschaft ErrorConfiguration legt die Art und Weise fest, mit der der Batch-Befehl Fehler handhabt, auf die alle Process-Befehle, die im Batch-Befehl enthalten sind, gestoßen sind.
Wichtig Ein Process-Befehl kann nicht die Eigenschaften Bindings, DataSource, DataSourceView oder ErrorConfiguration enthalten, wenn der Process-Befehl in einem Batch-Befehl enthalten ist. Wenn Sie diese Eigenschaften für einen Process-Befehl festlegen müssen, geben Sie die notwendigen Informationen in den entsprechenden Eigenschaften des Batch-Befehls an, der im Process-Befehl enthalten ist.