Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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.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
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
Compruebe que el nuevo recurso MSDTC aparece ahora con el siguiente comando:
Get-Dtc -Verbose |Sort-Object DtcName
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.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