2009-09-17 9 views
9

मुझे अपने एप्लिकेशन से डेटाबेस पुनर्स्थापना करने की आवश्यकता है। ऐसा करने से पहले, मैं सभी प्रक्रियाओं को बंद करना चाहते हैं इस प्रकार है:KillAllProcesses को निष्पादित करते समय सर्वर के लिए सभी सक्रिय डेटाबेस कनेक्शन विफल हो गए

Microsoft.SqlServer.Management.Smo.FailedOperationException:

private void KillAllProcessesOnSMARTDatabases(Server targetServer) 
    { 
     targetServer.KillAllProcesses(SMART_DB); 
     targetServer.KillAllProcesses(SMART_HISTORY_DB); 
     targetServer.KillAllProcesses(SMART_METADATA_DB); 
     SqlConnection.ClearAllPools(); 
    } 

हालांकि, जब पहली KillAllProcesses चलाया जाता है, मैं निम्नलिखित अपवाद : सर्वर 'MYServer' के लिए सभी सक्रिय डेटाबेस कनेक्शन विफल हो गए। ---> माइक्रोसॉफ्ट.SqlServer.Management.Common.ExecutionFailureException: एक ट्रांजैक्ट-एसक्यूएल कथन या बैच निष्पादित करते समय एक अपवाद हुआ। ---> System.Data.SqlClient.SqlException: केवल उपयोगकर्ता प्रक्रियाओं को मार दिया जा सकता है।

सर्वर बनाने के लिए उपयोग की जाने वाली कनेक्शन स्ट्रिंग में प्रमाण-पत्र हैं, हालांकि, जिन प्रक्रियाओं को समाप्त करने की आवश्यकता है उन्हें एक अलग उपयोगकर्ता के तहत शुरू किया जाता है। मैंने इसी परिदृश्य का परीक्षण किया और परीक्षण सफल हुआ।

यह हाल ही में हो रहा है। मेरे लिए ऐसा लगता है कि कुछ प्रक्रियाएं चल रही हैं जो उपयोगकर्ता द्वारा शुरू नहीं की गई हैं?

उत्तर

10

ऐसा लगता है कि आपका कोड सभी SQL सर्वर प्रक्रियाओं को समाप्त करने का प्रयास कर रहा है, जो एक अच्छा विचार नहीं है।

यदि आप डेटाबेस पुनर्स्थापना करना चाहते हैं, तो आपको डेटाबेस को प्रश्न में एकल_user मोड या RESTRICTED_USER मोड में सेट करना चाहिए, बाद में सबसे उपयुक्त होना चाहिए।

RESTRICTED_USER मोड के लिए एक डेटाबेस स्विचिंग और कैसे इस प्रक्रिया में किसी भी खुले उपयोगकर्ता कनेक्शन बंद करने के लिए की following example पर एक नजर डालें।

How to: Set a Database to Single-User mode

-1

आप एक विशेष डेटाबेस "मारने" के लिए एसएमओ उपयोग कर सकते हैं। यह केवल उस डेटाबेस के सभी क्लाइंट कनेक्शन की बूंद को मजबूर करेगा और फिर डेटाबेस को छोड़ देगा।

Microsoft.SqlServer.Management.Smo.Server oServer = this.GetSmoServer(); 
oServer.KillDatabase(this.DatabaseName); 
+10

और डेटाबेस छोड़ें! जानना महत्वपूर्ण बात है ... – Guillaume86

संबंधित मुद्दे