वितरित लेनदेन शुरू करने में असमर्थ


95

मैं एक जुड़े सर्वर के खिलाफ एसक्यूएल चलाने की कोशिश कर रहा हूं, लेकिन मुझे नीचे त्रुटियां मिलती हैं:

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.

प्रदाता द्वारा दो त्रुटियां दी गई हैं:

त्रुटि # 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

त्रुटि # 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 को सुरक्षा पर कार्यक्षमता के पक्ष में कैसे प्राप्त करूं?

या, कम से कम, मैं एक दूसरे से बात करने के लिए दो एसक्यूएल सेवर कैसे प्राप्त कर सकता हूं?

संबंधित सवाल


मैंने जो किया है वह अप्रासंगिक है, लेकिन मैं इसे वैसे भी पोस्ट करूंगा।

  1. सुनिश्चित करें कि Distributed Transaction Coordinatorसेवा दोनों मशीनरी पर चल रही है:

    यहां छवि विवरण दर्ज करें

    यहां छवि विवरण दर्ज करें

  2. दोनों मशीनों पर सभी MSDTC सुरक्षा अक्षम करें:

    यहां छवि विवरण दर्ज करें

    यहां छवि विवरण दर्ज करें

  3. लिंक किए गए सर्वर पर यादृच्छिक विकल्प चालू करें:

यहां छवि विवरण दर्ज करें

  1. शापित और शपथ।

  2. टूटी हुई चीजें।

  3. जाँच की कि लिंक किए गए सर्वर काSELECT उपयोग कर सकते हैं :

        SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
        ....
    
        (763 row(s) affected)
    
  4. जाँच की कि क्लाइंट सर्वर pingदूरस्थ सर्वर कर सकते हैं :

         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. जाँच की जाती है कि दूरस्थ सर्वर आरंभ करने वाले सर्वर को नाम से वापस भेज सकता है:

         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. जाँच की कि @@SERVERNAMEदोनों सर्वर पर सर्वर नाम से मेल खाता है :

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

    तथा

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       ----------  ----------
       ASIGROBTEST  ASIGROBTEST
    
  7. चिल्लाया

  8. जारी किए गए SET XACT_ABORT ONमेरी क्वेरी जारी करने से पहले :

    SET XACT_ABORT ON
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT TOP 1 * FROM Sessions
    
  9. इसके लिए दी Everyone Full Controlगई :

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

    दोनों सर्वरों पर।


30
यह देखने के लिए अच्छा है कि आपने महत्वपूर्ण "शापित और शपथ" कदम को नहीं छोड़ा है!
jwl

11
@joelarson अरे, कभी-कभी लोग बहुत खास होते हैं कि आप हर कदम पर चलते हैं । मैं नहीं चाहता था कि कोई कहे कि मैंने कुछ करने की कोशिश नहीं की।
इयान बॉयड

5
मुझे यह पोस्ट अच्छी लगी। यह मेरे द्वारा MSDTC के साथ किए गए हर अनुभव को टाइप करता है।
ए। मुर्रे

5
मेरे मामले में, मैंने लिंक किए गए सर्वर पर गलत करने के लिए "आरपीसी के लिए वितरित लेनदेन के संवर्धन को सक्षम करें" सेट करने के बाद, यह काम करता है। शायद कोशिश है कि
सरसापारीला

3
@HaiPhan वितरित लेन-देन के उपयोग को बंद करने से अंतरराष्ट्रीय अखंडता टूट जाती है: यदि आप स्थानीय सर्वर पर अपने परिवर्तनों को रोलबैक करते हैं तो इसका मतलब है कि परिवर्तन दूरस्थ सर्वर पर जगह में रहेंगे। बहूत खतरनाक।
इयान बोयड

जवाबों:


31

यह पाया गया, दूरस्थ सर्वर पर MSDTC स्थानीय सर्वर का क्लोन था।

Windows अनुप्रयोग ईवेंट लॉग से:

इवेंट प्रकार: त्रुटि
इवेंट स्रोत: MSDTC
इवेंट श्रेणी: CM
इवेंट ID: 4101
दिनांक: 9/19/2011
समय: 1:32:59 अपराह्न
उपयोगकर्ता: N / A
कंप्यूटर: ASITESTSERVER
विवरण:

स्थानीय MS DTC ने पाया कि ASICMSTEST पर MS DTC की स्थानीय MS DTC जैसी ही विशिष्ट पहचान है। इसका मतलब यह है कि दो एमएस डीटीसी एक दूसरे के साथ संवाद करने में सक्षम नहीं होंगे। यह समस्या आमतौर पर तब होती है यदि सिस्टम में से एक को असमर्थित क्लोनिंग टूल का उपयोग करके क्लोन किया गया था। MS DTC के लिए आवश्यक है कि सिस्टम को SYSPREP जैसे समर्थित क्लोनिंग टूल्स का उपयोग करके क्लोन किया जाए। कमांड प्रॉम्प्ट से 'msdtc -uninstall' और फिर 'msdtc -install' चलाने से समस्या ठीक हो जाएगी। नोट: 'msdtc -uninstall' चलाने से सिस्टम में सभी MS DTC कॉन्फ़िगरेशन जानकारी खो जाएगी।

अधिक जानकारी के लिए, http://go.microsoft.com/fwlink/events.asp पर सहायता और सहायता केंद्र देखें ।

चल रहा है

msdtc -uninstall
msdtc -install

और फिर SQL सर्वर सेवा को रोकना और पुनः आरंभ करना इसे ठीक करता है।


2
आइए देखें कि क्या मैंने इसे सही पाया है: 1- msdtc -uninstall 2- msdtc -install 3- SQL सर्वर सेवा को पुनरारंभ करें 4- SQL एजेंट सेवा को पुनरारंभ करें, बस यह सुनिश्चित करने के लिए कि 5- "पुनः वितरण लेनदेन समन्वयक" सेवा भी शुरू करें ... मैं दोनों मशीनों (मुख्य सर्वर और जुड़े सर्वर) पर यह सब किया है ~ और कुछ भी नहीं, अभी भी एक ही त्रुटि!
हामिद सादघियन

9

मैं "RPC के लिए वितरित लेन-देन के सक्षम संवर्धन" (यानी इसे सेट करने के लिए सक्षम करके) इस समस्या (टिप्पणियों में वर्णित अन्य के रूप में) को हल करने में सक्षम था (अर्थात False)

यहां छवि विवरण दर्ज करें


1
इसने मेरे लिए काम किया। क्या अजीब है यह हफ्तों के लिए ठीक है, और फिर अचानक शुरू हुआ। संभवतः क्योंकि दूरस्थ सर्वर की DTC सेवा अक्षम हो सकती है। आपका धन्यावाद।
बॉयड पी

6

ठीक है, इसलिए सेवाएं शुरू की गई हैं, उनके बीच एक ईथरनेट पथ है, नाम रिज़ॉल्यूशन कार्य, लिंक किए गए सर्वर काम करते हैं, और आपने लेनदेन प्रमाणीकरण अक्षम किया है।

मेरे पेट में फ़ायरवॉल मुद्दा कहता है, लेकिन कुछ बातें दिमाग में आती हैं ...

  1. क्या मशीनें एक ही डोमेन में हैं? (हाँ, अक्षम प्रमाणीकरण के साथ कोई बात नहीं होनी चाहिए)
  2. क्या मशीनों पर फायरवॉल चल रही है? डीटीसी फायरवॉल के लिए थोड़ा दर्द हो सकता है क्योंकि यह बंदरगाहों की एक श्रृंखला का उपयोग करता है, देखें http://support.microsoft.com/kb/306843 फिलहाल , मैं समस्या की पहचान करने के लिए फ़ायरवॉल को अक्षम कर दूंगा
  3. क्या कहते हैं डीटीसी पिंग? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. SQL सेवा किस खाते के रूप में चल रही है?

2

यदि सर्वरों को क्लस्टर किया गया है और एक क्लस्टर डीटीसी है, तो आपको स्थानीय डीटीसी नहीं बल्कि क्लस्टर डीटीसी पर सुरक्षा को निष्क्रिय करना होगा।


1

यदि आपका गंतव्य सर्वर किसी अन्य क्लाउड या डेटा-केंद्र पर है, तो अपने स्रोत सर्वर में MSDTC सेवा (गंतव्य सर्वर) के होस्ट-प्रवेश को जोड़ने की आवश्यकता है ।

यदि MSDTC सेटिंग सक्षम करने के बाद समस्या हल नहीं होती है, तो इसे आज़माएँ।


1

मेरे लिए, यह फ़ायरवॉल सेटिंग से संबंधित है। अपनी फ़ायरवॉल सेटिंग पर जाएं, DTC Service को अनुमति दें और यह काम करे।यहां छवि विवरण दर्ज करें


0

MSDTC के साथ मेरा अंतिम साहसिक कार्य और यह त्रुटि आज DNS मुद्दा बन गई। आप सही ट्रैक पर पूछ रहे हैं कि क्या मशीनें एक ही डोमेन, EBarr पर हैं। इस मुद्दे के लिए भयानक सूची, वैसे!

मेरी स्थिति: मुझे फ़ायरवॉल के माध्यम से मूल डोमेन में सर्वर के विरुद्ध वितरित लेनदेन चलाने में सक्षम होने के लिए चाइल्ड डोमेन में एक सर्वर की आवश्यकता थी। मैंने पिछले कुछ वर्षों में लिंक्ड सर्वरों का उपयोग किया है, इसलिए मेरे पास SQL ​​में सभी सामान्य सेटिंग्स एक लिंक्ड सर्वर के लिए और MSDTC में है जो कि Ian ने इतनी अच्छी तरह से प्रलेखित किया था। मैंने दोनों सर्वरों पर उपयोग करने के लिए टीसीपी पोर्ट (5000-5200) की एक सीमा के साथ MSDTC की स्थापना की, और बंदरगाहों 1433 और 5000-5200 के लिए बक्से के बीच एक फ़ायरवॉल छेद की व्यवस्था की। जो काम करना चाहिए था। लिंक किए गए सर्वर ने ठीक परीक्षण किया और मैं दूरस्थ SQL सर्वर को लिंक किए गए सर्वर के माध्यम से अच्छी तरह से क्वेरी कर सकता हूं, लेकिन मैं इसे वितरित लेनदेन की अनुमति नहीं दे सकता। मैं DEA सर्वर से QA सर्वर पर एक कनेक्शन भी देख सकता था, लेकिन कुछ यात्रा को वापस नहीं बना रहा था।

मैं क्यूए से डीईवी सर्वर को एक एफक्यूडीएन का उपयोग कर सकता है जैसे: पिंग DEVSQL.dev.domain.com

मैं सिर्फ मशीन के नाम के साथ DEV सर्वर को पिंग नहीं कर सका: पिंग DEVSQL

DEVSQL सर्वर को दोनों डोमेन का सदस्य माना जाता था, लेकिन मूल डोमेन के DNS में नाम हल नहीं हो रहा था ... मूल डोमेन में DEVSQL के लिए मशीन खाते में कुछ हुआ था। एक बार जब हमने मूल डोमेन के लिए DNS में DEVSQL को जोड़ दिया, और रिमोट क्यूए सर्वर से "पिंग DEVSQL" ने काम किया, तो यह समस्या हमारे लिए हल हो गई।

आशा है कि ये आपकी मदद करेगा!


0

सुरक्षा सेटिंग्स के अलावा, मुझे लेन-देन चलाने के लिए दोनों सर्वरों पर कुछ पोर्ट खोलने थे। मुझे पोर्ट 59640 खोलना था लेकिन निम्नलिखित सुझाव के अनुसार, पोर्ट 135 को खोलना होगा। http://support.microsoft.com/kb/839279


0

मुझे वही त्रुटि मिल रही थी और मैं आउटबाउंड की अनुमति देने के लिए स्रोत सर्वर पर MSDTC को ठीक से कॉन्फ़िगर करके इसे हल करने में कामयाब रहा और विंडोज़ फ़ायरवॉल के माध्यम से डीटीसी को अनुमति दी।

वितरित लेनदेन समन्वयक को अनुमति दें, डोमेन, निजी और सार्वजनिक विकल्पों पर टिक करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.