चयनित डेटाबेस या सर्वर के सभी कनेक्शनों को समाप्त करने के लिए संग्रहीत प्रक्रिया
परिचय
ऐसे समय हो सकते हैं जब आपको अपने डेटाबेस से सभी उपयोगकर्ताओं को डिस्कनेक्ट करने की आवश्यकता हो, एक उदाहरण लॉग शिपिंग प्रतिकृति के लिए है। नीचे दिए गए इस कोड का उपयोग रिपोर्टिंग सर्वर पर किया गया था जिसे हर 20 मिनट में अपडेट किया गया था, क्योंकि डेटाबेस को पुनर्स्थापना कार्य द्वारा अनन्य मोड में खोलने की आवश्यकता है।
नीचे दिया गया कोड डेटाबेस नाम स्वीकार करेगा, इसलिए इसे केवल एक बार लिखा जाना चाहिए और मास्टर या यूटिलिटीज (यदि आपने एक बनाया है) डेटाबेस पर संग्रहीत किया जाना चाहिए। इसके बाद इसे किसी अन्य प्रक्रिया से कहा जा सकता है, हमारे मामले में इसके ऊपर के दस्तावेज़ में पूर्ण रखरखाव योजना।
यह एक काफी सरल संग्रहीत प्रक्रिया है जो केवल सक्रिय कनेक्शन की एक सूची प्राप्त करता है और प्रक्रिया और कनेक्शन को मारने वाले प्रत्येक के माध्यम से लूप करता है।
SQL Code
CREATE PROC KillConnections(@database VARCHAR(50))AS BEGINSET NOCOUNT ON;DECLARE @spid INTDECLARE @killstatement NVARCHAR(10)--Declare a cursor to select the users connected to the specified databaseDECLARE c1 CURSOR FAST_FORWARD FOR SELECT request_session_id FROM sys.dm_tran_locksWHERE resource_type='DATABASE'AND(DB_NAME(resource_database_id)=@database OR @database IS NULL)OPEN c1FETCH c1 INTO @spidWHILE @@FETCH_STATUS=0 BEGIN IF @@SPID<>@spid--Don't kill the connection of the user executing this statement BEGIN -- Construct dynamic sql to kill spid SET @killstatement='KILL '+CAST(@spid AS VARCHAR(5)) EXEC sp_executesql @killstatement PRINT @spid-- Print killed spid END FETCH NEXT FROM c1 INTO @spidEND-- Clean upCLOSE c1DEALLOCATE c1ENDGO