MSDTC_E_DUPLICATE_RESOURCE (0X80110701): Fix for duplicate DTC resource
MSDTC_E_DUPLICATE_RESOURCE means Windows found two identical DTC instances. The fix is to clear stale cluster resources or delete a leftover registry key.
Quick answer: Run Get-ClusterResource | Where-Object {$_.ResourceType -eq 'Distributed Transaction Coordinator'} in PowerShell, remove the duplicated DTC resource with Remove-ClusterResource, then create a fresh one.
What's actually happening here?
This error pops up when you're trying to create a Distributed Transaction Coordinator resource in a Windows Server failover cluster, but the cluster already thinks one exists with the same name or GUID. The error code 0X80110701 maps to MSDTC_E_DUPLICATE_RESOURCE. The reason is the cluster database (the quorum) holds a stale entry for a DTC resource that either wasn't fully deleted or was orphaned during a previous failed creation.
I've hit this most often on Windows Server 2016 and 2019 clusters where someone manually created a DTC resource via the Failover Cluster Manager GUI, hit an error halfway, and the half-baked resource stuck around. SQL Server Availability Groups and Exchange Server DAGs are common triggers, because both rely on a dedicated DTC resource for cross-database transactions.
Step-by-step fix
- Open PowerShell as Administrator on one of your cluster nodes. Don't bother with the GUI here — it won't show you the hidden duplicate.
- Check existing DTC resources:
Look for the resource that's causing the conflict. You'll likely see two with similar names, or one in a failed state.Get-ClusterResource | Where-Object {$_.ResourceType -eq 'Distributed Transaction Coordinator'} - Remove the duplicate:
TheRemove-ClusterResource -Name "YourDTCResourceName" -Force-Forceflag is critical — without it, the command can fail if the resource is still partially online. - Verify cleanup:
You should now see only one DTC resource (or none, if you're starting fresh).Get-ClusterResource | Where-Object {$_.ResourceType -eq 'Distributed Transaction Coordinator'} - Create the DTC resource again via the GUI or PowerShell. Use a distinct name like
DTC-SQLAG-01so you can spot it later.
Why step 3 works
The cluster database stores each resource with a unique GUID. When you try to create a new DTC resource, the cluster service checks for existing resources of the same type and name. If it finds a match — even a zombie one — it throws this error. Removing the stale resource purges the entry from the cluster database, letting you start clean. The -Force parameter bypasses the resource's online state check, which is necessary because orphaned resources often can't be brought online or offline normally.
If that doesn't fix it — registry cleanup
Sometimes the cluster cleanup doesn't remove everything. The DTC service also stores per-resource configuration in the registry. Here's the nuclear option:
- Stop the cluster service on all nodes (this is a planned outage):
Stop-Service ClusSvc - Open Regedit and navigate to:
Each subkey here is a GUID. Look for keys where theHKEY_LOCAL_MACHINE\CLUSTER\ResourcesTypevalue isDistributed Transaction Coordinator. Export the key first, then delete the offending one. - Also check this path for leftover DTC resource references:
Delete any subkeys that match the stale resource name.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\ClusterResource - Restart the cluster service on all nodes, then recreate the DTC resource.
Alternative: use a different resource name
If the issue is a name collision (not a GUID conflict), you can bypass it entirely by creating the DTC resource with a unique name. This is a hack, not a fix, but it gets you running:
Add-ClusterResource -Name "DTC-New-$(Get-Date -Format 'yyyyMMdd')" -Group "Cluster Group" -ResourceType "Distributed Transaction Coordinator"
This works because the cluster service checks for exact name matches. A different name won't trigger the duplicate check. The downside: you'll have a weirdly named resource forever.
Prevention tip
Whenever you need to remove a DTC resource, always use Remove-ClusterResource with -Force rather than deleting it from the GUI. The GUI sometimes leaves the registry keys behind. Also, after removing it, run Get-ClusterResource | Where-Object {$_.State -eq 'Offline'} and check for any DTC resources that didn't fully disappear. If you find one, remove it immediately.
Was this solution helpful?