sql server - बैकअप को पुनर्स्थापित करते समय, मैं सभी सक्रिय कनेक्शन कैसे डिस्कनेक्ट कर सकता हूं?




sql-server sql-server-2005 (6)

मेरा SQL सर्वर 2005 सक्रिय कनेक्शन की वजह से बैकअप को पुनर्स्थापित नहीं करता है। मैं इसे कैसे मजबूर कर सकता हूं?


एसक्यूएल सर्वर प्रबंधन स्टूडियो 2005

जब आप किसी डेटाबेस पर राइट क्लिक करते हैं और Tasks क्लिक करते हैं और फिर Detach Database करें क्लिक करते हैं, तो यह सक्रिय कनेक्शन के साथ एक संवाद लाता है।

स्क्रीन को अलग करें http://www.kodyaz.com/images/articles/kill-all-processes/detach-database.JPG

"संदेश" के तहत हाइपरलिंक पर क्लिक करके आप सक्रिय कनेक्शन को मार सकते हैं।

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

here अधिक जानकारी।

एसक्यूएल सर्वर प्रबंधन स्टूडियो 2008

इंटरफ़ेस SQL ​​सर्वर प्रबंधन स्टूडियो 2008 के लिए बदल गया है, यहां चरण हैं (के माध्यम से: टिम लींग )

  1. ऑब्जेक्ट एक्सप्लोरर में सर्वर पर राइट-क्लिक करें और 'गतिविधि मॉनीटर' का चयन करें।
  2. जब यह खुलता है, प्रक्रिया समूह का विस्तार करें।
  3. डेटाबेस नाम से परिणामों को फ़िल्टर करने के लिए अब ड्रॉप-डाउन का उपयोग करें।
  4. राइट-क्लिक 'किल प्रोसेस' विकल्प का चयन करके सर्वर कनेक्शन को मार दें।

SQL सर्वर को पुनरारंभ करना उपयोगकर्ताओं को डिस्कनेक्ट करेगा। सबसे आसान तरीका मैंने पाया - अच्छा है अगर आप सर्वर को ऑफ़लाइन लेना चाहते हैं।

लेकिन कुछ बहुत ही विचित्र कारणों से 'ऑफ़लाइन ले लो' विकल्प इस भरोसेमंद नहीं करता है और प्रबंधन कंसोल को लटका या भ्रमित कर सकता है। ऑफ़लाइन काम करने के बाद पुनरारंभ करना

कभी-कभी यह एक विकल्प होता है - उदाहरण के लिए यदि आपने एक वेबसर्वर बंद कर दिया है जो कनेक्शन का स्रोत है।


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


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

DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
    spid
FROM
    master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
    @spid
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
    EXECUTE(@SQLCommand)
    FETCH NEXT FROM UserCursor INTO
        @spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO

एसक्यूएल सर्वर 2008 में पुनर्स्थापना प्रोसेस को स्वचालित करते समय मैंने इस समस्या को पार किया। मेरा (सफल) दृष्टिकोण प्रदान किए गए दो उत्तरों का मिश्रण था।

सबसे पहले, मैं डेटाबेस के सभी कनेक्शनों में चलाता हूं, और उन्हें मार डालता हूं।

DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = top 1 spid from master.dbo.sysprocesses
        where dbid = db_id('dbName')
End

फिर, मैं डेटाबेस को एकल_यूसर मोड में सेट करता हूं

ALTER DATABASE dbName SET SINGLE_USER

फिर, मैं बहाल चलाता हूं ...

RESTORE DATABASE and whatnot

कनेक्शन फिर से मार डालो

(same query as above)

और डेटाबेस को mult_user पर वापस सेट करें।

ALTER DATABASE dbName SET MULTI_USER

इस तरह, मैं सुनिश्चित करता हूं कि एकल मोड में सेट करने से पहले डेटाबेस को पकड़ने के लिए कोई कनेक्शन नहीं है, क्योंकि अगर वहां मौजूद है तो पूर्व जमा हो जाएगा।


पहले से दी गई सलाह में जोड़ने के लिए, यदि आपके पास आईआईएस के माध्यम से चल रहा एक वेब ऐप है जो डीबी का उपयोग करता है, तो आपको पुनर्स्थापित करते समय ऐप के लिए ऐप पूल को रीसायकल (रीसायकल नहीं) करने की आवश्यकता हो सकती है, फिर पुन: प्रारंभ करें। ऐप पूल को रोकना सक्रिय http कनेक्शन को मारता है और किसी और को अनुमति नहीं देता है, जो अन्यथा प्रक्रियाओं को ट्रिगर करने की अनुमति देता है जो डेटाबेस से कनेक्ट होता है और इस प्रकार लॉक करता है। यह डेटाबेस के पुनर्स्थापित करते समय Umbraco सामग्री प्रबंधन प्रणाली के साथ एक ज्ञात मुद्दा है







disconnect