Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Symptomy

Załóżmy, że utworzono grupę dostępności przy użyciu klauzuli WITH DTC_SUPPORT = PER_DB w usłudze Microsoft SQL Server. Podczas próby wykonania instrukcji SAVE TRANSACTION w procedurach składowanych transakcji lub systemów, takich jak sp_executesql, jest wyświetlany jeden z następujących komunikatów o błędzie:

Msg 627, poziom 16, Stan 0, LineNumber
Nie można użyć funkcji SAVE TRANSACTION w ramach transakcji rozproszonej.
Msg 12324, poziom 16, Stan 100, LineNumber
Transakcje rozproszone (DTC) nie są obsługiwane w tabelach zoptymalizowanych pod kątem pamięci.
Błąd: 3933, Ważność: 16, Województwo: 1.
Nie można podwyższyć transakcji do transakcji rozproszonej, ponieważ istnieje aktywny punkt zapisywania w tej transakcji.

Przyczyna

Jeśli baza danych w grupie Zawsze przy dostępności jest włączona dla funkcji WITH DTC_SUPPORT = PER_DB, o ile transakcja obejmuje wiele baz danych, transakcja jest promowana do transakcji MSDTC w SQL Server 2016 z dodatkiem SP2 i SQL Server 2017. Istnieją ograniczenia transakcji MSDTC, na przykład nie można używać punktów zapisu, nie można używać tabel zoptymalizowanych pod kątem pamięci.

W niektórych sytuacjach transakcje między bazami danych występują nie dlatego, że użytkownicy mają transakcje obejmujące dwie bazy danych użytkowników, ale dlatego, że transakcje dotyczą bieżącej bazy danych i systemowych baz danych (master, tempdb, model, system resource database). Ponieważ baza danych zasobów systemowych jest w rzeczywistości tylko do odczytu, nie jest konieczne podwyższanie poziomu do transakcji MSDTC, jeśli transakcja między bazami danych obejmuje bazę danych zasobów systemowych, ale nie inne systemowe bazy danych. 

Rozwiązanie

Poprawka wprowadzona w tej aktualizacji kb pominie promocję do transakcji MSDTC, jeśli baza danych zasobów systemowych i baza danych użytkowników będąca częścią grupy dostępności włączonej dla PER_DB usługi DTC biorą udział w transakcji między bazami danych w tym samym wystąpieniu SQL Server.

Dlatego jeśli pierwotną przyczyną błędów wymienionych powyżej jest transakcja między bazami danych obejmująca bazę danych zasobów systemowych, ta poprawka rozwiąże ten problem. Czasami użytkownik może zobaczyć błędy wymienione powyżej z tą samą przyczyną źródłową. Poniżej wymieniono warunki zastosowania tej poprawki:

  • Baza danych jest częścią grupy zawsze włączonej dostępności z włączoną funkcją WITH DTC_SUPPORT = PER_DB.

  • Transakcja między bazami danych obejmuje tę bazę danych i bazę danych zasobów systemowych w tym samym wystąpieniu SQL Server.

  • Wewnątrz transakcji między bazami danych jest używana funkcja SAVE TRANSACTION lub są zaangażowane tabele zoptymalizowane pod kątem pamięci.

Taka transakcja zakończyłaby się niepowodzeniem z błędami wymienionymi powyżej bez tej poprawki. Dzięki tej poprawce taka transakcja powinna być kontynuowana.

Uwaga: Ta poprawka dotyczy transakcji między bazami danych obejmujących bazę danych zasobów systemowych, ale każda transakcja między bazami danych obejmująca bazy danych użytkowników i zawierająca instrukcję SAVE TRANSACTION nadal kończy się niepowodzeniem i musi zostać ponownie zapisana.

Ten problem został rozwiązany w następującej aktualizacji zbiorczej dla SQL Server:

Każda nowa aktualizacja zbiorcza dla SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń, które zostały uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla SQL Server:

Więcej informacji

Dodatkowe informacje na temat DTC_SUPPORT = PER_DB, tabel zoptymalizowanych pod kątem pamięci, funkcji SAVE TRANSACTION można znaleźć za pomocą poniższych linków.

Transakcje bazy danych w tym samym wystąpieniu SQL Server łączą tę część z https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instance
tabele zoptymalizowane pod kątem pamięci łączą tę część z
https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitations linkZAPISZ TRANSAKCJĘ do tej części https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks

https://learn.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-replication-for-always-on-availability-groups-sql-server?view=sql-server-2017#step2

Stan

Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".

Informacje

Dowiedz się więcej o terminologii używanej przez firmę Microsoft do opisywania aktualizacji oprogramowania.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×