MSDTC: Co to vlastně je

Službu MSDTC (Microsoft Distributed Transaction Coordinator) naleznete nainstalovanou jako standardní součást systému. Jak je již z názvu patrné SQL server jej využívá ke koordinaci distribuovaných dotazů.

Pojďme se na to podívat pěkně popořadě. Většinou SQL server není v infrastruktuře osamocen, ale je spojen s jinými servery, na kterých mohou běžet databázové servery od různých výrobců. Může se tedy stát, že část dat je uložena např. na MSSQL serveru a jiná část dat je uložena v databázi na Oracle. V momentě kdy aplikace chce přistupovat a měnit data na obou databázových strojích, vyvstává problém jak udržet konzistenci  dat v případě neočekávaného selhání zápisu do jedné či druhé databáze. Jak zjistit a zajistit rollback obou zápisů do dvou různých databází? Přesně k tomuto účelu se hodí MSDTC.

 

MSDTC

Princip komunikace

V jednoduchosti si představme případ, kdy aplikace provádí update dat na více databázových strojích. Aplikace pošle dotaz na server, ke kterému je připojena. Server SQL 01 zjistí, že je třeba provést update i v databázi na druhém serveru a kontaktuje lokální MSDTC s požadavkem na zajištění provedení update dat. MSDTC se spojí se vzdáleným protějškem na serveru SQL 02. Po výměně nezbytných informací může SQL 01 provést update lokálních dat a čekat na výsledek ze vzdáleného serveru. Jakmile je potvrzeno, že update byl proveden na obou stranách úspěšně, celá tato transakce je ukončena. Objeví-li se problém na vzdáleném serveru SQL 02 a transakce nemůže být provedena, pak je proveden rollback a ani na SQL 01 nejsou data změněna.

Pravdou je, že celé je to mnohem složitější, než jsem popsal výše. Nicméně přesto uvedený příklad s popisem podává rámcovou představu, jak MSDTC funguje.

Dotazům, které mají běžet nad více datovými zdroji se říká distribuované dotazy (distributed queries). Transakcím se pak analogicky říká distribuované transakce (distributed transactions). Další vrstvou, kterou používají distribuované dotazy pro připojování k různým datovým zdrojům je rozhranní OLE DB (OLE DB Interface). Samotné rozhranní zprostředkovává komunikaci s poskytovateli vlastních dat (OLE DB Provider). Standardizace způsobu komunikace pak umožňuje vystavět heterogenní prostředí se zapojením různých datových zdrojů (MS SQL Server, Oracle, DB2, Sybase, Excel, MS Access, atp.)

Další součástí správného fungování MSDTC je RPC (Remote Procedure Call). RPC technologie se zrodila právě kvůli potřebě aplikací komunikovat se serverem. Nelze se tedy divit, že RPC není výlučně spjata pouze s SQL Serverem, ale naopak SQL Server je pouze jedna z mnoha technologií, která používá RPC. RPC se v našem případě stará o správné navázání spojení a předání informace, na kterém portu běží MSDTC.

MSDTC2

Princip komunikace přes OLE DB a RPC

Příště se podíváme blíže na RPC z pohledu administrátora.