2013-09-23 8 views
132

वर्तमान में, मेरा डेटाबेस एकल उपयोगकर्ता मोड में है।एकल-उपयोगकर्ता मोड से बाहर निकलें

The database 'my_db' is not accessible.(ObjectExplorer)

इसके अलावा, जब मैं डेटाबेस को हटाने का प्रयास है, मैं त्रुटि मिलती है:

Changes to the state or options of database 'my_db' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.

मैं कैसे एकल से बाहर चले जाते हैं जब मैं मेरे डेटाबेस का विस्तार करने का प्रयास करें, मैं कोई त्रुटि मिलती है उपयोगकर्ता मोड? मेरे पास इस डेटाबेस का उपयोग करने वाला कोई उपयोगकर्ता नहीं है।

जब मैं आईआईएस के साथ मेरी साइट ब्राउज़ करने के लिए प्रयास करते हैं, त्रुटि मैं मिलता है:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

मैं लगता है मानो एकल उपयोगकर्ता मोड इस खड़ी कर रहा है।

उत्तर

249

SSMS कई कनेक्शन का उपयोग करता है दृश्यों के पीछे डेटाबेस के लिए।

एक्सेस मोड को बदलने से पहले आपको इन कनेक्शनों को मारने की आवश्यकता होगी।

सबसे पहले, सुनिश्चित करें कि ऑब्जेक्ट एक्सप्लोरर मास्टर जैसे सिस्टम डेटाबेस की ओर इशारा करता है।

दूसरा, sp_who2 निष्पादित करें और डेटाबेस 'my_db' के सभी कनेक्शन ढूंढें। KILL { session id } करके सभी कनेक्शन को मार दें जहां सत्र आईडी sp_who2 द्वारा सूचीबद्ध है।

तीसरा, एक नई क्वेरी विंडो खोलें।

निम्न कोड निष्पादित करें।

-- Start in master 
USE MASTER; 

-- Add users 
ALTER DATABASE [my_db] SET MULTI_USER 
GO 

डेटाबेस फ़ाइलों के प्रबंधन पर मेरे blog article देखें। यह फ़ाइलों को स्थानांतरित करने के लिए लिखा गया था, लेकिन उपयोगकर्ता प्रबंधन एक ही है।

+0

जब मैंने 'sp_who2' कमांड का उपयोग किया, तो मुझे 'my_db' से जुड़े किसी भी DBName को नहीं देखा, मैंने उन कनेक्शनों में से किसी को भी मार नहीं दिया। आदेशों को चलाने के बाद मुझे एक ही त्रुटि मिलती है = [: 'राज्य में परिवर्तन या डेटाबेस के विकल्प' my_db 'इस समय नहीं बनाया जा सकता है। डेटाबेस एकल-उपयोगकर्ता मोड में है, और उपयोगकर्ता वर्तमान में उससे जुड़ा हुआ है। संदेश 5069, स्तर 16, राज्य 1, रेखा 1 वैकल्पिक डेटाबैक कथन विफल रहा ' – Liondancer

+2

क्या आप सुनिश्चित करते हैं कि आप मास्टर में हैं, sp_who2 डेटाबेस = my_db के साथ कोई पंक्ति नहीं दिखाता है, और आपका ऑब्जेक्ट एक्सप्लोरर my_db पर नहीं है। –

+1

एसएसएमएस को डिस्कनेक्ट करने और कनेक्ट करने का प्रयास करें। उस डेटाबेस से कुछ जुड़ा होना चाहिए। दूसरा विकल्प समर्पित व्यवस्थापक कंसोल (डीएसी) से जुड़ना है। यह मानता है कि आप एक sysadmin हैं। फिर अपमानजनक स्पिड को मार डालो। –

17

एकल उपयोगकर्ता मोड से बाहर जाने के लिए, कोशिश:

ALTER DATABASE [my_db] SET MULTI_USER

वापस एकल उपयोगकर्ता मोड में स्विच करने के लिए, आप का उपयोग कर सकते हैं: सामान्य रूप में

ALTER DATABASE [my_db] SET SINGLE_USER

+0

मैं त्रुटि मिलती है dbname और spid स्तंभ

अब अमल खोजें: 'राज्य में किए गए परिवर्तन या डेटाबेस 'my_db' के विकल्प इस समय नहीं किए जा सकते हैं। डेटाबेस एकल-उपयोगकर्ता मोड में है, और उपयोगकर्ता वर्तमान में उससे जुड़ा हुआ है। संदेश 5069, स्तर 16, राज्य 1, रेखा 1 वैकल्पिक डाटाबेस स्टेटमेंट विफल रहा। ' – Liondancer

+1

क्या आप डेटाबेस को रोक और पुनरारंभ कर सकते हैं (जाहिर है यदि यह एक उत्पादन प्रणाली नहीं है जो अन्य उपयोगकर्ताओं को प्रभावित करेगी), और फिर आदेश को पुनः प्रयास करें? और @CRAFTYDBA के रूप में कहा गया है कि कमांड मास्टर डेटाबेस से निष्पादित किया जाना चाहिए। – rsbarro

+1

मैंने 'सिस्टम डेटाबेस' का विस्तार किया और 'मास्टर' पर राइट क्लिक किया और 'नई क्वेरी' चुना और दोनों और @ CRAFTYDBA के कमांड में प्रयास किया। वही त्रुटि = [ – Liondancer

5

सुनिश्चित नहीं है कि यह किसी की मदद करता है, लेकिन मुझे एक ही समस्या थी और मुझे पकड़ने वाली प्रक्रिया नहीं मिल सका। मैंने एसएसएमएस बंद कर दिया और स्थानीय घटनाओं को मारने वाली सभी सेवाओं को रोक दिया। फिर एक बार जब मैं वापस गया और exec sp_who2 चला गया, तो उसने मुझे अपराधी दिखाया। मैंने प्रक्रिया को मार दिया और मल्टी_उसर को काम करने में सक्षम था, फिर सेवाओं को पुनरारंभ करें। हमने आईआईएस को कुछ पैकेजों की तलाश में हर कुछ मिनट/सेकंड मार दिया था।

12

मैंने कोशिश की यह काम कर रहा है

ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE 
1

यहां तक ​​कि मैं एक ही समस्या का सामना करना है, यह मारने के लिए my_db को सक्रिय कनेक्शन नहीं मिल पाई, लेकिन अभी भी एक ही त्रुटि दिखाता है। मैं सर्वर पर किसी भी डेटाबेस के लिए सभी संभावित एसएसएमएस कनेक्शन डिस्कनेक्ट करना समाप्त करता हूं, एसएसएमएस से नया कनेक्शन बनाता हूं और इसे बहु उपयोगकर्ता में बदलता हूं।

-- Actual Code to change my_db to multi user mode 
USE MASTER; 
GO 
ALTER DATABASE [my_db] SET MULTI_USER 

नोट: यह SQL सर्वर 2005 में एक संभावित बग प्रतीत होता है!

3

मैं आज सुबह एक ही मुद्दे पर भाग गया। यह एक साधारण मुद्दा साबित हुआ। मेरे पास एक क्वेरी विंडो खुल गई थी जिसे ऑब्जेक्ट एक्सप्लोरर में एकल उपयोगकर्ता डेटाबेस पर सेट किया गया था। Sp_who2 संग्रहीत प्रक्रिया तब कनेक्शन नहीं दिखाया गया था। एक बार मैं इसे बंद कर दिया है, मैं मेरे लिए काम किया निम्नलिखित

7

के लिए सेट करने में सक्षम था:

USE [master] 
SET DEADLOCK_PRIORITY HIGH 
exec sp_dboption '[StuckDB]', 'single user', 'FALSE'; 
ALTER DATABASE [StuckDB] SET MULTI_USER WITH NO_WAIT 
ALTER DATABASE [StuckDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE 
1

हम सिर्फ एसक्यूएल 2012 में यह अनुभव एक प्रतिकृति प्रक्रिया में कूद गया जब हम मूल सत्र की हत्या कर दी है कि इसे एकल उपयोगकर्ता पर सेट करें। लेकिन sp_who2 ने डीबी से जुड़ी नई प्रक्रिया नहीं दिखायी। एसएसएमएस बंद करने और फिर से खोलने के बाद हमें डेटाबेस पर इस प्रक्रिया को देखने की इजाजत मिली और फिर हम इसे मार सकते हैं और मल्टी_सर मोड पर तुरंत स्विच कर सकते हैं और यह काम करता है।

मैं इस के पीछे तर्क काम नहीं कर सकते हैं, लेकिन यह SSMS में एक बग प्रतीत होता है और अभी भी एसक्यूएल में खुद को प्रकट कर रहा है 2012

7

मैं एक ही समस्या थी, और session_id मारने ही वाला था इस क्वेरी का उपयोग कर पाया:

Select request_session_id From sys.dm_tran_locks Where resource_database_id=DB_ID('BI_DB_Rep'); 
+0

यह सही था। अजीब एसपीआईडी ​​मिला और डीबी वापस ऑनलाइन मिला। बहुत धन्यवाद! –

19

पहले, खोजने के लिए और KILL सभी प्रक्रियाओं है कि वर्तमान में चल रहा।

फिर, T-SQL को MULTI_USER मोड में डेटाबेस सेट करने के लिए निम्न T-SQL चलाएं।

USE master 
GO 
DECLARE @kill varchar(max) = ''; 
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; ' 
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>') 
EXEC(@kill); 

GO 
SET DEADLOCK_PRIORITY HIGH 
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT 
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE 
GO 
6

प्रेस CTRL + 1

प्रक्रिया है कि अपने डेटाबेस ताले पाते हैं। अपने डीबी के लिए कॉलम dbname में देखें और स्पिड नोट करें।

kill <your spid> 
ALTER DATABASE <your db> SET MULTI_USER; 
+0

CTRL + 1 एक बहुत ही आसान शॉर्टकट है जिसे मैं नहीं जानता था! –

2

एक अन्य विकल्प के लिए है:: अब आप उस वक्तव्य पर अमल करने के लिए है

  • डेटाबेस ऑफ़लाइन ले; SMSS में, सही डेटाबेस क्लिक करें और ऑफलाइन ले लो, टिकटिक 'ड्रॉप सभी कनेक्शनों'
  • रन ALTER DATABASE [Your_Db] SET MULTI_USER
+0

मेरा मुझे इसे ऑफ़लाइन नहीं जाने देगा, यह सिर्फ यह कहता है कि यह एकल उपयोगकर्ता मोड में था और उपयोगकर्ता कनेक्ट था! (हाँ, मैंने "सभी कनेक्शन ड्रॉप" टिक किया था)। मैं इसके बजाय डेटाबेस को अलग करना समाप्त कर दिया! – TabbyCool

6
  1. सही डेटाबेस अनुभाग में अपने डेटाबेस क्लिक
  2. चुनें "गुण"
  3. "का चयन करें विकल्प "पृष्ठ
  4. नीचे स्क्रॉल" अन्य विकल्प "और बदल" पहुँच प्रतिबंधित करें "क्षेत्र

screenshot of options page of sql server

1

Jespers answer को जोड़ना, और भी अधिक प्रभावी होने के लिए:

SET DEADLOCK_PRIORITY 10;-- Be the top dog. 

SET DEADLOCK_PRIORITY HIGH का उपयोग करता है के DEADLOCK_PRIORITY 5.

क्या हो रहा है कि अन्य प्रक्रियाओं डेटाबेस में एक दरार हो और, अगर है आपकी प्रक्रिया में DEADLOCK_PRIORITY कम है, तो यह दौड़ खो देता है।

यह अन्य स्पिड को खोजने और मारने से रोकता है (जिसे कई बार करने की आवश्यकता हो सकती है)।

यह संभव है कि आपको ALTER DATABASE एक से अधिक बार चलाने की आवश्यकता होगी, (लेकिन जेस्पर ऐसा करता है)। संशोधित कोड:

USE [master] 
SET DEADLOCK_PRIORITY HIGH 
exec sp_dboption '[StuckDB]', 'single user', 'FALSE'; 
ALTER DATABASE [StuckDB] SET MULTI_USER WITH NO_WAIT 
ALTER DATABASE [StuckDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE 
2

उपयोग इस स्क्रिप्ट

exec sp_who 

kill spid 
go 
ALTER DATABASE [DBName] 
SET MULTI_USER; 
संबंधित मुद्दे