Cómo reconstruir o mover una instalación de MSDTC para utilizarla con un clúster de conmutación por error SQL

Se aplica a: Windows Server 2019, all editionsSQL Server 2008 R2 WorkgroupSQL Server 2008 R2 Developer

Resumen


Este artículo describe cómo volver a generar una instalación de coordinador de transacciones distribuidas de Microsoft (MSDTC) rotos para su uso con una instalación de clúster de conmutación por error de SQL Server. El blog siguiente contiene detallada información sobre los cambios en el comportamiento MSDTC desde el lanzamiento de Windows 2008.
  • Recomendaciones de MSDTC en el clúster de conmutación por error SQL El propósito de la siguiente FAQ (preguntas frecuentes) es tratar las preguntas más frecuentes con MSDTC (Coordinador de transacciones distribuidas de Microsoft) cuando se utiliza con instancias de clúster de conmutación por error de SQL Server para incluir las mejores y las recomendaciones actuales prácticas.

Introducción


El Coordinador de transacciones distribuidas de Microsoft (MSDTC) es un administrador de transacciones que permite a las aplicaciones cliente para incluir varios orígenes de datos en una transacción y que coordina la confirmación de la transacción distribuida entre todos los servidores que están inscritos en la transacción. Esto ayuda a garantizar que la transacción se confirma, si cada parte de la transacción se realiza correctamente o se deshace, si se produce un error en cualquier parte del proceso de transacción.
Mucha gente se pregunte por qué necesitamos instalar MSDTC antes de instalar SQL Server, ya no necesita hacer esto que era un requisito que había requiere SQL Server 2005. Esa versión de SQL Server ha terminado su ciclo de vida y así terminó el requisito para realizar la instalación de SQL Server.
Al implementar SQL Server en un entorno de gran disponibilidad como clústeres de conmutación por error de Windows, existen algunas prácticas recomendadas que pueden hacer que el comportamiento de servicios MSDTC más predecible.
  • Cuando se trata el tema de bases de datos cruzadas o de compatibilidad con transacciones de DTC, bajo un grupo de disponibilidad, la respuesta rápida es no admite!
  • Se trata de una afirmación verdadera y la conversación tiende a centrarse después en pero ¿por qué? De hecho, algunos administradores han probado diversas formas de estos tipos de transacciones y no encontró errores.
  • El problema es que las pruebas no serán completa y la actividad de confirmación en dos fases requerida puede resultar en pérdida de datos o una base de datos que no se recupera como se esperaba en ciertas configuraciones. De hecho, los evaluadores de SQL Server insertan errores en ubicaciones estratégicas para crear los escenarios que son difíciles (pero no imposible) para crear en un servidor de producción.
Para obtener más información, vea no compatible: quetas con transacción TC/entre bases de datos.
Con el clúster de conmutación por error de Windows 2008 y versiones posteriores puede prescindir del clúster MSDTC para utilizar la funcionalidad del servicio MSDTC. Esto es debido a que MSDTC se ha diseñado de nuevo en Windows 2008 y a diferencia de Windows 2003 si se instaló el clúster de conmutación por error de Windows que tenía que MSDTC del clúster. Ya no es el caso cuando se utiliza Windows 2008, ya que de forma predeterminada, el servicio MSDTC se ejecuta localmente, incluso con Failover Clustering instalado.
Si su instancia de clúster de conmutación por error de SQL Server requieren el MSDTC y los recursos MSDTC para conmutación por error con la instancia de SQL Server, se recomienda crear un recurso MSDTC en la función ClústerDeConmutadorAPruebaDeFallos, que contiene la instancia de SQL Server y que utilice :
  • El punto de acceso de SQL Server \client de nombre de red
  • Un disco dentro de la función de SQL Server
  • El recurso MSDTC debe denominarse con el nombre de servidor virtual SQL.

Más información


Cómo configurar y probar un nuevo recurso de clúster MSDTC con PowerShell

# Create a new MSDTC resource replacing the content between and including the <> sections below then execute.$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>
# NOTE: If the MSDTC resource did not accept the name provided you can alter the name using the following Powershell replacing the New Distributed Transaction Coordinator with RealSqlVsName: Get-ClusterResource "New Distributed Transaction Coordinator" | %{$_.Name = RealSqlVsName } # $VSqlSrv can be substituted for RealSqlVsName if still active# Script to verify firewall rulesSet-NetFirewallRule -Name 'RPC Endpoint Mapper' -Enabled TrueSet-NetFirewallRule -Name 'DTC incoming connections' -Enabled TrueSet-NetFirewallRule -Name 'DTC outgoing connections' -Enabled True # Setting the MSDTC network authenticationSet-DtcNetworkSetting -AuthenticationLevel Mutual; -DtcName "Local" -InboundTransactionsEnabled $True; -LUTransactionsEnabled $True; -OutboundTransactionsEnabled $True; -RemoteAdministrationAccessEnabled $False; -RemoteClientAccessEnabled $False; -XATransactionsEnabled $True -verbose# Verify the new MSDTC resoruce is now listedGet-Dtc -Verbose |Sort-Object DtcName # Test the new MSDTC resourceTest-Dtc -LocalComputerName RealSqlVsName -Verbose # $VSqlSrv can be substituted for RealSqlVsName if still active, Use $Env:COMPUTERNAME to test the local installation. 
Las reglas de firewall y comandos de PowerShell MSDTC autenticación deberá ejecutarse en todos los otros nodos de clúster existentes.

Pruebas de MSDTC

En este ejemplo, utilizaremos la base de datos de AdventureWorks2012, se debe sustituir un nombre real de la base de datos que desea probar contra.
Desde una ventana de consulta de SQL Server, ejecute la siguiente instrucción SQL:
USE AdventureWorks2012;GOBEGIN DISTRIBUTED TRANSACTION; -- Enter fake trans action to the databaseINSERT SQL_StatementDELETE SQL_StatementCOMMIT TRANSACTIONGO
Ahora debería ver que una fila afectada y que no existe el registro insertado.