Integration Services 交易
適用於:SQL Server Azure Data Factory 中的 SSIS Integration Runtime
封裝使用交易將工作執行的資料庫動作繫結至原子單位,這樣可以保持資料的完整性。 所有 Microsoft Integration Services 容器類型 (套件、For 迴圈、Foreach 迴圈和時序容器,以及封裝每個工作的工作主機) 皆可設定為使用交易。 Integration Services 提供三個選項來設定交易:NotSupported、Supported 與 Required。
Required 指出容器會啟動交易,除非其父容器已經將其啟動。 如果交易已經存在,則容器會聯結交易。 例如,如果未設定為支援交易的封裝包括使用 Required 選項的「時序」容器,則「時序」容器會啟動其自己的交易。 如果封裝設定為使用 Required 選項,則「時序」容器會聯結封裝交易。
Supported 指出容器不啟動交易,但會聯結其父容器啟動的任何交易。 例如,如果具有四個「執行 SQL」工作的封裝啟動交易,且全部四個工作都使用 Supported 選項,則任何工作失敗時,都會回復「執行 SQL」工作執行的資料庫更新。 如果封裝未啟動交易,則四個「執行 SQL」工作不會由交易繫結,且只會回復由失敗之工作執行的資料庫更新。
NotSupported 指出容器不啟動交易或聯結現有的交易。 父容器啟動的交易不會影響已設定為不支援交易的子容器。 例如,如果封裝設定為啟動交易,且封裝中的「For 迴圈」容器使用 NotSupported 選項,則「For 迴圈」中的工作一旦失敗將無法回復。
您可以設定容器上的 TransactionOption 屬性來設定交易。 使用 SQL Server Data Tools (SSDT) 中的 [屬性] 視窗來設定此屬性,也可以程式設計方式設定此屬性。
注意
TransactionOption 屬性會影響是否會套用容器所要求的 IsolationLevel 屬性值。 如需詳細資訊,請參閱< 設定封裝屬性 >主題中的 IsolationLevel屬性描述。
設定封裝來使用交易
將封裝設定成使用交易時,您有兩個選項:
擁有封裝的單一交易。 在此情況下,封裝本身會 「起始」 (Initiate) 這筆交易,而封裝中的個別工作和容器會參與這個單一交易。
在封裝中擁有多個交易。 在此情況下,雖然封裝支援交易,但是封裝中的個別工作和容器實際上會起始交易。
下列程序將描述如何設定這兩個選項。
將套件設定成使用單一交易
在這個選項中,封裝本身會起始單一交易。 您可以將封裝的 TransactionOption 屬性設定為 Required,藉以將此封裝設定成起始這筆交易。
接著,您可以在這個單一交易中編列特定工作和容器。 若要在交易中編列工作或容器,您可以將該工作或容器的 TransactionOption 屬性設定為 Supported。
在 SQL Server Data Tools (SSDT) 中,開啟包含您想要設定來使用交易之套件的 Integration Services 專案。
在 [方案總管] 中,按兩下封裝將其開啟。
按一下 [控制流程] 索引標籤。
以滑鼠右鍵按一下控制流程設計介面背景的任何位置,然後按一下 [屬性] 。
在 [屬性] 視窗中,將 TransactionOption 屬性設定為 Required。
在 [控制流程] 索引標籤的設計介面上,以滑鼠右鍵按一下您要在交易中註冊的工作或容器,然後按一下 [屬性]。
在 [屬性] 視窗中,將 TransactionOption 屬性設定為 Supported。
注意
若要在交易中編列連接,請註冊在交易中使用連接的工作。 如需詳細資訊,請參閱 Integration Services (SSIS) 連線。
針對您想要在此交易中註冊的每個工作和容器,重複步驟 6 和 7。
將套件設定成使用多個交易
在這個選項中,雖然封裝本身支援交易,但是不會啟動交易。 您可以將封裝的 TransactionOption 屬性設定為 Supported,藉以將此封裝設定成支援交易。
接著,您可以將封裝內部的所需工作和容器設定成起始或參與交易。 若要將工作或容器設定成起始交易,您可以將該工作或容器的 TransactionOption 屬性設定為 Required。
在 SQL Server Data Tools (SSDT) 中,開啟包含您想要設定來使用交易之套件的 Integration Services 專案。
在 [方案總管] 中,按兩下封裝將其開啟。
按一下 [控制流程] 索引標籤。
以滑鼠右鍵按一下控制流程設計介面背景的任何位置,然後按一下 [屬性] 。
在 [屬性] 視窗中,將 TransactionOption 屬性設定為 Supported。
注意
封裝支援交易,但交易是由封裝中的工作或容器所啟動。
在 [控制流程] 索引標籤的設計介面上,以滑鼠右鍵按一下要啟動其交易之封裝內的工作或容器,然後按一下 [屬性]。
在 [屬性] 視窗中,將 TransactionOption 屬性設定為 Required。
如果交易由容器啟動,請以滑鼠右鍵按一下您要在交易中註冊的工作或容器,然後按一下 [屬性]。
在 [屬性] 視窗中,將 TransactionOption 屬性設定為 Supported。
注意
若要在交易中編列連接,請註冊在交易中使用連接的工作。 如需詳細資訊,請參閱 Integration Services (SSIS) 連線。
針對啟動交易的每個工作和容器,重複步驟 6 至 9。
套件中有多個交易
在 Integration Services 套件中,套件可以包含不相關的交易。 任何時候如果巢狀容器階層中間的容器不支援交易,而階層中其上面或下面的容器設定為支援交易,則這些容器就會啟動分別的交易。 交易會從巢狀容器階層中最內層的工作到封裝依序進行認可或回復。 不過,內部交易認可後,如果外部交易已中止,則不會回復該交易。
套件中有多個交易的範例
例如,封裝具有的「時序」容器包含兩個「Foreach 迴圈」容器,而每個容器包含兩個「執行 SQL」工作。 時序容器支援交易,Foreach 迴圈容器不支援,而執行 SQL 工作則支援。 在此範例中,每一個執行 SQL 工作都會啟動自己的交易,而即使時序工作上的交易中止,也不會回復。
「時序」容器、「Foreach 迴圈」容器和「執行 SQL」工作的 TransactionOption 屬性設定如下:
「時序」容器的 TransactionOption 屬性會設為 Required。
「Foreach 迴圈」容器的 TransactionOption 屬性會設為 NotSupported。
「執行 SQL」工作的 TransactionOption 屬性會設為 Required。
下圖顯示封裝中五個不相關的交易。 一個交易是由「時序」容器啟動的,四個交易是由「執行 SQL」工作啟動的。
繼承的交易
封裝可使用「執行封裝」工作執行另一個封裝。 子封裝 (亦即「執行封裝」工作所執行的封裝) 可建立其自己的封裝交易,也可以繼承父封裝交易。
如果下列兩個情況均成立,則子封裝將會繼承父封裝交易:
由一「執行封裝」工作叫用 (Invoke) 該封裝。
叫用該封裝的「執行封裝」工作亦聯結父封裝交易。
除非子封裝自行聯結交易,否則子封裝中的容器和工作無法聯結父封裝交易。
繼承的交易範例
在下圖中,有三個使用交易的封裝。 每一個封裝都包含多個工作。 為強調交易的行為,只會顯示「執行封裝」工作。 封裝 A 執行封裝 B 和 C。而封裝 B 又執行封裝 D 和 E,封裝 C 執行封裝 F。
封裝和工作具有下列交易屬性:
在封裝 A 和 C 上,TransactionOption 設為 Required
在封裝 B 和 D 上,以及在「執行封裝 B」、「執行封裝 D」和「執行封裝 F」工作上,TransactionOption 設為 Supported 。
在封裝 E 上,以及在「執行封裝 C」和「執行封裝 E」工作上,TransactionOption 設為 NotSupported 。
只有封裝 B、D 和 F 可從其父封裝繼承交易。
封裝 B 和 D 會繼承由封裝 A 啟動的交易。
封裝 F 會繼承由封裝 C 啟動的交易。
封裝 A 和 C 會控制其自己的交易。
封裝 E 不使用交易。
外部資源
- 位於 www.mssqltips.com 的部落格內容:如何在 SQL Server Integration Services SSIS 中使用交易 \(英文\)