執行批次作業 (XMLA)
您可以使用 XML for Analysis (XMLA) 中的 Batch 命令,執行多個使用單一 Execute 方法的 XMLA 命令。您可以用單一交易或每個命令的個別交易,以序列或平行方式執行 Batch 命令中包含的多個命令。您也可以在 Batch 命令中指定非正規 (out-of-line) 繫結及其他屬性,以處理多個 Microsoft SQL Server Analysis Services 物件。
執行交易式與非交易式批次命令
Batch 命令使用下列兩種方式之一來執行命令:
交易式
如果將 Batch 命令的 Transaction 屬性設定為 True,Batch 命令會在單一交易中,執行 Batch 命令包含的所有命令。此即稱為「交易式」(Transactional) 批次),如果交易式批次中有任何命令失敗,Analysis Services 會回復 Batch 命令中在失敗命令前執行的所有命令,然後 Batch 命令會立即結束。Batch 命令中尚未執行的任何命令都不會被執行。在 Batch 命令結束之後,Batch 命令會報告因為失敗的命令而發生的任何錯誤。
非交易式
如果將 Transaction 屬性設定為 False,則 Batch 命令會在個別交易中執行 Batch 命令所含的每個命令。此即稱為「非交易式」(Nontransactional) 批次。如果非交易式批次中有任何命令失敗,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 方法會傳回 SOAP 錯誤,其中包含 Batch 命令的錯誤。如果至少成功啟動一個命令,則 Batch 命令的 Execute 方法所傳回之 ExecuteResponse 元素的 return 元素,會包含一個 results 元素,而其中會為 Batch 命令所含的每個命令,各包含一個 root 元素。如果非交易式批次中有一或多個命令無法啟動或是無法完成,則該失敗命令的 root 元素會包含描述錯誤的 error 元素。
[!附註]
只要在非交易式批次中至少有一個命令可以啟動,便會將非交易式批次視為已成功執行,即使在非交易式批次中所含的每個命令,都在 Batch 命令的結果中傳回錯誤,亦然。
使用序列和平行執行
您可以使用 Batch 命令,以序列或平行方式,執行包含的命令。以序列方式執行命令時,Batch 命令中所含的下一個命令必須等到 Batch 命令中目前執行的命令完成時才能啟動。以平行方式執行命令時,Batch 命令可以同時執行多個命令。
若要以平行方式執行命令,請將要平行執行的命令加入 Batch 命令的 Parallel 屬性。目前,Analysis Services 只能平行執行連續且循序的 Process 命令。任何包含在 Parallel 屬性中的其他 XMLA 命令,例如 Create 或 Alter,都會以序列方式執行。
Analysis Services 會嘗試平行執行所有包含在 Parallel 屬性中的 Process 命令,但是無法保證所有包含的 Process 命令都可以平行執行。執行個體會分析每個 Process 命令,而且如果執行個體判斷無法平行執行命令,就會序列執行 Process 命令。
[!附註]
若要平行執行命令,必須將 Batch 命令的 Transaction 屬性設定成 True,因為 Analysis Services 僅支援每個連接有一個使用中交易,而且非交易式批次會在個別交易中執行每個命令。如果您在非交易式批次中包含 Parallel 屬性,就會發生錯誤。
限制平行執行
Analysis Services 執行個體會嘗試盡量平行執行 Process 命令,最多可達執行個體執行的電腦限制。您可以將 Parallel 屬性 (Property) 的 maxParallel 屬性 (Attribute),設定為可以平行執行之 Process 命令的上限,以限制並行執行的 Process 命令數目。
例如,Parallel 屬性依序包含下列命令:
Create
Process
Alter
Process
Process
Process
Delete
Process
Process
此 Parallel 屬性 (Property) 的 maxParallel 屬性 (Attribute) 是設定為 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 命令特別包含一些選擇性的屬性 (Property) 與屬性 (Attribute),以支援處理多個 Analysis Services 專案:
Batch 命令的 ProcessAffectedObjects 屬性指出執行個體是否要在 Batch 命令中的 Process 命令處理指定的物件之後,也處理需要重新處理的物件。
Bindings 屬性包含 Batch 命令中所有 Process 命令所使用的非正規繫結集合。
DataSource 屬性包含 Batch 命令中所有 Process 命令所使用的資料來源之非正規繫結。
DataSourceView 屬性包含 Batch 命令中所有 Process 命令所使用之資料來源檢視的非正q規繫結。
ErrorConfiguration 屬性指定 Batch 命令處理 Batch 命令包含的所有 Process 命令所遇到之錯誤的方法。
重要事項 如果 Process 命令是包含在 Batch 命令中,則 Process 命令無法包括 Bindings、DataSource、DataSourceView 或 ErrorConfiguration 屬性。如果您必須為 Process 命令指定這些屬性,請在包含 Process 命令的 Batch 命令的對應屬性中提供必要的資訊。