Share via


バッチ操作の実行 (XMLA)

XML for Analysis (XMLA) の Batch コマンドを使用すると、1 つの XMLA Execute メソッドを使用して複数の XMLA コマンドを実行することができます。Batch コマンドに含まれる複数のコマンドは、単一のトランザクションとして実行することも、あるいはコマンドごとに別個のトランザクションとして直列または並列で実行することもできます。複数の Microsoft SQL Server Analysis Services オブジェクトを処理するための Batch コマンドでは、不一致バインドや他のプロパティを指定することもできます。

トランザクションおよび非トランザクション バッチ コマンドの実行

Batch コマンドは、コマンドを以下の 2 つのいずれかの方法で実行します。

  • トランザクション
    Batch コマンドの Transaction 属性が true に設定されている場合、Batch コマンドは、Batch コマンドに含まれるすべてのコマンドを単一のトランザクション内で実行します。これがトランザクション バッチです。

    トランザクション バッチ内のいずれかのコマンドが失敗した場合、Analysis Services は Batch コマンド内で失敗したコマンドより前に実行されたコマンドをすべてロールバックし、Batch コマンドはすぐに終了します。Batch コマンド内でまだ実行されていないコマンドはいずれも実行されません。Batch コマンドが終了した後、Batch コマンドは失敗したコマンドについて発生したすべてのエラーを報告します。

  • 非トランザクション
    Transaction 属性が false に設定されている場合、Batch コマンドは、Batch コマンドに含まれる個々のコマンドを別個のトランザクションで実行します。これが非トランザクション バッチです。非トランザクション バッチ内のいずれかのコマンドが失敗した場合、Batch コマンドは、失敗したコマンドの後にあるコマンドの実行を続行します。Batch コマンドが、Batch コマンドに含まれるすべてのコマンドの実行を試みた後、Batch コマンドは発生したすべてのエラーを報告します。

Batch コマンドに含まれるコマンドが返す結果はすべて、それらのコマンドが Batch コマンド内に含まれている順序と同じ順序で返されます。Batch コマンドによって返される結果は、Batch コマンドがトランザクション バッチまたは非トランザクション バッチのいずれであるかによって異なります。

注意

Lock コマンドなど、出力を返さないコマンドが Batch コマンドに含まれており、そのコマンドが正常に実行された場合、Batch コマンドは結果要素内に空の root 要素を返します。空の root 要素があることにより、Batch コマンドに含まれるそれぞれのコマンドが、そのコマンドの結果の適切な root 要素と確実に対応します。

トランザクション バッチの結果から結果を返す処理

トランザクション バッチ内で実行されたコマンドの結果は、Batch コマンド全体が完了するまで返されません。それぞれのコマンドが実行された後に結果が返されないのは、トランザクション バッチ内のいずれかのコマンドが失敗すれば、Batch コマンド全体、および含まれるすべてのコマンドがロールバックされるためです。すべてのコマンドが正常に起動されて実行された場合、その Batch コマンドに対する Execute メソッドによって返される ExecuteResponse 要素の return 要素には、1 つの results 要素が含まれます。この要素には、Batch コマンドに含まれる正常に実行された各コマンドに対して 1 つの root 要素が含まれています。Batch コマンド内のいずれかのコマンドが起動できない場合、または完了に失敗した場合、Execute メソッドは、失敗したコマンドのエラーを含む SOAP エラーを Batch コマンドについて返します。

非トランザクション バッチの結果から結果を返す処理

非トランザクション バッチ内のコマンドによる結果は、それらのコマンドが Batch コマンド内に含まれている順序で、各コマンドごとに返されます。Batch コマンド内のいずれのコマンドも正常に起動できなかった場合、Execute メソッドは、その Batch コマンドについてのエラーを含む SOAP エラーを返します。少なくとも 1 つのコマンドが正常に起動された場合、その Batch コマンドに対する Execute メソッドによって返される ExecuteResponse 要素の return 要素には、1 つの results 要素が含まれます。この要素には、Batch コマンドに含まれる各コマンドに対して 1 つの root 要素が含まれています。非トランザクション バッチ内の 1 つ以上のコマンドが起動できない場合、または完了に失敗した場合、その失敗したコマンドに関する root 要素には、エラーについて説明する error 要素が含まれます。

注意

非トランザクション バッチ内の少なくとも 1 つのコマンドが起動できれば、その非トランザクション バッチに含まれるすべてのコマンドが Batch コマンドの結果にエラーを返した場合であっても、その非トランザクション バッチは正常に実行されたものと見なされます。

直列および並列実行の使用

Batch コマンドでは、含まれるコマンドを直列または並列で実行することができます。コマンドが直列に実行される場合、Batch コマンド内に含まれる次のコマンドは、Batch コマンド内で現在実行中のコマンドが完了するまで起動できません。コマンドが並列で実行される場合、Batch によって複数のコマンドを同時に実行することができます。

コマンドを並列で実行するには、並列で実行するコマンドを Batch コマンドの Parallel プロパティに追加します。現在、Analysis Services で並列実行が可能なのは、連続する Process コマンドだけです。CreateAlter など、その他の XMLA コマンドは、Parallel プロパティに含まれていても直列に実行されます。

Analysis Services は、Parallel プロパティに含まれるすべての Process コマンドの並列実行を試みますが、すべての Process コマンドが並列で実行されるとは限りません。各 Process コマンドはインスタンスによって分析され、並列で実行できないとインスタンスが判断した Process コマンドは直列に実行されます。

注意

コマンドを並行で実行する場合は、Batch コマンドの Transaction 属性を true に設定する必要があります。これは、Analysis Services によってサポートされるアクティブなトランザクションは接続ごとに 1 つだけであるのに対し、非トランザクション バッチは各コマンドを個別のトランザクションで実行するためです。非トランザクション バッチに Parallel プロパティを含めると、エラーが発生します。

並列実行の制限

Analysis Services インスタンスは、インスタンスが実行されているコンピュータの制限範囲で、可能な限り多くの Process コマンドを並列で実行しようとします。同時に実行する Process コマンドの数は、Parallel プロパティの maxParallel 属性を、並列で実行できる Process コマンドの最大数を示す値に設定することにより制限できます。

たとえば、Parallel プロパティに以下の順序でコマンドが含まれているとします。

  1. Create

  2. Process

  3. Alter

  4. Process

  5. Process

  6. Process

  7. Delete

  8. Process

  9. Process

この Parallel プロパティの maxParallel 属性は 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 オブジェクトの処理をサポートするために特に用意された、以下の省略可能なプロパティおよび属性が含まれています。

  • Batch コマンドの ProcessAffectedObjects 属性は、指定したオブジェクトを処理する Batch コマンドに含まれる Process コマンドの結果、再処理が必要になったオブジェクトがある場合に、インスタンスがそれらのオブジェクトも処理するかどうかを示します。

  • Bindings プロパティは、Batch コマンド内のすべての Process コマンドによって使用される不一致バインドのコレクションを含みます。

  • DataSource プロパティは、Batch コマンド内のすべての Process コマンドによって使用されるデータ ソースに対する不一致バインドを含みます。

  • DataSourceView プロパティは、Batch コマンド内のすべての Process コマンドによって使用されるデータ ソース ビューに対する不一致バインドを含みます。

  • ErrorConfiguration プロパティは、Batch コマンドが、Batch コマンド内のすべての Process コマンドで発生したエラーを処理する方法を指定します。

    重要な注意事項重要

    Process コマンドが Batch コマンドに含まれている場合、その Process コマンドには Bindings、DataSource、DataSourceView、および ErrorConfiguration プロパティを含めることができません。Process コマンドにこれらのプロパティを含める必要がある場合、その Process コマンドを含む Batch の対応するプロパティに、必要な情報を指定してください。