Transakce integračních služeb

Platí pro:SQL Server SSIS Integration Runtime ve službě Azure Data Factory

Balíčky používají transakce ke spojení databázových akcí prováděných úlohami do atomických celků, a tím zachovávají integritu dat. Všechny typy kontejnerů v Microsoft Integration Services – balíčky, kontejnery For Loop, Foreach Loop a Sequence i hostitelé úloh, kteří zapouzdřují každou úlohu – lze nakonfigurovat tak, aby používaly transakce. Integrační služby poskytují tři možnosti konfigurace transakcí: Nepodporované, podporované a povinné.

  • Povinný argument označuje, že kontejner spustí transakci, pokud již není spuštěn nadřazeným kontejnerem. Pokud transakce již existuje, kontejner připojí transakci. Pokud například balíček, který není nakonfigurovaný pro podporu transakcí, obsahuje kontejner Sequence, který používá požadovanou možnost , kontejner Sequence spustí svou vlastní transakci. Pokud byl balíček nakonfigurovaný tak, aby používal požadovanou možnost, kontejner Sequence by připojil transakci balíčku.

  • Podporovaná indikuje, že kontejner nespustí transakci, ale spojí všechny transakce spuštěné jeho nadřazeným kontejnerem. Pokud například balíček se čtyřmi spuštěními úloh SQL spustí transakci a všechny čtyři úkoly používají podporovanou možnost, aktualizace databáze prováděné prováděním úloh SQL se vrátí zpět, pokud některý z úkolů selže. Pokud balíček nespustí transakci, čtyři úlohy Execute SQL nejsou součástí transakce a nevrátí se zpět žádné aktualizace databáze kromě těch, které provedla úloha, která selhala.

  • NotSupported značí, že kontejner nespustí transakci nebo nepřipojí existující transakci. Transakce spuštěná nadřazeným kontejnerem nemá vliv na podřízené kontejnery, které byly nakonfigurovány tak, aby nepodpořily transakce. Pokud je například balíček nakonfigurován tak, aby spustil transakci, a kontejner For Loop v balíčku používá možnost NotSupported, žádnou z úloh v kontejneru For Loop nelze v případě selhání vrátit zpět.

Transakce nakonfigurujete nastavením Vlastnosti TransactionOption v kontejneru. Tuto vlastnost můžete nastavit pomocí okna Vlastnosti v SQL Server Data Tools (SSDT) nebo můžete vlastnost nastavit programově.

Poznámka:

TransactionOption vlastnost ovlivňuje, zda hodnota IsolationLevel vlastnost požadovaná kontejnerem je použita. Další informace naleznete v popisu IsolationLevel vlastnost v tématu Nastavení vlastnosti balíčku.

Konfigurace balíčku pro použití transakcí

Při konfiguraci balíčku pro použití transakcí máte dvě možnosti:

  • Použijte jednu transakci pro celý balíček. V tomto případě je to samotný balíček, který inicializuje tuto transakci, zatímco jednotlivé úlohy a kontejnery v balíčku se účastní této jediné transakce.

  • V balíčku je více transakcí. V tomto případě balíček podporuje transakce, ale jednotlivé úlohy a kontejnery v balíčku skutečně iniciují transakce.

Následující postupy popisují, jak nakonfigurovat obě možnosti.

Konfigurace balíčku pro použití jedné transakce

V této možnosti samotný balíček inicializuje jednu transakci. Balíček nakonfigurujete tak, aby tuto transakci zahájil, nastavením vlastnosti TransactionOption balíčku na Required.

V dalším kroku vypište konkrétní úlohy a kontejnery v této jediné transakci. Chcete-li zahrnout úkol nebo kontejner v transakci, nastavíte TransactionOption vlastnost tohoto úkolu nebo kontejneru na podporovanou.

  1. V nástrojích SQL Server Data Tools (SSDT) otevřete projekt Integrační služby, který obsahuje balíček, který chcete nakonfigurovat tak, aby používal transakci.

  2. V Průzkumníku řešení poklikáním otevřete balíček.

  3. Klikněte na kartu Control Flow.

  4. Klikněte pravým tlačítkem myši na libovolné místo na pozadí návrhové plochy toku řízení a potom klikněte na příkaz Vlastnosti.

  5. V okně Vlastnosti nastavte TransactionOption vlastnost Required.

  6. Na návrhové ploše karty ControlFlow klikněte pravým tlačítkem myši na úkol nebo kontejner, který chcete zaregistrovat v transakci, a potom klepněte na příkaz Vlastnosti.

  7. V okně Vlastnosti nastavte Vlastnost TransactionOption na Podporovaná.

    Poznámka:

    Chcete-li zařadit připojení do transakce, zařaďte do transakce úlohy, které toto připojení používají. Další informace najdete v tématu Připojení služby SSIS (Integration Services).

  8. Opakujte kroky 6 a 7 pro každou úlohu a kontejner, které chcete zaregistrovat v transakci.

Konfigurace balíčku pro použití více transakcí

V této možnosti samotný balíček podporuje transakce, ale nespustí transakci. Balíček nakonfigurujete tak, aby podporoval transakce nastavením TransactionOption vlastnost balíčku na Podporováno.

Dále nakonfigurujete požadované úlohy a kontejnery uvnitř balíčku tak, aby iniciovaly transakce nebo se jich účastnily. Chcete-li nakonfigurovat úkol nebo kontejner pro zahájení transakce, nastavte TransactionOption vlastnost tohoto úkolu nebo kontejneru na Povinné.

  1. V nástrojích SQL Server Data Tools (SSDT) otevřete projekt Integrační služby, který obsahuje balíček, který chcete nakonfigurovat pro použití transaction.s.

  2. V Průzkumníku řešení poklikáním otevřete balíček.

  3. Klikněte na kartu Control Flow.

  4. Klikněte pravým tlačítkem myši na libovolné místo na pozadí návrhové plochy toku řízení a potom klikněte na příkaz Vlastnosti.

  5. V okně Vlastnosti nastavte Vlastnost TransactionOption na Podporovaná.

    Poznámka:

    Balíček podporuje transakce, ale transakce jsou spuštěny úlohou nebo kontejnery v balíčku.

  6. Na návrhové ploše karty ControlFlow klikněte pravým tlačítkem myši na úkol nebo kontejner v balíčku, pro který chcete spustit transakci, a potom klepněte na příkaz Vlastnosti.

  7. V okně Vlastnosti nastavte TransactionOption vlastnost Required.

  8. Pokud je transakce spuštěna kontejnerem, klepněte pravým tlačítkem myši na úkol nebo kontejner, který chcete zaregistrovat v transakci, a potom klepněte na příkaz Vlastnosti.

  9. V okně Vlastnosti nastavte Vlastnost TransactionOption na Podporovaná.

    Poznámka:

    Chcete-li zařadit připojení do transakce, zařaďte do transakce úlohy, které toto připojení používají. Další informace najdete v tématu Připojení služby SSIS (Integration Services).

  10. Opakujte kroky 6 až 9 pro každý úkol a kontejner, který spouští transakci.

Více transakcí v balíčku

Balíček může obsahovat nesouvisející transakce v balíčku integrační služby. Kdykoli kontejner uprostřed vnořené hierarchie kontejnerů nepodporuje transakce, kontejnery nad nebo pod ním v hierarchii spustí samostatné transakce, pokud jsou nakonfigurovány tak, aby podporovaly transakce. Transakce se potvrzují nebo vracejí zpět v pořadí od nejvnitřnější úlohy v hierarchii vnořených kontejnerů až k balíčku. Jakmile je však vnitřní transakce potvrzena, nedojde k jejímu vrácení zpět, ani když je vnější transakce zrušena.

Příklad více transakcí v balíčku

Balíček má například kontejner Sequence, který obsahuje dva kontejnery smyčky Foreach a každý kontejner obsahuje dvě úlohy Execute SQL. Kontejner Sequence podporuje transakce, kontejnery Foreach Loop je nepodporují a úlohy Execute SQL ano. V tomto příkladu by každá úloha Execute SQL spustila vlastní transakci a neprovedla by vrácení zpět, pokud by byla transakce v úloze Sequence zrušena.

Vlastnosti TransactionOption kontejneru Sequence, Foreach Loop kontejneru a Provádění úloh SQL jsou nastaveny takto:

  • Vlastnost TransactionOption kontejneru Sequence je nastavena na Required.

  • Vlastnosti TransactionOption kontejnerů foreach Loop jsou nastaveny na NotSupported.

  • Vlastnosti TransactionOption pro provádění úloh SQL jsou nastaveny na Povinné.

Následující diagram znázorňuje pět nesouvisejících transakcí v balíčku. Jedna transakce je spuštěna kontejnerem Sequence a čtyři transakce jsou spuštěny prováděním úloh SQL.

Implementace více transakcí

Zděděné transakce

Balíček může spustit jiný balíček pomocí úlohy Spustit balíček. Podřízený balíček, což je balíček spouštěný úlohou Execute Package, může vytvořit vlastní transakci balíčku, nebo může dědit nadřazenou transakci balíčku.

Podřízený balíček dědí transakci nadřazeného balíčku, pokud jsou splněny obě následující podmínky:

  • Balíček je vyvolán úlohou Execute Package.

  • Úloha Spustit balíček, která balíček spustila, se také připojila k transakci nadřazeného balíčku.

Kontejnery a úlohy v podřízeném balíčku se nemohou připojit k transakci nadřazeného balíčku, pokud se k transakci sám nepřipojí podřízený balíček.

Příklad zděděných transakcí

V následujícím diagramu jsou tři balíčky, které všechny používají transakce. Každý balíček obsahuje více úkolů. Chcete-li zdůraznit chování transakcí, jsou zobrazeny pouze úlohy Execute Package. Balíček A spouští balíčky B a C. Balíček B pak spouští balíčky D a E a balíček C spouští balíček F.

Balíčky a úlohy mají následující atributy transakce:

  • TransactionOption je nastavena na Required u balíčků A a C

  • TransactionOption je nastavena na podporované v balíčcích B a D a v úlohách spouštět balíček B, Execute Package D a Execute Package F.

  • TransactionOption je nastavena na NotSupported pro balíček E a úlohy Execute Package C a Execute Package E.

Tok zděděných transakcí

Pouze balíčky B, D a F mohou dědit transakce z nadřazených balíčků.

Balíčky B a D dědí transakci, která byla spuštěna balíčkem A.

Package F dědí transakci, která byla spuštěna balíčkem C.

Balíčky A a C řídí své vlastní transakce.

Balíček E nepoužívá transakce.