24

को पुनर्स्थापित करने के बाद ब्रोकर को सक्षम करना मेरे पास सक्षम सेवा ब्रोकर के साथ डेटाबेस है। तब मैं अन्य डेटाबेस के बैकअप से कार्यक्रम में मेरी डेटाबेस पुनर्स्थापित करना चाहते हैं, लेकिन बहाल (मैं मौजूदा डेटाबेस नाम पर बहाल) के बाद, मेरे विधि, whitch सेवा ब्रोकर सक्षम बनाता है, इस त्रुटि कहते हैं:एसक्यूएल सर्वर डेटाबेस

Msg 9772, Level 16, State 1, Line 1 
The Service Broker in database "ServeDB2" cannot be enabled because there is already an enabled Service Broker with the same ID. 
Msg 5069, Level 16, State 1, Line 1 
ALTER DATABASE statement failed. 

यह मेरा तरीका है :

public void TurnOnBroker() 
{ 
    if (!this.database.BrokerEnabled) 
    { 
     this.server.KillAllProcesses(this.database.Name); 
     this.database.BrokerEnabled = true; 
     this.database.Alter(); 
     RefreshConnection(); 
    } 
} 

मुझे यहां क्या तय करना चाहिए? कोई सुझाव?

उत्तर

5

मैंने पाया कि, के लिए एक बहुत ही सरल समाधान सिर्फ नई सेवा दलाल आवंटित simlpy, इस तरह:

public void TurnOnBroker() 
    { 
     if (!this.database.BrokerEnabled) 
     { 
      this.server.KillAllProcesses(this.database.Name); 

      string brokerCommand = String.Format("ALTER DATABASE {0} SET NEW_BROKER", this.database.Name); 
      this.database.ExecuteNonQuery(brokerCommand); 

      RefreshConnection(); 
     } 
    } 
+0

प्रक्रियाओं हत्या कामोत्तेजक है और हत्या जरूरी तत्काल नहीं है। 'रोलबैक तत्काल' के साथ बेहतर उपयोग करें। – usr

8

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

अधिक जानकारी के लिए here देखें।

57

इन विकल्पों

ALTER DATABASE mydb SET ENABLE_BROKER 

ALTER DATABASE mydb SET DISABLE_BROKER 

ALTER DATABASE mydb SET NEW_BROKER 

का एक नोट यदि आप हो रही कुछ इस तरह है रखना पहले से ही एक ही आईडी के साथ एक सक्षम सेवा ब्रोकर, NEW_BROKER

20
ALTER DATABASE [Database_name] SET NEW_BROKER WITH ROLLBACK IMMEDIATE; 

यह होगा नई सेवा ब्रोकर

0

यह क्वेरी चलाने के लिए यह पता लगाएं कि कौन से अन्य डेटाबेस उसी सेवा ब्रोकर का उपयोग कर रहे हैं, जिसका उपयोग आप कर रहे हैं (उदा। एक डेटाबेस Database_Name) कहा जाता है ...

SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases 
WHERE service_broker_guid IN (SELECT service_broker_guid FROM sys.databases where name = 'DATABASE_NAME'); 

... रिटर्न ...

name, is_broker_enabled, service_broker_guid 
DATABASE_NAME_OTHER, 1, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV 
DATABASE_NAME_ANOTHER, 0, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV 
DATABASE_NAME, 0, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV 

फिर अपने डेटाबेस के लिए एक नया दलाल प्राप्त करने के लिए निम्न क्वेरी चला ... के लिए

ALTER DATABASE DATABASE_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
ALTER DATABASE DATABASE_NAME SET NEW_BROKER; 
ALTER DATABASE DATABASE_NAME SET MULTI_USER; 

पहली क्वेरी फिर से चलाने के लिए और अपने डेटाबेस सूची में केवल एक होना चाहिए ...

SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases 
WHERE service_broker_guid IN (SELECT service_broker_guid FROM sys.databases where name = 'DATABASE_NAME'); 

... अब रिटर्न ...

name, is_broker_enabled, service_broker_guid 
DATABASE_NAME, 1, ASJCBUHBC-7UIOSUI-IUGGUI87-IUGHUIG 
संबंधित मुद्दे