محتویات سایت
        برچسب های محبوب 








 
   رفع یک مشکل متداول هنگام Restore نمودن پایگاه داده در Microsoft SQL Server 2005
  در این ترفند به معرفی روشی جهت از بین بردن اتصالات (Connections) زنده ی موجود در پایگاه داده هنگام Restore نمودن یک فایل پشتیبان، می پردازم.
   SQL Server
   ۱۲۰۶۷
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۹/۶/۲
نسخه قابل چاپ نسخه قابل چاپ

احتمالا تاکنون هنگام 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

در اسکریپت بالا باید به جای databaseName نام پایگاه داده ی مورد نظر خود را وارد نمایید.

اکنون بلافاصله می توانید با استفاده از اسکریپت زیر و یا برنامه SQL Server Management Studio پایگاه داده خود را Restore نمایید.

USE Master
GO
RESTORE DATABASE [databaseName]
FROM  DISK = N'physical disk path to the backup file.bak' --example path: c:\program files\microsoft sql server\mssql\backup\databaseName.bak

WITH  FILE = 1,  NOUNLOAD,  REPLACE,  STATS = 10
GO


منبع: ralphwhitbeck