Compartir a través de


Recompilación o traslado de una instalación de MSDTC para su uso con un clúster de conmutación por error de SQL

En este artículo se describe cómo recompilar una instalación interrumpida del Coordinador de transacciones distribuidas de Microsoft (MSDTC) para su uso con una instalación de SQL Server en clúster de conmutación por error.

Número de KB original: 294209

Resumen

En el blog siguiente se proporciona información detallada sobre los cambios en el comportamiento de MSDTC desde la versión de Windows Server 2008.

Recomendaciones de MSDTC sobre el clúster de conmutación por error de SQL

El propósito de las siguientes preguntas más frecuentes (P+F) es abordar preguntas comunes con MSDTC cuando se usa con instancias en clúster de conmutación por error de SQL Server para incluir recomendaciones y procedimientos recomendados actuales.

MSDTC es un administrador de transacciones que permite a las aplicaciones cliente incluir varios orígenes de datos diferentes en una transacción y, a continuación, coordina la confirmación de la transacción distribuida en todos los servidores que están inscritos en la transacción. Esto ayuda a garantizar que la transacción se confirme, si cada parte de la transacción se realiza correctamente o se revierte, si se produce un error en alguna parte del proceso de transacción.

Muchas personas preguntan por qué necesitamos instalar MSDTC antes de instalar SQL Server. Ya no es necesario realizar esta operación. Era un requisito que SQL Server 2005 necesitaba. Esa versión de SQL Server ha finalizado su ciclo de vida y, por tanto, finalizó el requisito de instalar SQL Server.

Al implementar SQL Server en un entorno de alta disponibilidad, como los clústeres de conmutación por error de Windows, hay ciertos procedimientos recomendados que pueden hacer que el comportamiento de los servicios MSDTC sea más predecible.

  • Cuando el tema de la compatibilidad con transacciones entre bases de datos o DTC, en un grupo de disponibilidad, aparece la respuesta rápida NO ES COMPATIBLE.

  • Esta es una verdadera declaración y la conversación tiende a centrarse entonces en pero ¿por qué? De hecho, algunas DBA han probado varias formas de estos tipos de transacción y no se han encontrado errores.

  • El problema es que las pruebas no se completan y la actividad de confirmación en dos fases necesaria puede provocar la pérdida de datos o una base de datos que no se recupera según lo previsto en determinadas configuraciones. De hecho, los evaluadores de SQL Server insertan errores en ubicaciones estratégicas para crear los escenarios difíciles (pero no imposibles) de crear en un servidor de producción. Para obtener más información, vea Not-Supported: AG with TC/Cross-Database Transaction.

Con el clúster de conmutación por error de Windows 2008 y versiones posteriores, no es necesario agrupar MSDTC para usar la funcionalidad del servicio MSDTC porque MSDTC se rediseñó en Windows 2008. A diferencia de Windows 2003, si instala el clúster de conmutación por error de Windows, tenía que agrupar MSDTC. Este ya no es el caso cuando se usa Windows 2008, ya que, de forma predeterminada, el servicio MSDTC se ejecuta localmente, incluso con clústeres de conmutación por error instalados.

Si la instancia en clúster de conmutación por error de SQL Server requiere MSDTC y requiere que los recursos de MSDTC conmuten por error con la instancia de SQL Server, se recomienda crear un recurso MSDTC dentro del rol FailoverCluster que contiene la instancia de SQL Server y que usa:

  • El nombre de red de SQL Server\punto de acceso de cliente
  • Un disco dentro del rol de SQL Server
  • Asigne al recurso MSDTC el nombre del servidor virtual de SQL.

Configuración y prueba de un nuevo recurso de clúster MSDTC mediante PowerShell

  1. Cree un nuevo recurso MSDTC reemplazando el contenido entre las secciones siguientes y <> , a continuación, ejecute.

    $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
    

    Si el recurso MSDTC no aceptó el nombre proporcionado, puede modificar el nombre mediante el siguiente PowerShell reemplazando el Nuevo coordinador de transacciones distribuidas por RealSqlVsName:

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

    Puede sustituir $VSqlSrv RealSqlVsName si sigue activo.

  2. Compruebe las reglas de firewall mediante el siguiente script:

    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. Establezca la autenticación de red MSDTC mediante el siguiente script:

    Set-DtcNetworkSetting -AuthenticationLevel Mutual `
    -DtcName "Local" -InboundTransactionsEnabled $True `
    -LUTransactionsEnabled $True `
    -OutboundTransactionsEnabled $True `
    -RemoteAdministrationAccessEnabled $False `
    -RemoteClientAccessEnabled $False `
    -XATransactionsEnabled $True -verbose
    
  4. Compruebe que el nuevo recurso MSDTC aparece ahora con el siguiente comando:

    Get-Dtc -Verbose |Sort-Object DtcName
    
  5. Pruebe el nuevo recurso MSDTC.

    Test-Dtc -LocalComputerName RealSqlVsName -Verbose
    

    Puede sustituir $VSqlSrv RealSqlVsName si sigue activo. Use $Env:COMPUTERNAME para probar la instalación local. Deberá ejecutar las reglas de firewall y los comandos de PowerShell de autenticación MSDTC en todos los demás nodos de clúster existentes.

  6. Pruebe MSDTC.

    En este ejemplo, usaremos la base de datos AdventureWorks2012, tendrá que sustituir un nombre de base de datos real con el que desea probar. Desde una ventana de consulta de SQL Server, ejecute la siguiente instrucción SQL:

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

    Ahora debería ver que una fila se ve afectada y que el registro insertado no existe.

Referencias

Configuración recomendada de MSDTC para usar transacciones distribuidas en SQL Server