SQL Server 2008 R2 में डेटाबेस का नाम बदलने में त्रुटि


164

मैं डेटाबेस का नाम बदलने के लिए इस क्वेरी का उपयोग कर रहा हूं:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

लेकिन यह एक त्रुटि दिखाता है जब बहाना:

Msg 5030, स्तर 16, राज्य 2, पंक्ति 1
डेटाबेस ऑपरेशन करने के लिए विशेष रूप से लॉक नहीं किया जा सकता है।

क्या मेरा प्रश्न गलत है?


4
क्वेरी में कुछ भी गलत नहीं है - त्रुटि आपको बता रही है कि अन्य कनेक्शन डेटाबेस से जुड़े हैं, इसलिए आपको इस समय इसका नाम बदलने की अनुमति नहीं है।
डेमियन__न्यूबेलिवर

1
यदि आप SSMS से ऐसा कर रहे हैं, तो सुनिश्चित करें कि आपके पास उस db के खिलाफ एक क्वेरी विंडो नहीं है, क्योंकि यह एक अलग कनेक्शन है जो db पर लॉक लगाता है।
jleach

जवाबों:


329

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

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
है WITH ROLLBACK IMMEDIATEआवश्यक। अगर मैं इसका इस्तेमाल नहीं करता हूं, तो क्या यह समस्या पैदा करेगा?
user13892

पार्टी के लिए थोड़ा देर से, लेकिन इस सवाल का जवाब देने के लिए: हाँ, आपको WITH ROLLBACK IMMEDIATEउन डेटाबेस को परिवर्तित करते समय उपयोग करना चाहिए जो अन्य उपयोगकर्ता चालू हो सकते हैं, ताकि इन कार्यों की अखंडता सुनिश्चित हो सके। लेकिन डेटाबेस को पहले से ही MULTI_USER मोड पर वापस सेट करते समय यह वास्तव में आवश्यक नहीं है क्योंकि डेटाबेस पहले से ही SINGLE_USER मोड पर है और आप वैसे भी किसी भी लेनदेन को चलाने में सक्षम उपयोगकर्ता हैं।
हकन यिलदीज़हन

61
  1. डेटाबेस को एकल मोड में सेट करें:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    
  2. डेटाबेस का नाम बदलने का प्रयास करें:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. डेटाबेस को Multiuser मोड पर सेट करें:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE
    

@SamieyMehdi क्या मुझे WITH ROLLBACk IMMEDIATEबहुउपयोगकर्ता के लिए उपयोग करना चाहिए ?
बेन्डेग

29

में SQL सर्वर प्रबंधन स्टूडियो (SSMS) :

आप ऑब्जेक्ट एक्सप्लोरर में अपने डेटाबेस को राइट क्लिक करके प्रॉपर्टीज पर भी जा सकते हैं । वहां से, विकल्प पर जाएं । सभी तरह से नीचे स्क्रॉल करें और सेट पहुंच प्रतिबंधित करने के लिए SINGLE_USER । अपना डेटाबेस नाम बदलें, फिर वापस जाएं और इसे वापस MULTI_USER पर सेट करें ।


जल्द और आसान!
एआई ६२

यह बिल्कुल सही है। एसक्यूएल सर्वर 2017 के साथ काम करना
एडम मैकिएज़ीस्की

19

पहले अपने डेटाबेस के सभी कनेक्शनों को बंद करने का प्रयास करें:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

यहां से ले गए


4

यह मेरे लिए यह किया:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO

4

ऐसा इसलिए है क्योंकि डेटाबेस तक कोई और पहुंच रहा है। डेटाबेस को एकल उपयोगकर्ता मोड में रखें और फिर उसका नाम बदलें।

यह लिंक मदद कर सकता है:
http://msdn.microsoft.com/en-IN/library/ms345378(v=sql.105).aspx

और यह भी:
http://msdn.microsoft.com/en-us/library/ms345378.aspx


2

डेटाबेस को एकल उपयोगकर्ता मोड में बदलें जैसा कि अन्य उत्तरों में दिखाया गया है

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

एकल उपयोगकर्ता मोड में कनवर्ट करने के बाद भी कनेक्शन बंद करने का प्रयास करें:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

परिणामों को देखें और प्रश्न में डेटाबेस से कनेक्शन की आईडी देखें।

फिर इस कनेक्शन को बंद करने के लिए नीचे दिए गए कमांड का उपयोग करें (केवल एक होना चाहिए क्योंकि डेटाबेस अब एकल उपयोगकर्ता मोड में है)

KILL कनेक्शन_आईडी

1 क्वेरी के परिणामों में ID के साथ connection_id बदलें


1

1. डैटबेस 1 एकल उपयोगकर्ता मोड सेट करता है

रोलर IMMEDI के साथ DATABASE BOSEVIKRAM SING SINGLE_USER

2. DATABASE का नाम दें

अन्य विवरण BOSEVIKRAM आधुनिक नाम = [BOSEVIKRAM_Deleted]

3.DATABAE सेट मूलर मोड

दैनिक IMEEDIATE के साथ DATABASE BOSEVIKRAM_Deleted सेट MULTI_USER


0

सभी कनेक्शन बंद करने का दूसरा तरीका:

प्रशासनिक उपकरण> स्थानीय सेवाएँ देखें

"SQL सर्वर (MSSQLSERVER)" सेवा को रोकें / शुरू करें


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