Web design and hosting, database, cloud and social media solutions that deliver business results
  • حلول الأعمال
    • خدمات قاعدة البيانات
      • أدوات
    • تصميم الموقع
      • جزيرة وايت
    • الخدمات السحابية
    • وسائل الاعلام الاجتماعية
  • الأكاديمية
    • تعلم قاعدة البيانات
      • استخدام SQL Server Pivot-Unpivot
      • استخدام وظائف خادم SQL
      • باستخدام SQL Server التواريخ
      • باستخدام بيانات SQL
      • صيانة خادم SQL
    • تعلم تصميم المواقع
  • معلومات عنا
    • الفريق
      • تشيستر كوبربوت
      • جافين كلايتون
      • سونيل كومار
      • علي الأمين
    • محفظة
    • مقالات
    • وظائف
عربى (AR)čeština (CS)Deutsch (DE)English (EN-US)English (EN-GB)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

إجراء مخزن لقتل جميع الاتصالات بقاعدة البيانات أو الخادم المحدد

إجراء مخزن SQL لقتل جميع الاتصالات بقاعدة البيانات أو الخادم المحدد باستثناء العملية التي تستدعيها.

مقدمة

يمكن أن تكون هناك أوقات تحتاج فيها إلى قطع اتصال كافة المستخدمين بقاعدة البيانات الخاصة بك ، أحد الأمثلة على ذلك هو النسخ المتماثل لـ 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

Author

Was this helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink سياسة ملفات الارتباطخريطة الموقع

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
The settings on this site are set to allow all cookies. These can be changed on our Cookie Policy & Settings page.
By continuing to use this site you agree to the use of cookies.
Ousia Logo
Logout
Ousia CMS Loader