ما قبل استرجاع قاعدة البيانات أو حذفها :
أخي الكريم دائماً تواجهنا مشكلة بسيطة عند
استرجاع قاعدة بيانات عندما تكون هذه القاعدة مستخدمه
أي هناك اتصالات مفتوحة إلى تلك القاعدة ;)
ولا بد قبل التفكير بالإسترجاع أو الحذف لقاعدة بيانات أن
نقوم أولاً بإغلاق كافة الإتصالات لكافة المستخدمين بهذه القاعدة .. أليس كذلك
أقدم لك أخي الكريم هذه الإجرائية البسيطة التي تحل مثل هذه المشكلة
ووظيفتها قتل جميع اتصالات المستخدمين بالقاعدة الهدف تمهيداً لاسترجاعها أو حذفها
أتمنى لك الفائدة :)
..
على فكرة وضعت مثال عن استخدامها في أسفل المشاركة
--------------------------
Create Proc Kill_Users @DB Sysname = Null AS if @DB Is Null begin print 'you must provide the db name' return end else if @DB = 'master' begin print 'cann not run this procedure against the master DB' return end Set NoCount On -- Declare Variables Declare @spid int , @q Nvarchar(1000) Declare C_Users Cursor FAST_FORWARD FOR Select spid From master..sysprocesses NoLock Where dbid = db_id(@DB) Open C_Users Fetch Next From C_Users Into @spid While @@Fetch_Status = 0 Begin Set @q = 'Kill ' + Cast( @spid AS Nvarchar(50) ) Exec(@q) Fetch Next From C_Users Into @spid End Close C_Users DeAllocate C_Users GO
-----------
للإختبار افتح اتصالاً جديداً بقاعدة بيانات لديك ولتكن DB
حاول أن تحذف هذه القاعدة كالتالي :
Drop DataBase DB
سيعطيك المصرف خطأ .. على أنها القاعدة مستخدمة حالياً
اختبر الكود التالي :
Kill_Users 'DB' Drop DataBase DB
---------
بالتوفيق ..