روش ذخیره شده برای از بین بردن تمام اتصالات به پایگاه داده یا سرور انتخاب شده
SQL Stored Procedure برای از بین بردن تمام اتصالات به پایگاه داده یا سرور انتخاب شده به جز فرایند فراخوانی آن.
معرفی
ممکن است مواقعی وجود داشته باشد که شما باید تمام کاربران را از پایگاه داده خود جدا کنید ، یکی از این موارد ، تکرار Log Shipping است. این کد زیر بر روی یک سرور گزارش دهنده استفاده شده است که هر 20 دقیقه به روز می شود ، زیرا پایگاه داده باید با کار بازگرداندن در حالت منحصر به فرد باز شود.
کد زیر یک نام پایگاه داده را می پذیرد ، بنابراین فقط باید یک بار نوشته شود و در پایگاه داده اصلی (یا اگر یک آن را ایجاد کرده اید) ذخیره شود. سپس می توان آن را از هر فرآیند دیگری فراخوانی کرد ، در مورد ما برنامه نگهداری کامل در سند فوق این است.
این یک روش ذخیره شده نسبتاً ساده است که به سادگی لیستی از اتصالات فعال و حلقه ها را از طریق هر یک از بین بردن روند و اتصال دریافت می کند.
SQL Code
CREATE PROC maint.KillConnections(@database VARCHAR(50)) AS BEGIN
SET NOCOUNT ON;
DECLARE @spid INT
DECLARE @killstatement NVARCHAR(10)--Declare a cursor to select the users connected to the specified database
DECLARE c1 CURSOR FAST_FORWARD FOR SELECT request_session_id
FROM sys.dm_tran_locks
WHERE resource_type='DATABASE'
AND (DB_NAME(resource_database_id)=@database OR @database IS NULL)
OPEN c1
FETCH c1 INTO @spid
WHILE @@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 @spid
END
-- Clean up
CLOSE c1
DEALLOCATE c1
END
GO