Dağıtılmış bir işlem başlatılamıyor


97

SQL'i bağlantılı bir sunucuya karşı çalıştırmaya çalışıyorum, ancak aşağıdaki hataları alıyorum:

BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions


OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".

Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.

Sağlayıcı tarafından döndürülen iki hata var:

Hata 1:

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile: 
HelpContext: $00000000
SQLState: 01000
NativeError: 7412

Hata 2

Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile: 
HelpContext: $00000000
SQLState: 42000
NativeError: 7391

Microsoft'un güvenlik yerine işlevselliği tercih etmesini nasıl sağlayabilirim?

Ya da en azından iki SQL Server'ın birbiriyle konuşmasını nasıl sağlayabilirim?

İlgili sorular


Ne var bitmiş alakasız, ama yine de göndeririz.

  1. Distributed Transaction CoordinatorServisin her iki makinede de çalıştığından emin olun :

    görüntü açıklamasını buraya girin

    görüntü açıklamasını buraya girin

  2. Her iki makinede de tüm MSDTC güvenliğini devre dışı bırakın:

    görüntü açıklamasını buraya girin

    görüntü açıklamasını buraya girin

  3. Bağlı sunucuda rastgele seçenekleri açın:

görüntü açıklamasını buraya girin

  1. Lanetli ve yeminli.

  2. Parçalanmış şeyler.

  3. A'nın bağlantılı sunucuyuSELECT kullanıp kullanamayacağı kontrol edildi :

        SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
        ....
    
        (763 row(s) affected)
    
  4. İstemci sunucusunun pinguzak sunucuyu yapıp yapamayacağı kontrol edildi :

         C:\Documents and Settings\avatar>ping asicmstest.contoso.com
    
         Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data:
    
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.40: bytes=32 time<1ms TTL=128
    
         Ping statistics for 10.0.0.40:
             Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
         Approximate round trip times in milli-seconds:
             Minimum = 0ms, Maximum = 0ms, Average = 0ms
    
  5. Uzak sunucunun başlatan sunucuya adla geri iletişim kurabildiği kontrol edildi:

         C:\Documents and Settings\avatar>ping asitestserver.contoso.com
    
         Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data:
    
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
         Reply from 10.0.0.22: bytes=32 time<1ms TTL=128
    
         Ping statistics for 10.0.0.22:
             Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
         Approximate round trip times in milli-seconds:
             Minimum = 0ms, Maximum = 0ms, Average = 0ms
    
  6. O İşaretli @@SERVERNAMEher iki sunucuda sunucu adı ile eşleşen :

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       -------------  -------------
       ASITESTSERVER  ASITESTSERVER
    

    ve

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       ----------  ----------
       ASIGROBTEST  ASIGROBTEST
    
  7. Çığlık attı

  8. Sorgumu SET XACT_ABORT ONyayınlamadan önce verildi :

    SET XACT_ABORT ON
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT TOP 1 * FROM Sessions
    
  9. Verilen Everyone Full Controliçin :

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
    

    her iki sunucuda da.


32
Çok önemli olan "lanetli ve küfürlü" adımını atlamadığınızı görmek güzel!
jwl

11
@joelarson Hey, bazen insanlar her adımı takip ettiğiniz için çok titizler . kimsenin bir şey denemediğimi söylemesini istemedim.
Ian Boyd

5
Bu gönderiyi seviyorum. MSDTC ile yaşadığım her deneyimin tipik bir örneği.
A. Murray

5
Benim durumumda, bağlı sunucuda "RPC için Dağıtılmış İşlemlerin Promosyonunu Etkinleştir" seçeneğini Yanlış olarak ayarladıktan sonra çalışıyor. Belki deneyin
Sarsaparilla

3
@HaiPhan Dağıtılmış işlemlerin kullanımının kapatılması ulusötesi bütünlüğü bozar: yerel sunucudaki değişikliklerinizi geri alırsanız, değişikliklerin uzak sunucuda yerinde kalacağı anlamına gelir. Çok tehlikeli.
Ian Boyd

Yanıtlar:


31

Buldum, uzak sunucudaki MSDTC yerel sunucunun bir kopyasıydı.

Windows Uygulama Olayları Günlüğünden:

Olay Türü: Hata
Olay Kaynağı: MSDTC
Olay Kategorisi: CM
Olay Kimliği: 4101
Tarih
: 9/19/2011 Saat: 13:32:59
Kullanıcı: Yok
Bilgisayar: ASITESTSERVER
Açıklama:

Yerel MS DTC, ASICMSTEST üzerindeki MS DTC'nin yerel MS DTC ile aynı benzersiz kimliğe sahip olduğunu tespit etti. Bu, iki MS DTC'nin birbiriyle iletişim kuramayacağı anlamına gelir. Bu sorun tipik olarak, sistemlerden biri desteklenmeyen klonlama araçları kullanılarak klonlandıysa oluşur. MS DTC, sistemlerin SYSPREP gibi desteklenen klonlama araçları kullanılarak klonlanmasını gerektirir. Komut isteminden 'msdtc -uninstall' ve ardından 'msdtc -install' komutunu çalıştırmak sorunu çözecektir. Not: 'msdtc -uninstall' komutunun çalıştırılması, sistemin tüm MS DTC yapılandırma bilgilerini kaybetmesine neden olur.

Daha fazla bilgi için http://go.microsoft.com/fwlink/events.asp adresindeki Yardım ve Destek Merkezi'ne bakın .

Koşu

msdtc -uninstall
msdtc -install

ve sonra SQL Server hizmetini durdurup yeniden başlatmak sorunu çözdü.


2
Bakalım doğru mu anladım: 1- msdtc -uninstall 2- msdtc -install 3- SQL Server hizmetini yeniden başlat 4- SQL Agent hizmetini yeniden başlat, 5- hatta "Distributed Transaction Coordinator" hizmetini yeniden başlattığımdan emin ol ... Tüm bunları her iki makinede de yaptım (ana sunucu ve bağlantılı sunucu) a ~ ve hiçbir şey, yine de aynı hata!
Hamid Sadeghian

11

Bu sorunu (diğer yorumlarda belirtildiği gibi) "RPC için Dağıtılmış İşlemlerin Promosyonunu Etkinleştir" seçeneğini devre dışı bırakarak (yani şu şekilde ayarlayarak False) çözebildim :

görüntü açıklamasını buraya girin

@WonderWorker tarafından talep edildiği gibi, bunu SQL betiği aracılığıyla yapabilirsiniz:

EXEC master.dbo.sp_serveroption
     @server = N'[mylinkedserver]',
     @optname = N'remote proc transaction promotion',
     @optvalue = N'false'

1
Bu benim için çalıştı. Garip olan, haftalardır iyi geçmesi ve sonra aniden başlaması. Muhtemelen uzak sunucunun DTC hizmeti devre dışı bırakılabileceğinden. Her neyse, teşekkürler.
Boyd P

1
Parlak. Bunu senaryo yazmanın bir yolunu biliyor musun? Tüm sunucularımda, tüm bağlantılı sunucu nesneleri Dağıtılmış İşlemlerin Promosyonunu Etkinleştir doğru ayarına sahipti ve bunu kimin yaptığını henüz bulamadım. Geçmek çok sıkıcı.
mucizeler

1
@WonderWorker Kullanabileceğiniz örnek bir SQL betiği ekledim, bir şans verin!
Steve Bauman

6

Tamam, böylece hizmetler başlatıldı, aralarında bir ethernet yolu var, ad çözümleme çalışıyor, bağlantılı sunucular çalışıyor ve işlem kimlik doğrulamasını devre dışı bıraktınız.

Bağırsağım güvenlik duvarı sorunu diyor ama akla birkaç şey geliyor ...

  1. Makineler aynı etki alanında mı? (evet, kimlik doğrulamasının devre dışı bırakılması önemli olmamalı)
  2. Makinelerde güvenlik duvarları çalışıyor mu? DTC, bir dizi bağlantı noktası kullandığından güvenlik duvarları için biraz acı verici olabilir, bkz. Http://support.microsoft.com/kb/306843 Şimdilik, sorunu tanımlamak adına güvenlik duvarlarını devre dışı bırakıyorum
  3. DTC pingi ne diyor? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. SQL Hizmeti hangi hesap olarak çalışıyor?

2

Sunucular kümelenmişse ve kümelenmiş bir DTC varsa, yerel DTC'de değil kümelenmiş DTC'de güvenliği devre dışı bırakmanız gerekir.


1

Hedef sunucunuz başka bir bulut veya veri merkezindeyse , kaynak sunucunuza MSDTC hizmetinin ana bilgisayar girişini (Hedef Sunucu) eklemeniz gerekir .

MSDTC ayarlarını etkinleştirdikten sonra, sorun çözülmezse bunu deneyin.


1

Benim için Güvenlik Duvarı ayarıyla ilgili. Güvenlik duvarı ayarınıza gidin, DTC Hizmetine izin verin ve işe yaradı.görüntü açıklamasını buraya girin


0

MSDTC ile son maceram ve bugün bu hata bir DNS sorunu olarak ortaya çıktı. Makinelerin aynı alanda olup olmadığını soran doğru yoldasınız, EBarr. Bu arada, bu sorun için harika bir liste!

Durumum: Bir güvenlik duvarı aracılığıyla üst etki alanındaki bir sunucuya karşı dağıtılmış işlemleri yürütebilmek için alt etki alanında bir sunucuya ihtiyacım vardı. Yıllar boyunca bağlantılı sunucuları epeyce kullandım, bu nedenle bağlı bir sunucu için SQL'de ve Ian'ın yukarıda çok güzel bir şekilde belgelediği MSDTC'de tüm olağan ayarları yaptım. MSDTC'yi her iki sunucuda da kullanmak için bir dizi TCP bağlantı noktasıyla (5000-5200) kurdum ve 1433 ve 5000-5200 bağlantı noktaları için kutular arasında bir güvenlik duvarı deliği oluşturdum. Bu işe yaramalıydı. Bağlantılı sunucu TAMAM'ı test etti ve uzak SQL sunucusunu bağlantılı sunucu üzerinden güzelce sorgulayabildim, ancak dağıtılmış bir işleme izin vermesini sağlayamadım. QA sunucusunda DEV sunucusundan bir bağlantı görebiliyordum, ancak bir şey geri dönüşü sağlamıyordu.

PING DEVSQL.dev.domain.com gibi bir FQDN kullanarak KG'den DEV sunucusuna PING uygulayabilirim

DEV sunucusuna sadece makine adıyla PING atamadım: PING DEVSQL

DEVSQL sunucusunun her iki etki alanının da üyesi olması gerekiyordu, ancak ad ana etki alanının DNS'sinde çözülmüyordu ... ana etki alanındaki DEVSQL için makine hesabına bir şey oldu. DEVSQL'i ana etki alanı için DNS'ye ekledikten ve uzak QA sunucusundan "PING DEVSQL" çalıştığında, bu sorun bizim için çözüldü.

Umarım bu yardımcı olur!


0

Güvenlik ayarlarının yanı sıra, işlemin çalışması için her iki sunucuda da bazı portları açmam gerekiyordu. 59640 numaralı bağlantı noktasını açmam gerekiyordu ancak aşağıdaki öneriye göre 135 numaralı bağlantı noktasının açık olması gerekiyor. http://support.microsoft.com/kb/839279


0

Ben de aynı hatayı alıyordum ve MSDTC'yi kaynak sunucuda doğru şekilde yapılandırarak, gidenlere izin vererek ve Windows güvenlik duvarından DTC'ye izin vererek çözmeyi başardım.

Dağıtılmış İşlem Koordinatörüne izin verin, etki alanını işaretleyin, özel ve genel seçenekleri işaretleyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.