दिलचस्प पोस्ट
सी # में कॉओरिएंट और कॉन्ट्राएरिएन्ट इंटरफेस को समझना सी # स्थिर निर्माता थ्रेड सुरक्षित है? एकल प्रश्न (रिकर्सिव क्वेरी) के साथ MySQL तालिका में सभी अभिभावकों को ढूँढना विंडोज में पोर्ट 80 का उपयोग किस प्रोग्राम से किया जा सकता है? एक अभी-अभी-समय (जेआईटी) कंपाइलर क्या करता है? ListView और बटन के साथ एंड्रॉइड लेआउट TryUpdateModel, एएसपी। NET MVC 3 का वास्तविक उदाहरण Android में गतिशील रूप से एक बटन कैसे जोड़ें? जावास्क्रिप्ट में "|" (एकल पाइप) क्या करता है? PHP के माध्यम से एक फ़ाइल को कैसे हटाएं? सी में एक variadic फ़ंक्शन का आवेश अग्रेषित करें ऑर्डर से खंड के बिना एक एसक्यूएल चयन बयान का आदेश NSArray को उद्देश्य-सी में एक नए NSArray में फ़िल्टर करना JAXB का उपयोग करते हुए एक्सएसडी से सीरियलजएबल इंटरफ़ेस को लागू करने वाला एक जावा क्लार्क कैसे बनाया जाता है? मैं एक स्ट्रिंग को जावा में इनटस्टस्ट्रीम में कैसे रूपांतरित कर सकता हूं?

आप SQL सर्वर 2005 डेटाबेस में सभी मौजूदा कनेक्शन कैसे मार सकते हैं?

मैं एक डेटाबेस का नाम बदलना चाहता हूं, लेकिन त्रुटि प्राप्त कर रहा हूं जो डेटाबेस पर 'अनन्य ताला नहीं मिल सका', जिसका अर्थ है कि कुछ कनेक्शन अभी भी सक्रिय हैं I

मैं डेटाबेस में सभी कनेक्शन कैसे मार सकता हूं ताकि मैं इसका नाम बदल सकता हूँ?

वेब के समाधान से एकत्रित समाधान "आप SQL सर्वर 2005 डेटाबेस में सभी मौजूदा कनेक्शन कैसे मार सकते हैं?"

सभी सक्रिय कनेक्शनों को एक डाटाबेस में देखें ।

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

-- set your current connection to use master otherwise you might get an error use master ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here ALTER DATABASE YourDatabase SET MULTI_USER 

इसे पूरा करने के लिए स्क्रिप्ट, 'DB_NAME' को सभी कनेक्शनों को मारने के लिए डेटाबेस के साथ बदलें:

 USE master GO SET NOCOUNT ON DECLARE @DBName varchar(50) DECLARE @spidstr varchar(8000) DECLARE @ConnKilled smallint SET @ConnKilled=0 SET @spidstr = '' Set @DBName = 'DB_NAME' IF db_id(@DBName) < 4 BEGIN PRINT 'Connections to system databases cannot be killed' RETURN END SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; ' FROM master..sysprocesses WHERE dbid=db_id(@DBName) IF LEN(@spidstr) > 0 BEGIN EXEC(@spidstr) SELECT @ConnKilled = COUNT(1) FROM master..sysprocesses WHERE dbid=db_id(@DBName) END 

इसे मार डालो, और इसे आग से मार डालो:

 USE master go DECLARE @dbname sysname SET @dbname = 'yourdbname' DECLARE @spid int SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) WHILE @spid IS NOT NULL BEGIN EXECUTE ('KILL ' + @spid) SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid END 

एसक्यूएल प्रबंधन स्टूडियो एक्सप्रेस का उपयोग करना:

ऑब्जेक्ट एक्सप्लोरर ट्री में "गतिविधि मॉनिटर" (यदि आपको वहां नहीं मिल रहा है, तो डेटाबेस सर्वर पर ठीक क्लिक करें और "गतिविधि मॉनिटर" का चयन करें) के लिए प्रबंधन के तहत नीचे ड्रिल करें। गतिविधि मॉनिटर खोलना, आप सभी प्रक्रिया जानकारी देख सकते हैं आपको उस डेटाबेस के लिए ताले ढूंढने में सक्षम होना चाहिए, जिसकी आप दिलचस्पी रखते हैं और उन ताले को मारते हैं, जो कनेक्शन को भी मार देगा।

उसके बाद आपको नाम बदलने में सक्षम होना चाहिए।

मैंने हमेशा उपयोग किया है:

 ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO SP_RENAMEDB 'DB_NAME','DB_NAME_NEW' Go ALTER DATABASE DB_NAME_NEW SET MULTI_USER -- set back to multi user GO 
 ALTER DATABASE [Test] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE [Test] SET ONLINE 

ऑफ़लाइन ले लो थोड़ी समय लगता है और कभी-कभी मुझे उसमें कुछ समस्याएं आती हैं ..

मेरी राय में सबसे ठोस तरीका:

अलग-थलग डीबी क्लिक करें -> कार्य -> ​​अलग … जांचें "ड्रॉप कनेक्शन" ठीक है

रीचैच राइट क्लिक डेटाबेस -> अटैच करें .. जोड़ें … -> अपने डेटाबेस का चयन करें, और अपने वांछित डेटाबेस नाम में अटैचमेंट अटैच को बदलें। ठीक

 Select 'Kill '+ CAST(p.spid AS VARCHAR)KillCommand into #temp from master.dbo.sysprocesses p (nolock) join master..sysdatabases d (nolock) on p.dbid = d.dbid Where d.[name] = 'your db name' Declare @query nvarchar(max) --Select * from #temp Select @query =STUFF(( select ' ' + KillCommand from #temp FOR XML PATH('')),1,1,'') Execute sp_executesql @query Drop table #temp 

'मास्टर' डेटाबेस का उपयोग करें और इस क्वेरी को चलाने के लिए, यह आपके डेटाबेस से सभी सक्रिय कनेक्शन को मार देगा।

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

वस्तु एक्सप्लोरर पर एमएस एसक्यूएल सर्वर मैनेजमेंट स्टूडियो में, डाटाबेस पर राइट क्लिक करें। संदर्भ मेनू में निम्न का चयन करें 'कार्य -> ​​ऑफ़लाइन ले जाएं'

एक और "आग से मार डालो" दृष्टिकोण सिर्फ MSSQLSERVER सेवा को पुनरारंभ करना है मैं कमांडलाइन से सामान करना चाहता हूं। इसे सीएमडी में ठीक से चिपकाने के लिए यह करना होगा: नेट रोकें MSSQLSERVER और नेट शुरू MSSQLSERVER

या "services.msc" को खोलें और "SQL सर्वर (MSSQLSERVER)" को ढूंढें और राइट-क्लिक करें, "पुनः आरंभ करें" का चयन करें।

यह "निश्चित रूप से, सुनिश्चित करने के लिए" सभी इंस्टॉलेशनों को उस इंस्टेंस पर चलने वाले सभी डेटाबेस को मार देगा।

(मुझे यह पसंद है कि कई तरीकों से बेहतर होता है जो सर्वर / डेटाबेस पर कॉन्फ़िगरेशन को बदलता है और बदलता है)

यहां एमएस एसक्यूएल सर्वर मैनेजमेंट स्टूडियो 2008 (अन्य संस्करणों के लिए भी काम कर सकते हैं) में इस तरह की बात कैसे मज़बूती से है:

  1. ऑब्जेक्ट एक्सप्लोरर ट्री में, रूट डाटाबेस सर्वर पर क्लिक करें (हरे तीर के साथ), फिर गतिविधि मॉनिटर पर क्लिक करें।
  2. गतिविधि मॉनीटर में प्रक्रिया टैब खोलें, 'डेटाबेस' ड्रॉप डाउन मेनू का चयन करें, और इच्छित डेटाबेस से फ़िल्टर करें।
  3. ऑब्जेक्ट एक्सप्लोरर में डीबी पर राइट क्लिक करें और एक 'टास्क -' ऑफ़ ऑफ़ करें 'कार्य शुरू करें इसे पृष्ठभूमि में चलते रहें, जबकि आप …
  4. जो भी आप कर सकते हैं उसे सुरक्षित रूप से बंद करें
  5. प्रक्रिया टैब से सभी शेष प्रक्रियाओं को मार डालें
  6. डीबी वापस ऑनलाइन लाओ
  7. डीबी का नाम बदलें
  8. अपनी सेवा वापस ऑनलाइन लाओ और इसे नए डीबी में इंगित करें

इस परिदृश्य में मेरे लिए काम करने का विकल्प इस प्रकार है:

  1. सवाल में डेटाबेस पर "अलग" ऑपरेशन प्रारंभ करें यह एक विंडो खुला (SQL 2005 में) सक्रिय कनेक्शन प्रदर्शित करता है जो डीबी पर कार्रवाई रोकता है।
  2. सक्रिय कनेक्शन को मार डालें, अलग-थलग ऑपरेशन को रद्द करें।
  3. डेटाबेस अब बहाल करने के लिए उपलब्ध होना चाहिए।

इसे इस्तेमाल करे:

 ALTER DATABASE [DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

डाटाबेस नाम पर राइट क्लिक करें, प्रॉपर्टी विंडो प्राप्त करने के लिए प्रॉपर्टी पर क्लिक करें, विकल्प टैब खोलें और मल्टी यूजर से सिंगल यूजर पर "एक्सेस प्रतिबंधित करें" प्रॉपर्टी बदलें। जब आप ओके बटन को दबाते हैं, तो यह आपको सभी खुले कनेक्शन बंद करने के लिए संकेत देगा, "हां" चुनें और आप डेटाबेस का नाम बदलने के लिए तैयार हैं ….

ये मेरे लिए (SQL2008 एंटरप्राइज़) काम नहीं कर रहे थे, मैं भी डीबी से जुड़ी किसी भी चलने वाली प्रक्रिया या उपयोगकर्ता नहीं देख सकता था। सर्वर को पुनरारंभ करना (प्रबंधन स्टूडियो में एसक्यूएल सर्वर पर राइट क्लिक करें और पुनः आरंभ करें) मुझे डीबी को पुनर्स्थापित करने की इजाजत दी।

मैं SQL Server 2008 R2 का उपयोग कर रहा हूँ, मेरा डीबी पहले से ही एक उपयोगकर्ता के लिए सेट कर दिया गया था और एक कनेक्शन था जिसने डेटाबेस पर कोई कार्रवाई प्रतिबंधित कर दी थी। इस प्रकार अनुशंसित SQLMenace के समाधान ने त्रुटि के साथ जवाब दिया यहाँ एक है जो मेरे मामले में काम किया ।

मैं डेटाबेस में सभी प्रक्रियाओं की सूची प्राप्त करने के लिए sp_who का उपयोग करता हूँ यह बेहतर है क्योंकि आप उस प्रक्रिया की समीक्षा करना चाह सकते हैं जो कि मारना है।

 declare @proc table( SPID bigint, Status nvarchar(255), Login nvarchar(255), HostName nvarchar(255), BlkBy nvarchar(255), DBName nvarchar(255), Command nvarchar(MAX), CPUTime bigint, DiskIO bigint, LastBatch nvarchar(255), ProgramName nvarchar(255), SPID2 bigint, REQUESTID bigint ) insert into @proc exec sp_who2 select *, KillCommand = concat('kill ', SPID, ';') from @proc 

परिणाम
आप KillCommand कॉलम में कमांड का उपयोग करके प्रक्रिया को मार सकते हैं।

 SPID KillCommand 26 kill 26; 27 kill 27; 28 kill 28; 

आप SP_Who कमांड का उपयोग कर सकते हैं और अपने डेटाबेस का उपयोग करने वाली सभी प्रक्रिया को मार सकते हैं और फिर अपने डेटाबेस का नाम बदल सकते हैं।