SINGLE USER मोड से MULTI USER तक डेटाबेस सेट करें


189

मुझे उस डेटाबेस को सेट करने में मदद चाहिए जो SINGLE_USERमोड में बहाल किया गया था MULTI_USER। हर बार मैं दौड़ता हूं

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

मुझे यह त्रुटि मिली:

इस समय डेटाबेस 'BARDABARD' की स्थिति या विकल्पों में परिवर्तन नहीं किया जा सकता है।

डेटाबेस एकल-उपयोगकर्ता मोड में है, और उपयोगकर्ता वर्तमान में इससे जुड़ा हुआ है।

इसे SINGLE_USERकिसी अन्य मोड पर सेट करने के लिए गैर- मोड में होना चाहिए , लेकिन मैं डेटाबेस को किसी अन्य मोड में सेट नहीं कर सकता, जबकि यह SINGLE_USERमोड है।

जवाबों:


114

"उपयोगकर्ता वर्तमान में इससे जुड़ा हुआ है" SQL सर्वर प्रबंधन स्टूडियो विंडो ही हो सकती है। मास्टर डेटाबेस का चयन करने और ALTERक्वेरी फिर से चलाने का प्रयास करें।


1
इसे जोड़ना: ऐसा प्रतीत होता है कि एक क्वेरी विंडो डेटाबेस से जुड़ी हो सकती है, भले ही कुछ अन्य डेटाबेस (जैसे कि master) उपलब्ध डेटाबेस टूलबार ड्रॉप-डाउन में चयनित हो , जब क्वेरी विंडो सक्रिय हो। यह, आप सिर दर्द दे पास रहता है सभी अन्य क्वेरी खिड़कियां, और जैसे कुछ निर्दोष प्रणाली डेटाबेस का चयन करें masterया tempdbएक खिड़की आप छोड़ दिया है में ड्रॉप-डाउन में।
बजे एक CVn

DB को डिस्कनेक्ट करने और Microsoft SQL सर्वर प्रबंधन स्टूडियो में फिर से कनेक्ट करने का प्रयास करें। फिर कमांड चलाएं।
इसुरु मदुसनका

पहली टिप्पणी बहुत मददगार है और जवाब में जोड़ा जा सकता है, वास्तव में। अन्य सभी प्रश्नों को बंद करने से पहले मैं क्वेरी नहीं चला सकता था।
user2216

87

उस त्रुटि संदेश का आम तौर पर मतलब है कि DB से जुड़ी अन्य प्रक्रियाएं हैं। जो देखने के लिए जुड़े हुए हैं, इसे चलाने की कोशिश करें:

exec sp_who

यह आपको प्रक्रिया लौटाएगा और फिर आपको चलाने में सक्षम होना चाहिए:

kill [XXX]

जहाँ [xxx] spidउस प्रक्रिया का है जिसे आप मारने की कोशिश कर रहे हैं।

तब आप अपने उपरोक्त कथन को चला सकते हैं।

सौभाग्य।


मार [xxx] प्रक्रिया से छुटकारा मिल जाता है, लेकिन जब मैं अपनी कमांड चलाने की कोशिश करता हूं, तो यह वापस आता है!
बृहस्पतिवार

74

आप अपने परिवर्तन को तुरंत रोलबैक करने का विकल्प जोड़ सकते हैं।

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

1
ROLLBACK IMMEDIATEवास्तव में क्या करता है?
दाकाब

3
@dakab सभी लंबित लेनदेन को तुरंत ALTER DATABASEस्टेटमेंट के लेन-देन की शुरुआत के रूप में WITH ROLLBACK X SECONDSरोलबैक करने के लिए मजबूर करता है, जिसके विरोध के रूप में रोलबैक के लिए मजबूर करने से पहले लेनदेन को समाप्त करने या अनिश्चित समय तक प्रतीक्षा करने के लिए प्रतीक्षा करता है जब तक कि कोई भी लंबित लेनदेन नहीं हो (जो यह मानता है कि डिफ़ॉल्ट है लेकिन इस समय डॉक्टर में नहीं मिल सकता है)। यह "अभी आप जो कुछ भी कर रहे हैं उसे रोकें और ऐसा करें" के बराबर है।
बेकन बिट्स

39

SQL सर्वर 2012:

राइट-क्लिक करें DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_userऔर ओके पर क्लिक करें।

देखा!


5
वास्तव में, ऐसा नहीं है जब मैंने आपके समाधान का प्रयास किया: / "डेटाबेस 'XXX' पहले से ही खुला है और एक समय में केवल एक ही हो सकता है। (Microsoft SQL सर्वर, त्रुटि: 924)"
क्रिज़ीस्टोफ़ वोल्नी

1
साथ ही SQL 2008R2 में पुष्टि की है।
कोडो-सेपियन

सबसे अच्छा जवाब, उन मामलों में भी काम कर रहे हैं जहाँ आपने KILL स्टेटमेंट
Marco Marsala

22

मेरे पास एक ही मुद्दा था और यह निम्नलिखित चरणों द्वारा तय किया गया था - संदर्भ: http://giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 56 --=> kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

13

इसने मेरे लिए ठीक काम किया।

चरण 1. डेटाबेस इंजन पर राइट क्लिक करें, एक्टिविटी मॉनिटर पर क्लिक करें और देखें कि किस प्रक्रिया में कनेक्शन है। उस विशेष उपयोगकर्ता को मारें और क्वेरी को तुरंत निष्पादित करें।

चरण 2।

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO  

और डेटाबेस को रिफ्रेश करें।


9

मेरे पास वास्तव में एक मुद्दा था जहां मेरा डीबी प्रक्रियाओं और उनके साथ एक दौड़ की स्थिति से बहुत अधिक लॉक हो गया था, तब तक मुझे एक आदेश दिया गया जो ताज़ा किया गया था और उन्होंने इसे फिर से बंद कर दिया था ... मुझे निम्नलिखित कमांड को वापस चलाना था SSMS में और मुझे ऑफलाइन मिला और वहां से मैंने अपना रिस्टोर किया और वापस आ गया ऑनलाइन ठीक, दो सवाल जहाँ:

पहले भाग गया:

USE master
GO

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id('<yourDbName>')

EXEC(@kill);

फिर तुरंत बाद (दूसरी क्वेरी विंडो में):

USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE

क्या मुझे जो चाहिए था और फिर उसे ऑनलाइन लाया। उन सभी के लिए धन्यवाद, जिन्होंने मेरी समस्या को संयोजित करने और हल करने के लिए इन टुकड़ों को लिखा।


7

SQL प्रबंधन स्टूडियो का उपयोग करने के बजाय सीधे सर्वर पर लॉग इन करना सबसे अच्छा हो सकता है

सुनिश्चित करें कि आप जिस खाते में लॉगिन करते हैं वह उस डेटाबेस के लिए dbowner है जिसे आप MULTI_USER पर सेट करना चाहते हैं। यदि आप कर सकते हैं तो sa (SQL सर्वर प्रमाणीकरण का उपयोग करके) के रूप में लॉगिन करें

यदि आपका डेटाबेस IIS द्वारा उपयोग किया जाता है, तो वेबसाइट और ऐप पूल का उपयोग करें जो इसे बंद करें - यह वह प्रक्रिया हो सकती है जो आपसे जुड़ी हुई है और आपको MULTI_USER पर सेट करने से रोक रही है

USE MASTER
GO

-- see if any process are using *your* database specifically

SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')

-- if so, kill the process:

KILL n -- where 'n' is the 'spid' of the connected process as identified using query above

-- setting database to read only isn't generally necessary, but may help:

ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO

-- should work now:

ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE

यहां देखें अगर आपको अभी भी परेशानी है:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-im-stuck-in-single-user-mode-and-can-t-get-out/

एक पूर्व चेतावनी के रूप में - यदि आपने ऊपर सब कुछ करने की कोशिश की है और आप हताश हो रहे हैं तो आप SQL सर्वर आवृत्ति को रोकने का प्रयास कर सकते हैं और इसे फिर से शुरू कर सकते हैं


5

मैंने बस निम्नलिखित चरणों का उपयोग करके तय किया है, यह आपकी मदद कर सकता है।

चरण 1

एकल उपयोगकर्ता डेटाबेस पर राइट क्लिक करें


चरण 2

ऑफ़लाइन ले लो


चरण 3

कनेक्शन ड्रॉप करें और ऑफ़लाइन लें


चरण 4

ऑनलाइन ले लो


चरण: ५

फिर क्वेरी के बाद चलाएँ।

ALTER DATABASE YourDBName
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

का आनंद लें...!


2

नीचे दिए गए कोड ने मेरे लिए काम किया है जब मुझे उस विशिष्ट SPID के बारे में पता नहीं था जिसका उपयोग singleuserमोड में बदलने के लिए किया गया था ।

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

1
  1. कोशिश की सब कुछ काम नहीं किया
  2. दूरस्थ रूप से उस सर्वर पर लॉगिन करें क्योंकि हम सभी कनेक्शनों को मारने वाले हैं
  3. नीचे दिए गए कोड को एक से अधिक बार चलाएं जब तक कि यह पूरा न हो जाए और अब कोई "हत्या प्रक्रिया" परीक्षण न हो
  4. नीचे दिए गए कोड का उपयोग करके इसे फिर से सक्रिय करें

मास्टर गो के रूप में @sql को varchar (20), @spid int के रूप में उपयोग करें

मास्टर से @spid = min (spid) का चयन करें .. जहां dbid = db_id ('DB_NAME') और spid! = @@ spid

जबकि (@spid शून्य नहीं है) 'किलिंग प्रक्रिया' + कास्ट शुरू करें

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DB_NAME') 
    and spid != @@spid end

फिर इसे वापस लाने के लिए

DATABASE DB_NAME को MULTI_USER सेट करें; जाओ


1

इसने मेरे लिए ठीक काम किया

  1. एक बैकअप लें
  2. नया डेटाबेस बनाएँ और बैकअप को पुनर्स्थापित करें
  3. फिर गुण> विकल्प> [नीचे स्क्रॉल करें] राज्य> प्रतिबंधित करें> मल्टी_सर चुनें और ओके पर क्लिक करें
  4. पुराने डेटाबेस को हटाएं

आशा है कि यह काम सभी के लिए धन्यवाद रमेश कुमार


1

यदि ऊपर काम नहीं करता है, तो स्पाइड का लॉगिन नाम ढूंढें और इसे सुरक्षा - लॉगिन में अक्षम करें


1

आप एकल मोड में उस becouse डेटाबेस नहीं कर सका। सब से ऊपर सही, लेकिन आपको पता होना चाहिए कि: जब आपने sql प्रबंधन स्टूडियो खोला, तो यह डेटाबेस पर किसी भी उपयोगकर्ता को नहीं जानता है, लेकिन जब आप डेटाबेस पर क्लिक करते हैं, तो यह आपको एकल उपयोगकर्ता और आपके कमांड को काम नहीं करने वाला मानता है। बस ऐसा करें: प्रबंधन स्टूडियो बंद करें और इसे फिर से खोलें। किसी भी डेटाबेस का चयन किए बिना नई क्वेरी विंडो कमांड स्क्रिप्ट लिखती है।

USE [master];
GO
ALTER DATABASE [tuncayoto] SET MULTI_USER WITH NO_WAIT;
GO 

सब कुछ ठीक f5 wolla बनाओ!


0

मैंने समस्या को आसानी से हल कर लिया है

  1. डेटाबेस नाम पर राइट क्लिक करें इसे नाम बदलें

  2. बदलने के बाद, डेटाबेस के नाम पर राइट क्लिक करें -> गुण -> विकल्प -> स्क्रॉल करने के नीचे जाएं RestrictAccess (SINGLE_USER से MULTI_USER)

  3. अब फिर से आप अपने पुराने नाम के रूप में डेटाबेस का नाम बदल सकते हैं।


0

SQL सर्वर 2014 के साथ काम करने वाले 3 से अधिक मौकों पर, मैंने कुछ भी बदले बिना डेटाबेस को एकल उपयोगकर्ता मोड में परिवर्तित किया है। यह डेटाबेस निर्माण के दौरान किसी तरह हुआ होगा। उपरोक्त सभी विधियों ने कभी काम नहीं किया क्योंकि मुझे हमेशा एक त्रुटि मिली कि डेटाबेस एकल उपयोगकर्ता मोड में था और इससे कनेक्ट नहीं किया जा सकता था।

केवल एक चीज जो मुझे काम करने के लिए मिली वह थी SQL सर्वर विंडोज सर्विस को पुनरारंभ करना। इसने मुझे डेटाबेस से कनेक्ट करने और आवश्यक परिवर्तन करने या डेटाबेस को हटाने और शुरू करने की अनुमति दी।


0

बस डेटाबेस प्रॉपर्टीज में जाएँ और SINGLE USER मोड को MULTI USER में बदलें

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

नोट: यदि इसका काम आपके लिए नहीं है तो डीबी बैकअप लें और फिर से बहाल करें और फिर से ऊपर की विधि करें

* एकल / एकल_सियर

एकाधिक = MULTI_USER

प्रतिबंधित = RESTRICTED_USER


यह ओपी उपयोग की जाने वाली क्वेरी से कैसे अलग है?
स्क्वाज

हाँ दोनों एक ही काम करेंगे, यह उसी तरह है जैसे क्रिएट टेबल क्वेरी का उपयोग करने के लिए हमने टेबल बनाने के लिए एसक्यूएल सर्वर जीयूआई टेबल डिज़ाइनर का इस्तेमाल किया, बीटीएस दोनों एक ही काम करेंगे, एक क्वेरी विधि और दूसरी जीयूआई विधि है। जो आपको पसंद हो उसका उपयोग करें।
हसन सईद

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

0

एकल-उपयोगकर्ता मोड में जाने के बाद, एक ग्राहक SQL सर्वर के साथ केवल एक कनेक्शन स्थापित कर सकता है, याद रखें कि "ऑब्जेक्ट एक्सप्लोरर" एक (अलग) कनेक्शन लेता है, इसलिए यदि आप क्वेरी में एक बहु-उपयोगकर्ता कथन चलाने की कोशिश कर रहे हैं। विंडो, आपको त्रुटि मिलेगी कि एकल-उपयोगकर्ता मोड में आप एक और कनेक्शन स्थापित नहीं कर सकते हैं।

मेरे लिए यह मुद्दा नहीं था, हालांकि, मेरे मामले में, कुछ स्वचालित प्रक्रियाएं थीं जो लगातार (हर कुछ सेकंड में) कनेक्शन स्थापित कर रही थीं, इसलिए जैसे ही मैंने डीबी को एकल-उपयोगकर्ता मोड में लिया और खुद को डिस्कनेक्ट कर दिया, में से एक कनेक्शन स्थापित / कब्जा करने से पहले (मैं अपना पुनर्स्थापना ऑपरेशन शुरू कर सकता हूं)। जैसे ही मैं उन कनेक्शनों को मारूंगा - वे फिर से कनेक्ट हो जाएंगे और जब मैं पुनर्स्थापना कमांड चलाऊंगा, तो मुझे यह त्रुटि मिलेगी कि कनेक्शन पहले से ही कब्जा है।

इसे हल करने के लिए मुझे killबयान, बयान बदलने User-ModeऔरRestore एक क्वेरी विंडो में ऑपरेशंस को और जब मैंने उन सभी को एक ही बार में चलाया, तो वॉइला !!! इसने काम कर दिया।

आशा है कि यह दूसरों की मदद करता है।


0

मुझे एक स्थानीय डीबी से परेशानी हो रही थी।

मैं SQL सर्वर को रोककर और फिर SQL सर्वर को प्रारंभ करके और फिर SSMS UI का उपयोग करके DB_ गुण को Multi_User में बदलने के द्वारा इस समस्या को हल करने में सक्षम था।

जब मैं बैकअप को पुनर्स्थापित करने का प्रयास कर रहा था तब DB "सिंगल यूजर" मोड में चला गया। मैंने पुनर्स्थापित करने का प्रयास करने से पहले लक्ष्य डेटाबेस का बैकअप नहीं बनाया था (SQL 2017)। यह आपको हर बार मिलेगा।

SQL सर्वर बंद करें, SQL सर्वर प्रारंभ करें, फिर उपरोक्त लिपियों को चलाएं या UI का उपयोग करें।


0

मैं थोड़ी देर के लिए समाधान के लिए चला गया और अंत में नीचे के समाधान के साथ आया,

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

एक्सेस मोड बदलने से पहले आपको इन कनेक्शनों को मारना होगा। (मैंने इसे EXEC (@kill) के साथ किया है ; नीचे दिए गए कोड टेम्पलेट में)

फिर,

MULTI_USER मोड में डेटाबेस सेट करने के लिए निम्न 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

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

ALTER DATABASE [<Your_DB_Name>] SET SINGLE_USER

यह काम करना चाहिए। हैप्पी कोडिंग !!

धन्यवाद!!

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