バッチ操作の実行 (XMLA)
XML for Analysis (XMLA) の Batch コマンドを使用すると、1 つの XMLA Execute メソッドを使用して複数の XMLA コマンドを 実行 できます。 Batch
コマンドに含まれる複数のコマンドは、単一のトランザクションとして実行することも、あるいはコマンドごとに別個のトランザクションとして直列または並列で実行することもできます。 また、複数の Microsoft SQL Server Analysis Services オブジェクトを処理するために、コマンドでBatch
行外バインディングやその他のプロパティを指定することもできます。
トランザクションおよび非トランザクション バッチ コマンドの実行
Batch
コマンドは、コマンドを以下の 2 つのいずれかの方法で実行します。
トランザクション
コマンドの属性が Transaction
Batch
true に設定されている場合、 Batch
コマンドは、コマンドに含まれるすべてのコマンドを Batch
単一の トランザクション a トランザクション バッチで実行します。
トランザクション バッチでいずれかのコマンドが失敗した場合、Analysis Services は、失敗したコマンドの Batch
前に実行されたコマンドをロールバックし、 Batch
コマンドはすぐに終了します。 Batch
コマンド内でまだ実行されていないコマンドはいずれも実行されません。 Batch
コマンドが終了した後、Batch
コマンドは失敗したコマンドについて発生したすべてのエラーを報告します。
非トランザクション
属性が Transaction
false に設定されている場合、 Batch
コマンドは、コマンドに含まれる各コマンドを Batch
個別のトランザクション ( 非トランザクション バッチ) で実行します。 非トランザクション バッチ内のいずれかのコマンドが失敗した場合、Batch
コマンドは、失敗したコマンドの後にあるコマンドの実行を続行します。 Batch
コマンドが、Batch
コマンドに含まれるすべてのコマンドの実行を試みた後、Batch
コマンドは発生したすべてのエラーを報告します。
Batch
コマンドに含まれるコマンドが返す結果はすべて、それらのコマンドが Batch
コマンド内に含まれている順序と同じ順序で返されます。 Batch
コマンドによって返される結果は、Batch
コマンドがトランザクション バッチまたは非トランザクション バッチのいずれであるかによって異なります。
注意
コマンドにBatch
、Lock コマンドなどの出力を返さないコマンドが含まれており、そのコマンドが正常に実行された場合、Batch
コマンドは results 要素内の空のルート要素を返します。 空の root
要素があることにより、Batch
コマンドに含まれるそれぞれのコマンドが、そのコマンドの結果の適切な root
要素と確実に対応します。
トランザクション バッチの結果から結果を返す処理
トランザクション バッチ内で実行されたコマンドの結果は、Batch
コマンド全体が完了するまで返されません。 それぞれのコマンドが実行された後に結果が返されないのは、トランザクション バッチ内のいずれかのコマンドが失敗すれば、Batch
コマンド全体、および含まれるすべてのコマンドがロールバックされるためです。 すべてのコマンドが正常に起動して実行された場合、コマンドの メソッドBatch
によってExecute
返される ExecuteResponse 要素の return 要素には 1 つの results 要素が含まれます。この要素には、コマンドに含まれる正常に実行されるコマンドごとに 1 つのroot
要素がBatch
含まれます。 Batch
コマンド内のいずれかのコマンドが起動できない場合、または完了に失敗した場合、Execute
メソッドは、失敗したコマンドのエラーを含む SOAP エラーを Batch
コマンドについて返します。
非トランザクション バッチの結果から結果を返す処理
非トランザクション バッチ内のコマンドによる結果は、それらのコマンドが Batch
コマンド内に含まれている順序で、各コマンドごとに返されます。 Batch
コマンド内のいずれのコマンドも正常に起動できなかった場合、Execute
メソッドは、その Batch
コマンドについてのエラーを含む SOAP エラーを返します。 少なくとも 1 つのコマンドが正常に起動された場合、その return
コマンドに対する ExecuteResponse
メソッドによって返される Execute
要素の Batch
要素には、1 つの results
要素が含まれます。この要素には、root
コマンドに含まれる各コマンドに対して 1 つの Batch
要素が含まれています。 非トランザクション バッチ内の 1 つ以上のコマンドを開始できない場合、または完了に失敗した場合、 root
その失敗したコマンドの 要素には 、エラー を説明する error 要素が含まれます。
注意
非トランザクション バッチ内の少なくとも 1 つのコマンドが起動できれば、その非トランザクション バッチに含まれるすべてのコマンドが Batch
コマンドの結果にエラーを返した場合であっても、その非トランザクション バッチは正常に実行されたものと見なされます。
直列および並列実行の使用
Batch
コマンドでは、含まれるコマンドを直列または並列で実行することができます。 コマンドが直列に実行される場合、Batch
コマンド内に含まれる次のコマンドは、Batch
コマンド内で現在実行中のコマンドが完了するまで起動できません。 コマンドが並列で実行される場合、Batch
によって複数のコマンドを同時に実行することができます。
コマンドを並列で実行するには、並列で実行するコマンドを コマンドの Parallel プロパティに Batch
追加します。 現在、Analysis Services では連続した連続した プロセス コマンドのみを並列で実行できます。 プロパティに含まれるParallel
他の XMLA コマンド (Create や Alter など) は、順次実行されます。
Analysis Services は、 プロパティに含まれるすべての Process
コマンドを Parallel
並列で実行しようとしますが、含まれる Process
すべてのコマンドを並列で実行できるとは限りません。 各 Process
コマンドはインスタンスによって分析され、並列で実行できないとインスタンスが判断した Process
コマンドは直列に実行されます。
注意
コマンドを並列で実行するには、Analysis Services が接続ごとに 1 つのアクティブなトランザクションのみをサポートし、 Transaction
非トランザクション バッチで各コマンドを個別のトランザクションで実行するため、コマンドの属性 Batch
を true に設定する必要があります。 非トランザクション バッチに Parallel
プロパティを含めると、エラーが発生します。
並列実行の制限
Analysis Services インスタンスは、インスタンスが実行されるコンピューターの制限まで、できるだけ多くの Process
コマンドを並列で実行しようとします。 同時に実行する Process
コマンドの数は、maxParallel
プロパティの Parallel
属性を、並列で実行できる Process
コマンドの最大数を示す値に設定することにより制限できます。
たとえば、Parallel
プロパティに以下の順序でコマンドが含まれているとします。
Create
Process
Alter
Process
Process
Process
Delete
Process
Process
この maxParalle
プロパティの Parallel
属性は 2 に設定されています。 そのため、インスタンスは上のコマンドの一覧を以下の説明のとおりに実行します。
コマンド 1 は直列に実行されます。コマンド 1 は
Create
コマンドであり、並列で実行できるのはProcess
コマンドだけであるためです。コマンド 2 は、コマンド 1 の完了後に順次実行されます。
コマンド 3 は、コマンド 2 が完了した後に順次実行されます。
コマンド 4 と 5 は、コマンド 3 が完了した後に並列で実行されます。 コマンド 6 も
Process
コマンドですが、maxParallel
プロパティが 2 に設定されているため、コマンド 6 がコマンド 4 と 5 と共に並行で実行されることはありません。コマンド 6 は、コマンド 4 とコマンド 5 の両方が完了した後に直列に実行されます。
コマンド 7 はコマンド 6 の完了後に直列に実行されます。
コマンド 8 と 9 はコマンド 7 の完了後に並列で実行されます。
バッチ コマンドを使用したオブジェクトの処理
コマンドには Batch
、複数の Analysis Services プロジェクトの処理をサポートするために特別に含まれるいくつかの省略可能なプロパティと属性が含まれています。
ProcessAffectedObjects
コマンドのBatch
属性は、指定したオブジェクトを処理するProcess
コマンドに含まれるBatch
コマンドの結果、再処理が必要になったオブジェクトがある場合に、インスタンスがそれらのオブジェクトも処理するかどうかを示します。Bindings プロパティには、コマンド内のすべてのコマンドで使用される行外バインディングのコレクションが
Process
Batch
含まれています。DataSource プロパティには、コマンド内のすべてのコマンドで使用されるデータ ソースの行外バインディングが
Process
Batch
含まれています。DataSourceView プロパティには、コマンド内のすべてのコマンドで使用されるデータ ソース ビューの行外バインディングが
Process
Batch
含まれています。ErrorConfiguration プロパティは、コマンドに含まれるすべての
Process
コマンドで発生したエラーをBatch
コマンドが処理する方法をBatch
指定します。重要
Process
コマンドがBindings
コマンドに含まれている場合、そのDataSource
コマンドにはDataSourceView
、ErrorConfiguration
、Process
、およびBatch
プロパティを含めることができません。Process
コマンドにこれらのプロパティを含める必要がある場合、そのBatch
コマンドを含むProcess
の対応するプロパティに、必要な情報を指定してください。
参照
Batch 要素 (XMLA)
Process 要素 (XMLA)
多次元モデルのオブジェクト処理
Analysis Services での XMLA による開発