执行批处理操作 (XMLA)

可以使用 XML for Analysis (XMLA) 中的 Batch 命令运行多个使用单个 XMLA Execute 方法的 XMLA 命令。可以作为单个事务或者每个命令为一个事务,以串行或并行方式运行 Batch 命令中包含的多个命令。还可以在 Batch 命令中为处理多个 Microsoft SQL Server Analysis Services 对象指定外部绑定和其他属性。

运行事务性和非事务性 Batch 命令

Batch 以下列两种方式之一执行命令:

  • 事务性
    如果 Batch 命令的 Transaction 属性设置为 true,Batch 命令将以单个事务,即“事务性”批处理的方式运行 Batch 命令中包含的所有命令。

    如果事务性批处理中的任一命令失败,Analysis Services 将回滚 Batch 命令中在失败命令之前运行的所有命令,且 Batch 命令立即结束。Batch 命令中尚未运行的任何命令都不再执行。Batch 命令结束后,Batch 命令将报告失败命令发生的所有错误。

  • 非事务性
    如果 Transaction 属性设置为 false,Batch 命令将以单独的事务,即“非事务性”批处理的方式运行 Batch 命令中包含的所有命令。如果非事务性批处理中的任一命令失败,Batch 命令会继续执行失败命令后的命令。Batch 命令尝试运行 Batch 命令包含的所有命令后,Batch 命令将报告发生的所有错误。

Batch 命令中包含的各命令返回的所有结果以这些命令包含在 Batch 命令中的顺序返回。Batch 命令返回的结果根据 Batch 命令是事务性的还是非事务性的而不同。

注意注意

如果 Batch 命令包含不返回输出的命令,如 Lock 命令,且该命令成功运行,则 Batch 命令将在结果元素中返回一个空的 root 元素。空的 root 元素可确保 Batch 命令中包含的每个命令都与该命令的结果的相应 root 元素匹配。

从事务性批处理结果返回结果

只有在整个 Batch 命令全部完成之后,才会从事务性批处理中运行的命令返回结果。由于事务性批处理中任一命令失败将导致整个 Batch 命令及其包含的所有命令都回滚,因此不在每个命令运行后返回结果。如果所有命令都成功启动并运行,则由 Batch 命令的 Execute 方法返回的 ExecuteResponse 元素的 return 元素将包含一个 results 元素,该元素为 Batch 命令中每个成功运行的命令包含一个 root 元素。如果 Batch 命令中的任一命令无法启动或完成,Execute 方法将为 Batch 命令返回一个 SOAP 错误,其中包含失败命令的错误。

从非事务性批处理结果返回结果

从非事务性批处理中运行的命令返回的结果以这些命令在 Batch 命令中的顺序返回,并且在每个命令返回结果时即将该结果返回。如果 Batch 命令中包含的命令都无法成功启动,Execute 方法将返回包含 Batch 命令的错误的 SOAP 错误。如果至少一个命令成功启动,则由 Batch 命令的 Execute 方法返回的 ExecuteResponse 元素的 return 元素将包含一个 results 元素,该元素为 Batch 命令中包含的每个命令包含一个 root 元素。如果非事务性批处理中有一个或多个命令无法启动或完成,则失败命令的 root 元素将包含一个描述错误的 error 元素。

注意注意

只要非事务性批处理中至少有一个命令能够启动,就认为该非事务性批处理成功运行,即使该非事务性批处理中包含的每个命令都在 Batch 命令的结果中返回错误。

使用串行和并行执行

可以使用 Batch 命令以串行或并行方式运行所包含的命令。以串行方式运行命令时,Batch 命令中包含的下一个命令必须等 Batch 命令中当前运行的命令完成后才能启动。以并行方式运行命令时,Batch 命令可以同时执行多个命令。

若要以并行方式运行命令,请将要并行运行的命令添加到 Batch 命令的 Parallel 属性中。目前,Analysis Services 只能以并行方式运行连续的顺序 Process 命令。所有其他包含在 Parallel 属性中的 XMLA 命令,如 CreateAlter,都是以串行方式运行的。

Analysis Services 尝试以并行方式运行包含在 Parallel 属性中的所有 Process 命令,但是不保证包含的所有 Process 命令都能以并行方式运行。实例会分析每个 Process 命令,如果实例确定命令不能以并行方式执行,则 Process 命令将以串行方式执行。

注意注意

若要以并行方式执行命令,Batch 命令的 Transaction 属性必须设置为 true,因为 Analysis Services 仅支持每个连接一个活动事务且非事务性批处理在单独的事务中执行每个命令。如果在非事务性批处理中包含 Parallel 属性,则将出现错误。

限制并行执行

Analysis Services 实例并行运行尽可能多的 Process 命令,直到达到运行实例的计算机的限制。将 Parallel 属性的 maxParallel 特性设为指示可并发执行的最大 Process 命令数,可限制同时执行的 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 命令,但是命令 6 不能与命令 4 和 5 并行运行,因为 maxParallel 属性设置为 2。

  • 命令 6 以串行方式在命令 4 和 5 都完成后运行。

  • 命令 7 以串行方式在命令 6 完成后运行。

  • 命令 8 和 9 以并行方式在命令 7 完成后运行。

使用 Batch 命令处理对象

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 命令的相应属性中提供必要的信息。