Udostępnij za pośrednictwem


Jak ponownie skompilować lub przenieść instalację MSDTC do użycia z klastrem trybu failover SQL

W tym artykule opisano, jak ponownie skompilować uszkodzoną instalację koordynatora transakcji rozproszonych firmy Microsoft (MSDTC) do użycia z instalacją klastra trybu failover programu SQL Server.

Oryginalny numer KB: 294209

Podsumowanie

Poniższy blog zawiera szczegółowe informacje dotyczące zmian w zachowaniu MSDTC od czasu wydania systemu Windows Server 2008.

Zalecenia MSDTC dotyczące klastra trybu failover SQL

Celem poniższych często zadawanych pytań jest rozwiązanie typowych pytań dotyczących witryny MSDTC w przypadku użycia z wystąpieniami klastra trybu failover programu SQL Server w celu uwzględnienia bieżących zaleceń i najlepszych rozwiązań.

MSDTC jest menedżerem transakcji, który umożliwia aplikacjom klienckim dołączenie kilku różnych źródeł danych w jednej transakcji, a następnie koordynuje zatwierdzanie transakcji rozproszonej na wszystkich serwerach wymienionych w transakcji. Pomaga to zagwarantować, że transakcja zostanie zatwierdzona, jeśli każda część transakcji zakończy się powodzeniem lub zostanie wycofana, jeśli którakolwiek część procesu transakcji zakończy się niepowodzeniem.

Wiele osób, dlaczego musimy zainstalować program MSDTC przed zainstalowaniem programu SQL Server. Nie musisz już wykonywać tej operacji. Wymagane było, aby program SQL Server 2005 był wymagany. Ta wersja programu SQL Server zakończyła swój cykl życia i dlatego zakończyła wymaganie zainstalowania programu SQL Server.

Podczas wdrażania programu SQL Server w środowisku o wysokiej dostępności, takim jak klaster trybu failover systemu Windows, istnieją pewne najlepsze rozwiązania, które mogą sprawić, że zachowanie usług MSDTC będzie bardziej przewidywalne.

  • Jeśli temat obsługi transakcji między bazami danych i/lub DTC w ramach grupy dostępności pojawia się szybka odpowiedź NIE JEST OBSŁUGIWANA!.

  • Jest to prawdziwe stwierdzenie, a rozmowa zwykle koncentruje się na ale dlaczego? W rzeczywistości niektóre administratorzy baz danych przetestowali różne formy tych typów transakcji i nie napotkali błędów.

  • Problem polega na tym, że testowanie nie zostało ukończone, a wymagane działanie zatwierdzania dwufazowego może spowodować utratę danych lub bazę danych, która nie zostanie odzyskana zgodnie z oczekiwaniami w niektórych konfiguracjach. W rzeczywistości testerzy programu SQL Server wprowadzają błędy w strategicznych lokalizacjach, aby utworzyć scenariusze, które są trudne (ale nie niemożliwe) do utworzenia na serwerze produkcyjnym. Aby uzyskać więcej informacji, zobacz Not-Supported: AGs with TC/Cross-Database Transaction (Nieobsługiwane: AGs z transakcjami TC/Cross-Database).

W przypadku klastra trybu failover systemu Windows 2008 i nowszych nie trzeba klasterować MSDTC, aby korzystać z funkcji usługi MSDTC, ponieważ MSDTC został przeprojektowany w systemie Windows 2008. W przeciwieństwie do systemu Windows 2003, jeśli instalujesz klaster trybu failover systemu Windows, trzeba było klaster MSDTC. Nie ma to już zastosowania w przypadku korzystania z systemu Windows 2008, ponieważ domyślnie usługa MSDTC jest uruchomiona lokalnie, nawet z zainstalowanym klastrem trybu failover.

Jeśli wystąpienie klastra trybu failover programu SQL Server wymaga witryny MSDTC i wymaga, aby zasoby MSDTC przechodziły w tryb failover z wystąpieniem programu SQL Server, zalecamy utworzenie zasobu MSDTC w roli failoverCluster, która zawiera wystąpienie programu SQL Server i które używa:

  • Nazwa sieci programu SQL Server\punkt dostępu klienta
  • Dysk w ramach roli programu SQL Server
  • Nazwij zasób MSDTC nazwą serwera wirtualnego SQL.

Konfigurowanie i testowanie nowego zasobu klastra MSDTC przy użyciu programu PowerShell

  1. Utwórz nowy zasób MSDTC zastępujący zawartość między sekcjami i zawierającymi <> poniższe sekcje, a następnie wykonaj je.

    $SqlRole = <Actual name of the role containing the SQL Server instance>
    $SqlNetName = <Actual SQL Servernetwork resourcename>
    $VSqlSrv = <Actual SQL Server virtual server name>
    $CluDsk = <Actual disk resource name>
    
    Add-ClusterResource -Name $VSqlSrv -ResourceType "Distributed Transaction Coordinator" -Group $SqlRole
    

    Jeśli zasób MSDTC nie zaakceptował podanej nazwy, możesz zmienić nazwę przy użyciu następującego programu PowerShell, zastępując new Distributed Transaction Coordinator wartością RealSqlVsName:

    Get-ClusterResource "New Distributed Transaction Coordinator" | %{$_.Name = RealSqlVsName }
    

    Możesz zastąpić $VSqlSrv wartość RealSqlVsName, jeśli nadal jest aktywna.

  2. Zweryfikuj reguły zapory przy użyciu następującego skryptu:

    Set-NetFirewallRule -Name 'RPC Endpoint Mapper' -Enabled True
    Set-NetFirewallRule -Name 'DTC incoming connections' -Enabled True
    Set-NetFirewallRule -Name 'DTC outgoing connections' -Enabled True
    
  3. Ustaw uwierzytelnianie sieciowe MSDTC przy użyciu następującego skryptu:

    Set-DtcNetworkSetting -AuthenticationLevel Mutual `
    -DtcName "Local" -InboundTransactionsEnabled $True `
    -LUTransactionsEnabled $True `
    -OutboundTransactionsEnabled $True `
    -RemoteAdministrationAccessEnabled $False `
    -RemoteClientAccessEnabled $False `
    -XATransactionsEnabled $True -verbose
    
  4. Sprawdź, czy nowy zasób MSDTC jest teraz wyświetlany przy użyciu następującego polecenia:

    Get-Dtc -Verbose |Sort-Object DtcName
    
  5. Przetestuj nowy zasób MSDTC.

    Test-Dtc -LocalComputerName RealSqlVsName -Verbose
    

    Możesz zastąpić $VSqlSrv wartość RealSqlVsName, jeśli nadal jest aktywna. Użyj polecenia $Env:COMPUTERNAME , aby przetestować instalację lokalną. Należy wykonać reguły zapory i polecenia programu PowerShell uwierzytelniania MSDTC we wszystkich pozostałych istniejących węzłach klastra.

  6. Przetestuj witrynę MSDTC.

    W tym przykładzie użyjemy bazy danych AdventureWorks2012, musisz zastąpić rzeczywistą nazwę bazy danych, którą chcesz przetestować. W oknie zapytania programu SQL Server uruchom następującą instrukcję SQL:

    USE AdventureWorks2012;
    
    GO
    
    BEGIN DISTRIBUTED TRANSACTION; 
    
    -- Enter fake transaction to the database
    
    INSERT SQL_Statement
    
    DELETE SQL_Statement
    
    COMMIT TRANSACTION
    
    GO
    

    Powinien zostać wyświetlony problem z jednym wierszem i że wstawiony rekord nie istnieje.

Informacje

Zalecane ustawienia MSDTC dotyczące używania transakcji rozproszonych w programie SQL Server