Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Tento článek popisuje podporu napříč databázemi a distribuovanými transakcemi pro skupiny dostupnosti AlwaysOn a zrcadlení databáze.
Podpora distribuovaných transakcí
SQL Server 2017 podporuje distribuované transakce pro databáze ve skupinách dostupnosti. Tato podpora zahrnuje databáze ve stejné instanci SQL Serveru nebo databází na různých instancích SQL Serveru. Distribuované transakce nejsou podporovány pro databáze nakonfigurované pro zrcadlení databáze.
Poznámka:
SQL Server 2016 (13.x) Service Pack 2 a novější poskytuje úplnou podporu distribuovaných transakcí ve skupinách dostupnosti.
Ve verzích SQL Serveru 2016 (13.x) před aktualizací Service Pack 2 nejsou podporované distribuované transakce mezi databázemi (tj. transakce využívající databáze ve stejné instanci SQL Serveru) zahrnující databázi ve skupině dostupnosti.
Pokud chcete nakonfigurovat skupinu dostupnosti pro distribuované transakce, přečtěte si téma Konfigurace skupiny dostupnosti pro distribuované transakce.
Další informace najdete tady:
SQL Server 2016 SP1 a předtím: Podpora transakcí napříč databázemi ve stejné instanci SQL Serveru
V SQL Serveru 2016 SP1 a dříve nejsou pro skupiny dostupnosti podporované transakce mezi databázemi ve stejné instanci SQL Serveru. Žádné dvě databáze v transakci mezi databázemi mohou být hostovány stejnou instancí SQL Serveru, pokud jsou obě databáze ve skupině dostupnosti. Toto omezení platí také v případě, že jsou tyto databáze součástí stejné skupiny dostupnosti.
Zrcadlení databáze nepodporuje ani transakce napříč databázemi.
SQL Server 2016 SP1 a předtím: Podpora distribuovaných transakcí
Distribuované transakce jsou podporovány ve skupinách dostupnosti, když jsou databáze hostované různými instancemi SQL Serveru. Platí také pro distribuované transakce mezi instancemi SQL Serveru a jiným serverem kompatibilním s DTC.
Microsoft Distributed Transaction Coordinator (MSDTC nebo DTC) je služba systému Windows, která poskytuje transakční infrastrukturu pro distribuované systémy. MSDTC umožňuje klientským aplikacím zahrnout do jedné transakce více zdrojů dat, které se pak potvrdí na všech serverech zahrnutých v transakci. Můžete například použít MSDTC ke koordinaci transakcí, které zahrnují více databází na různých serverech.
SQL Server 2016 zavádí možnost používat distribuované transakce, kde jedna nebo více databází v transakci jsou ve skupině dostupnosti. Před sql Serverem 2016 nebyly distribuované transakce podporovány pro databáze ve skupinách dostupnosti. SQL Server 2016 může zaregistrovat správce prostředků na každou databázi. Tato nová funkce je důvodem, proč distribuované transakce mohou zahrnovat databáze ve skupinách dostupnosti.
Musí být splněny následující požadavky:
Skupiny dostupnosti musí být spuštěné ve Windows Serveru 2012 R2 nebo novějším. Pro Windows Server 2012 R2 je nutné nainstalovat aktualizaci z KB3090973.
Skupiny dostupnosti musí být vytvořeny pomocí příkazu CREATE AVAILABILITY GROUP a klauzule WITH DTC_SUPPORT = PER_DB . V současné době nelze změnit existující skupinu dostupnosti.
Všechny instance SQL Serveru, které se účastní skupiny dostupnosti, musí být SQL Server 2016 nebo novější.
Nepodpora distribuovaných transakcí
Mezi konkrétní případy, kdy se distribuované transakce nepodporují, patří:
V SQL Serveru 2016 SP1 a předchozím, kde více než jedna databáze zapojená do transakce je ve stejné skupině dostupnosti.
V SQL Serveru 2016 SP1 a předchozím, kde alespoň jedna databáze je ve skupině dostupnosti a jiná databáze je ve stejné instanci SQL Serveru.
V případech, kdy skupina dostupnosti nebyla vytvořena s umožněním distribuovaných transakcí.
Zrcadlení databáze
Důležité
Určete odpovídající výchozí výsledek transakcí, které DTC nemůže pro vaše prostředí vyřešit. Informace o tom, jak nakonfigurovat výchozí výsledek, naleznete v části in-doubt xact resolution Server Configuration Option.
Ukázkový scénář se zrcadlením databáze
Následující příklad zrcadlení databáze ukazuje, jak může dojít k logické nekonzistence. V tomto příkladu aplikace použije transakci napříč databázemi k vložení dvou řádků dat: jeden řádek se vloží do tabulky v zrcadlené databázi A a druhý řádek se vloží do tabulky v jiné databázi B. Databáze A je zrcadlena v režimu vysoké bezpečnosti s automatickým převzetím služeb po selhání. Při potvrzování transakce se databáze A stane nedostupnou a relace zrcadlení automaticky přejde na zrcadlovou databázi A.
Po převzetí služeb při selhání může být transakce mezi databázemi úspěšně potvrzena v databázi B, ale ne v databázi s převzetím služeb při selhání. Pokud například původní hlavní server pro databázi A neodeslal protokol pro transakci mezi databázemi do zrcadlového serveru před selháním. Po převzetí služeb při selhání by tato transakce neexistovala na novém primárním serveru. Databáze A a B by byly nekonzistentní, protože data vložená do databáze B zůstávají nedotčená, ale data vložená do databáze A byla ztracena.
Při použití transakce MS DTC může dojít k podobnému scénáři. Například po převzetí služeb při selhání nový hlavní uzel kontaktuje MS DTC. Ms DTC ale nemá žádné znalosti o novém hlavním serveru a ukončí všechny transakce, které se "připravují k potvrzení", které jsou považovány za potvrzené v jiných databázích.
Poznámka:
Použití databázového zrcadlení s DTC nebo použití dostupnostních skupin s DTC způsoby, které nejsou schváleny v tomto článku, nejsou podporována. To neznamená, že aspekty produktu nesouvisející s DTC nejsou podporovány; Všechny problémy vyplývající z nesprávného použití distribuovaných transakcí však nejsou podporovány.