Unable to begin a distributed transaction

后端 未结 9 1310
走了就别回头了
走了就别回头了 2020-11-28 23:18

I\'m trying to run SQL against a linked server, but I get the errors below :

BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions


OLE DB provider &quo         


        
相关标签:
9条回答
  • 2020-11-28 23:27

    I was able to resolve this issue (as others mentioned in comments) by disabling "Enable Promotion of Distributed Transactions for RPC" (i.e. setting it to False):

    As requested by @WonderWorker, you can do this via SQL script:

    EXEC master.dbo.sp_serveroption
         @server = N'[mylinkedserver]',
         @optname = N'remote proc transaction promotion',
         @optvalue = N'false'
    
    0 讨论(0)
  • 2020-11-28 23:32

    OK, so services are started, there is an ethernet path between them, name resolution works, linked servers work, and you disabled transaction authentication.

    My gut says firewall issue, but a few things come to mind...

    1. Are the machines in the same domain? (yeah, shouldn't matter with disabled authentication)
    2. Are firewalls running on the the machines? DTC can be a bit of pain for firewalls as it uses a range of ports, see http://support.microsoft.com/kb/306843 For the time being, I would disable firewalls for the sake of identifying the problem
    3. What does DTC ping say? http://www.microsoft.com/download/en/details.aspx?id=2868
    4. What account is the SQL Service running as ?
    0 讨论(0)
  • 2020-11-28 23:34

    My last adventure with MSDTC and this error today turned out to be a DNS issue. You're on the right track asking if the machines are on the same domain, EBarr. Terrific list for this issue, by the way!

    My situation: I needed a server in a child domain to be able to run distributed transactions against a server in the parent domain through a firewall. I've used linked servers quite a bit over the years, so I had all the usual settings in SQL for a linked server and in MSDTC that Ian documented so nicely above. I set up MSDTC with a range of TCP ports (5000-5200) to use on both servers, and arranged for a firewall hole between the boxes for ports 1433 and 5000-5200. That should have worked. The linked server tested OK and I could query the remote SQL server via the linked server nicely, but I couldn't get it to allow a distributed transaction. I could even see a connection on the QA server from the DEV server, but something wasn't making the trip back.

    I could PING the DEV server from QA using a FQDN like: PING DEVSQL.dev.domain.com

    I could not PING the DEV server with just the machine name: PING DEVSQL

    The DEVSQL server was supposed to be a member of both domains, but the name wasn't resolving in the parent domain's DNS... something had happened to the machine account for DEVSQL in the parent domain. Once we added DEVSQL to the DNS for the parent domain, and "PING DEVSQL" worked from the remote QA server, this issue was resolved for us.

    I hope this helps!

    0 讨论(0)
  • 2020-11-28 23:39

    Apart from the security settings, I had to open some ports on both servers for the transaction to run. I had to open port 59640 but according to the following suggestion, port 135 has to be open. http://support.microsoft.com/kb/839279

    0 讨论(0)
  • 2020-11-28 23:41

    I was getting the same error and i managed to solve it by configuring the MSDTC properly on the source server to allow outbound and allowed the DTC through the windows firewall.

    Allow the Distributed Transaction Coordinator, tick domain , private and public options

    0 讨论(0)
  • 2020-11-28 23:43

    Found it, MSDTC on the remote server was a clone of the local server.

    From the Windows Application Events Log:

    Event Type: Error
    Event Source: MSDTC
    Event Category: CM
    Event ID: 4101
    Date: 9/19/2011
    Time: 1:32:59 PM
    User: N/A
    Computer: ASITESTSERVER
    Description:

    The local MS DTC detected that the MS DTC on ASICMSTEST has the same unique identity as the local MS DTC. This means that the two MS DTC will not be able to communicate with each other. This problem typically occurs if one of the systems were cloned using unsupported cloning tools. MS DTC requires that the systems be cloned using supported cloning tools such as SYSPREP. Running 'msdtc -uninstall' and then 'msdtc -install' from the command prompt will fix the problem. Note: Running 'msdtc -uninstall' will result in the system losing all MS DTC configuration information.

    For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

    Running

    msdtc -uninstall
    msdtc -install
    

    and then stopping and restarting SQL Server service fixed it.

    0 讨论(0)
提交回复
热议问题