Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
W tym artykule opisano obsługę transakcji między bazami danych oraz transakcji rozproszonych dla grup dostępności Always On i odbicia bazy danych.
Obsługa transakcji rozproszonych
Program SQL Server 2017 obsługuje transakcje rozproszone dla baz danych w grupach dostępności. To wsparcie obejmuje bazy danych na tym samym wystąpieniu SQL Server lub bazy danych na różnych wystąpieniach SQL Server. Transakcje rozproszone nie są obsługiwane w przypadku baz danych skonfigurowanych do dublowania bazy danych.
Uwaga / Notatka
Program SQL Server 2016 (13.x) z dodatkiem Service Pack 2 lub nowszym zapewnia pełną obsługę transakcji rozproszonych w grupach dostępności.
W wersjach programu SQL Server 2016 (13.x) wcześniejszych niż dodatek Service Pack 2, rozproszone transakcje międzybazowe (tj. transakcje z wykorzystaniem baz danych na tym samym wystąpieniu programu SQL Server), które obejmują bazę danych w grupie dostępności, nie są obsługiwane.
Aby skonfigurować grupę dostępności dla transakcji rozproszonych, zobacz Konfigurowanie grupy dostępności dla transakcji rozproszonych.
Zobacz więcej informacji na stronie:
SQL Server 2016 SP1 i wcześniejsze: obsługa transakcji między bazami danych w tym samym wystąpieniu programu SQL Server
W programie SQL Server 2016 SP1 i poprzednich transakcje między bazami danych w tym samym wystąpieniu programu SQL Server nie są obsługiwane dla grup dostępności. Żadne dwie bazy danych w transakcji krzyżowej nie mogą być hostowane przez to samo wystąpienie programu SQL Server, jeśli jedna lub obie bazy danych znajdują się w grupie dostępności. To ograniczenie dotyczy również sytuacji, gdy te bazy danych są częścią tej samej grupy dostępności.
Transakcje między bazami danych nie są także obsługiwane dla mirroringu bazy danych.
SQL Server 2016 SP1 i wcześniejsze: obsługa transakcji rozproszonych
Transakcje rozproszone są obsługiwane w ramach grup dostępności, gdy bazy danych są hostowane przez różne wystąpienia programu SQL Server. Również dotyczy transakcji rozproszonych między instancjami SQL Server a innymi serwerami zgodnymi z DTC.
Microsoft Distributed Transaction Coordinator (MSDTC lub DTC) to usługa systemu Windows, która zapewnia infrastrukturę transakcji dla systemów rozproszonych. MSDTC umożliwia aplikacjom klienckim dołączanie wielu źródeł danych do jednej transakcji, która następnie jest zatwierdzana na wszystkich serwerach uwzględnionych w transakcji. Na przykład można użyć MSDTC do koordynowania transakcji obejmujących wiele baz danych na różnych serwerach.
Program SQL Server 2016 wprowadza możliwość korzystania z transakcji rozproszonych, w których co najmniej jedna baza danych w transakcji znajduje się w grupie dostępności. Przed programem SQL Server 2016 transakcje rozproszone nie były obsługiwane w przypadku baz danych w grupach dostępności. Program SQL Server 2016 może zarejestrować menedżera zasobów dla każdej bazy danych. Ta nowa funkcja polega na tym, że transakcje rozproszone mogą obejmować bazy danych w grupach dostępności.
Muszą być spełnione następujące wymagania:
Grupy dostępności muszą być uruchomione w systemie Windows Server 2012 R2 lub nowszym. W systemie Windows Server 2012 R2 należy zainstalować aktualizację w KB3090973.
Grupy dostępności należy utworzyć za pomocą polecenia CREATE AVAILABILITY GROUP i klauzuli WITH DTC_SUPPORT = PER_DB . Obecnie nie można zmienić istniejącej grupy dostępności.
Wszystkie wystąpienia programu SQL Server, które uczestniczą w grupie dostępności, muszą mieć wersję SQL Server 2016 lub nowszą.
Brak obsługi transakcji rozproszonych
Konkretne przypadki, w których transakcje rozproszone nie są obsługiwane, obejmują:
W programie SQL Server 2016 SP1 i wcześniejszym, gdzie więcej niż jedna baza danych zaangażowana w transakcję znajduje się w tej samej grupie dostępności.
W programie SQL Server 2016 SP1 i wcześniejszym, w którym co najmniej jedna baza danych znajduje się w grupie dostępności, a inna baza danych znajduje się w tym samym wystąpieniu programu SQL Server.
Gdzie grupa dostępności nie została utworzona z włączoną opcją transakcji rozproszonych.
Dublowanie bazy danych.
Ważne
Określ odpowiedni domyślny wynik transakcji, których usługa DTC nie może rozpoznać dla danego środowiska. Aby uzyskać informacje na temat konfigurowania domyślnego rezultatu, zobacz Opcja konfiguracji serwera dla rozwiązywania transakcji wątpliwych.
Przykładowy scenariusz z dublowaniem bazy danych
Poniższy przykład dublowania bazy danych ilustruje, jak może wystąpić logiczna niespójność. W tym przykładzie aplikacja używa transakcji między bazami danych do wstawiania dwóch wierszy danych: jeden wiersz jest wstawiany do tabeli w dublowanej bazie danych, A, a drugi wiersz jest wstawiany do tabeli w innej bazie danych, B. Baza danych A jest dublowana w trybie wysokiego bezpieczeństwa z automatycznym trybem failover. Gdy transakcja jest zatwierdzana, baza danych A staje się niedostępna, a sesja mirroringu automatycznie przełącza się na kopię lustrzaną bazy danych A.
Po przejściu w tryb failover transakcja między bazami danych może zostać pomyślnie zatwierdzona w bazie danych B, ale nie w bazie danych przełączonej w tryb failover. Jeśli na przykład główny serwer bazy danych A nie wysłał dziennika dla transakcji między bazami danych na serwer lustrzany przed awarią. Po przejściu w tryb failover ta transakcja nie istnieje na nowym serwerze głównym. Bazy danych A i B stałyby się niespójne, ponieważ dane wstawione w bazie danych B pozostają nienaruszone, ale dane wstawione w bazie danych A zostały utracone.
Podobny scenariusz może wystąpić podczas korzystania z transakcji MS DTC. Na przykład po przełączeniu awaryjnym nowy serwer główny kontaktuje się z usługą MS DTC. Jednak usługa MS DTC nie zna nowego głównego serwera i przerywa wszelkie transakcje "przygotowujące się do zatwierdzenia", które są uznawane za zatwierdzone w innych bazach danych.
Uwaga / Notatka
Używanie funkcji dublowania bazy danych z usługą DTC lub używania grup dostępności z usługą DTC w sposób niezatwierdzony w tym artykule nie jest obsługiwane. Nie oznacza to, że aspekty produktu niepowiązane z dtC są nieobsługiwane; jednak wszelkie problemy wynikające z nieprawidłowego użycia transakcji rozproszonych nie są obsługiwane.
Dalsze kroki
Zawsze włączone grupy dostępności: współdziałanie (SQL Server)