رفع یک مشکل متداول هنگام Restore نمودن پایگاه داده

چهارشنبه 26 تیر 1392

رفع یک مشکل متداول هنگام Restore نمودن پایگاه داده <br/> احتمالا تاکنون هنگام Restore نمودن یک پایگاه داده با خطای زیر مواجه شده اید.


احتمالا تاکنون هنگام Restore نمودن یک پایگاه داده با خطای زیر مواجه شده اید.

 

Msg 3101, Level 16, State 1, Line 1
Exclusive access could not be obtained because the database is in use.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

البته مشکل فوق زمانی پیش خواهد آمد که پایگاه داده توسط شخص یا برنامه ای در حال استفاده باشد و تا زمانی که این اتصالات وجود داشته باشند امکان Restore نمودن پایگاه داده وجود ندارد.

معمولا در این هنگام با Restart نمودن سرور برنامه SQL Server مشکل خاتمه می یابد و پس از آن به راحتی می توان پایگاده داده را Restore نمود. اما این عمل گاهی به سادگی امکان پذیر نیست و یا مشکلات دیگری را در پی خواهد داشت.

Restart نمودن سرور برنامه SQL Server باعث می شود که برای مدتی (در حین راه اندازی مجدد سرور) تمام پایگاه های داده موجود در این سرور از کار بیفتند و بدیهی می باشد که این مسئله می تواند مشکلاتی را برای سایر پایگاه های داده به وجود آورد. و ضمنا با توجه به تعداد پایگاه های داده و سایر عوامل، عمل راه اندازی مجدد سرور می تواند زمانبر باشد.
راه حل:

با استفاده از اسکریپت زیر می توان تمام اتصالات زنده ی موجود به یک پایگاه داده خاص را از بین برد.

Use Master
Go

Declare @dbname sysname

Set @dbname = 'databaseName'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
       Execute ('Kill ' + @spid)
       Select @spid = min(spid) from master.dbo.sysprocesses
       where dbid = db_id(@dbnameand spid > @spid
End

MohammadJavad

نویسنده 86 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید