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

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

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

0
ro fr bn

19 उत्तर

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


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 
0
जोड़ा

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

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
0
जोड़ा

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

0
जोड़ा
धन्यवाद, यह काम करता है ( वैकल्पिक डाटाबेस ... सेट SINGLE_USER अन्य उत्तरों में आदेशों को वही 'अनन्य लॉक नहीं मिला' त्रुटि लौटा दी गई)।
जोड़ा लेखक Tinister, स्रोत

In MS SQL Server Management Studio on the object explorer, right click on the database. In the context menu that follows select 'Tasks -> Take Offline'

0
जोड़ा
यदि कोई सक्रिय कनेक्शन है तो आप ऐसा नहीं कर सकते हैं।
जोड़ा लेखक alirobe, स्रोत

इसे पूरा करने के लिए स्क्रिप्ट, सभी कनेक्शनों को मारने के लिए डेटाबेस के साथ '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
0
जोड़ा
यह मेरे लिए काम करता है, मैंने और spid <> @@ SPID को SELECT @sKillConnection कथन में जोड़ा है ताकि वह मेरे वर्तमान कनेक्शन को मारने की कोशिश न करे, जो एक उत्पन्न करेगा त्रुटि संदेश।
जोड़ा लेखक Luis Perez, स्रोत
mateuscb- mssql 10.00 पर काम नहीं करने का एकमात्र तरीका यह है कि यदि आपके पास डेटाबेस नाम है जिसके लिए [] और आप उनका उपयोग नहीं करते हैं। वैकल्पिक डाटाबेस [YourDatabase] सेट SINGLE_USER रोलबैक के साथ तत्काल काम 10, 10.5, 11 और 12 में काम करता है।
जोड़ा लेखक Jeremy, स्रोत
केवल उपयोगकर्ता प्रक्रियाओं को मार दिया जा सकता है ... अभी भी deadlocked और deadlock के कारण mult_user मोड को पुनर्स्थापित नहीं कर सकता है।
जोड़ा लेखक rainabba, स्रोत
Lifesaver। शीर्ष जवाब होना चाहिए।
जोड़ा लेखक gls123, स्रोत

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

0
जोड़ा

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

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

-- 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
0
जोड़ा
मैंने इसे बिना किसी समस्या के 2008 में चलाया है वैकल्पिक डाटाबेस ASPnetdb सेट SINGLE_USER रोलबैक के साथ तत्काल चयन करें() वैकल्पिक डेटा एएसपीनेटडीबी सेट MULTI_USER टिप्पणी कोड के बजाय आपके पास क्या है?
जोड़ा लेखक SQLMenace, स्रोत
@Wagner अगर डेटाबेस में नाम '-' है, तो आपको इसके चारों ओर ब्रैकेट का उपयोग करने की आवश्यकता है: वैकल्पिक डेटा [foo-bar] सेट SINGLE_USER रोलबैक के साथ तुरंत
जोड़ा लेखक Ben Challenor, स्रोत
ऐसा लगता है कि SQL सर्वर 2008 के लिए काम नहीं लगता है ... यहां मुझे मिली त्रुटि है: कंसोल: संदेश 102, स्तर 15, राज्य 1, रेखा 4 '-' के पास गलत वाक्यविन्यास। संदेश 319, स्तर 15, राज्य 1, रेखा 4 'साथ' कीवर्ड के पास गलत वाक्यविन्यास। यदि यह कथन एक सामान्य तालिका अभिव्यक्ति है, एक xmlnamespaces खंड या परिवर्तन ट्रैकिंग संदर्भ खंड, पिछला कथन अर्धविराम से समाप्त होना चाहिए। संदेश 102, स्तर 15, राज्य 1, रेखा 4 'IMMEDIATE' के पास गलत वाक्यविन्यास। कमांड: रोलरैक तत्काल के साथ एएसएमआर-वंदांडा सेट सिंगल_यूज़र
जोड़ा लेखक wdanda, स्रोत
SQL सर्वर 2008 और SQL एक्सप्रेस इंस्टेंस के साथ मेरे लिए काम किया।
जोड़ा लेखक Tim Murphy, स्रोत
हैलो सब, मैंने कोशिश की। अब मैं mult_user सेट करने के लिए डीबी से कनेक्ट करने में असमर्थ हूं। माइक्रोसॉफ्ट sqljdbc ड्राइवर के साथ गिलहरी एसक्यूएल का उपयोग करना। कृपया मदद करे।
जोड़ा लेखक RuntimeException, स्रोत
कृपया ध्यान दें - अमेज़ॅन आरडीएस पर होस्ट किए गए SQL सर्वर पर इसे न करें। आप डीबी को वापस MULTI_USER मोड में रीसेट करने में असमर्थ होंगे। यह सुनिश्चित करने से पहले सुनिश्चित करें कि आपके पास डीबीए प्रमाण-पत्रों का एक और सेट है। मैंने इसे पिछले स्नैपशॉट में से किसी एक पर वापस ले कर तय किया। कुछ डेटा खो गया। सौभाग्य से डेटा महत्वपूर्ण नहीं था।
जोड़ा लेखक RuntimeException, स्रोत

मैं डेटाबेस में सभी प्रक्रियाओं की सूची प्राप्त करने के लिए 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

Result
You can use command in KillCommand column to kill the process you want to.

SPID    KillCommand
26      kill 26;
27      kill 27;
28      kill 28;
0
जोड़ा

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

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

इसके बाद आप का नाम बदलना चाहिए।

0
जोड़ा
आपको जाहिर तौर पर स्थगित प्रक्रिया को एक-एक करके मारने की ज़रूरत है, लेकिन यह एक सीधी विधि है जिसे स्थानीय लॉगिन की आवश्यकता नहीं होती है या पूरे डेटाबेस सर्वर को नीचे लाया जाता है।
जोड़ा लेखक Álvaro González, स्रोत
यदि आप सर्वर पर राइट क्लिक करते हैं, डीबी नहीं, तो मुझे एक "गतिविधि मॉन्टियर" मिला है। फिर आप 'प्रक्रियाएं' टैब का चयन कर सकते हैं और डेटाबेस द्वारा फ़िल्टर कर सकते हैं।
जोड़ा लेखक alirobe, स्रोत
मुझे प्रबंधन के तहत यह "गतिविधि मॉनिटर" आइटम नहीं दिख रहा है ... फिर, शायद ऐसा इसलिए है क्योंकि मैं SQL 2008 का उपयोग कर रहा हूं?
जोड़ा लेखक wdanda, स्रोत

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

0
जोड़ा

Another "kill it with fire" approach is to just restart the MSSQLSERVER service. I like to do stuff from the commandline. Pasting this exactly into CMD will do it: NET STOP MSSQLSERVER & NET START MSSQLSERVER

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

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

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

0
जोड़ा
विशेष रूप से लाइव वातावरण में अनुशंसित नहीं है :)
जोड़ा लेखक Mohammed ElSayed, स्रोत
मैं किसी भी चीज के लिए जाऊंगा जो केवल मेरे लक्ष्य डीबी को प्रभावित करेगा। लक्ष्य सर्वर पर सभी डीबी को मारने का आपका दृष्टिकोण स्मार्ट नहीं है। लेकिन ईमानदार होने के लिए, पर्यावरण को व्यवस्थित करने में, यह शायद सबसे आसान तरीका जैसा आपने कहा था।
जोड़ा लेखक Mohammed ElSayed, स्रोत
आपका मतलब क्या है 'अनुशंसित नहीं'? यदि आप उस सर्वर से किसी भी कनेक्शन के बारे में चिंतित नहीं हैं (यानी: डीबग या स्टेजिंग वातावरण, उदाहरण के लिए - या अस्थायी के साथ एक उत्पादन सर्वर) यह सबसे आसान तरीका हो सकता है। उत्पादन के लिए - यदि आप बस सेवा को पुनरारंभ कर सकते हैं तो आप कॉन्फ़िगरेशन के साथ मिलना नहीं चाहते हैं। तुम क्या करोगे?
जोड़ा लेखक aikeru, स्रोत
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

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

0
जोड़ा
यह वास्तव में काम करता है :) हालांकि, मैं सलाह दूंगा कि, इस स्क्रिप्ट के निष्पादित हिस्से को रखने के लिए टिप्पणी की गई है और इसके बजाय एक प्रिंट @query डालें, बस यह सुनिश्चित करने के लिए कि आप इसे गलती से उत्पादन सर्वर पर नहीं चलाते हैं।
जोड़ा लेखक marcello miorelli, स्रोत

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

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
0
जोड़ा
मैंने इस कोड को एक स्क्रिप्ट में रखा है। उपयोगी!
जोड़ा लेखक Josep Alacid, स्रोत

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

  1. In the Object Explorer Tree, right click the root database server (with the green arrow), then click activity monitor.
  2. Open the processes tab in the activity monitor, select the 'databases' drop down menu, and filter by the database you want.
  3. Right click the DB in Object Explorer and start a 'Tasks -> Take Offline' task. Leave this running in the background while you...
  4. Safely shut down whatever you can.
  5. Kill all remaining processes from the process tab.
  6. Bring the DB back online.
  7. Rename the DB.
  8. Bring your service back online and point it to the new DB.
0
जोड़ा

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

0
जोड़ा

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

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

Detach Right click DB -> Tasks -> Detach... check "Drop Connections" Ok

Reattach Right click Databases -> Attach.. Add... -> select your database, and change the Attach As column to your desired database name. Ok

0
जोड़ा
यह एक सम्मोहन की तरह काम करता है! आसान तरीका अच्छा तरीका है। धन्यवाद।
जोड़ा लेखक Tug Strongly, स्रोत
पसंद है। निश्चित रूप से जीयूआई से इसे करने का सबसे तेज़ तरीका।
जोड़ा लेखक Whelkaholism, स्रोत

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

  1. प्रश्न में डेटाबेस पर "डिटेच" ऑपरेशन प्रारंभ करें। यह एक विंडो खोलता है (एसक्यूएल 2005 में) सक्रिय कनेक्शन प्रदर्शित करता है जो डीबी पर कार्यों को रोकता है।
  2. सक्रिय कनेक्शन को मारें, अलग-अलग ऑपरेशन रद्द करें।
  3. डेटाबेस को बहाल करने के लिए अब उपलब्ध होना चाहिए।
0
जोड़ा
सबसे अच्छा तरीका नहीं हो सकता है लेकिन यह काम करता है, इसलिए मैं आपसे सहमत हूं!
जोड़ा लेखक RaM, स्रोत
एसक्यूएल 2008 प्रबंधन स्टूडियो में, आप किसी कारण से "डिटेच" स्क्रीन से सक्रिय कनेक्शन तक नहीं पहुंच सकते हैं। यह 2005 में बहुत अच्छा काम करता है और इस तरह मैंने इसे हमेशा तक किया है, जब तक हम 2008 तक अपग्रेड नहीं करते हैं और अब आपको एक बेवकूफ संदेश मिलता है जो आपको अपना कनेक्शन बंद करने के लिए कहता है, लेकिन आपको प्रत्येक कनेक्शन को मारने के लिए कनेक्शन विवरण नहीं खोलने देता है ।
जोड़ा लेखक Jim, स्रोत

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

0
जोड़ा
ALTER DATABASE [Test]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Test]
SET ONLINE
0
जोड़ा