PDA

View Full Version : مشکل در هنگام Restore کردن Data Base



hab3045
سه شنبه 06 مرداد 1388, 00:15 صبح
ضمن خسته نباشی و همچنین تبریک اعیاد شعبانیه خدمت دوستان.
من توی برنامه ام که یک پروژه وب هستش یک قسمت برای گرفتن BackUp و Restore در نظر گرفتم. VS به راحتی دستورات مربوط به BackUp گیری از Data Base را انجام می دهد. ولی هنگام اجرای دسترات Restore با SqlException زیر روبرو می شوم:



User does not have permission to alter database 'SadeghUN' or the database does not exist.
ALTER DATABASE statement failed.
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.


کد مربوط به Restore هم بصورت زیر است:



SqlConnection cn = newSqlConnection(ConfigurationManager.AppSettings["UNcon"]);
SqlCommand Insertcmd = newSqlCommand();
Insertcmd.Connection = cn;
Insertcmd.CommandText =
"ALTER DATABASE SadeghUN SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;"
+ "RESTORE DATABASE @BKName FROM DISK =@Path WITH FILE=1, NOUNLOAD, STATS=10";
Insertcmd.CommandType = CommandType.Text;
Insertcmd.Parameters.AddWithValue("@BKName", HttpContext.Current.Request.PhysicalApplicationPat h + @"App_Data\SadeghUN.mdf");
Insertcmd.Parameters.AddWithValue("@Path", HttpContext.Current.Request.PhysicalApplicationPat h + @"App_Data\BackUp\SU.bak");
try
{
cn.Open();
Insertcmd.ExecuteNonQuery();
}
catch (Exception e1) { }


لازم به توضیح که Data Base پروژه را با Sql Express ایجاد کردم. اگه کسی راه حلی برای این مشکل داره، لطفا کمک کنه

AminSobati
سه شنبه 06 مرداد 1388, 00:59 صبح
سلام دوست عزیزم،
عید شما هم مبارک!
ترجیحا اول use master کنید و بعد alter. اگر باز هم error گرفتین، از طریق exec sp_who2 چک کنید آیا واقعا کسی دیتابیس رو use کرده یا خیر

hab3045
سه شنبه 06 مرداد 1388, 22:59 عصر
با تشکر از شما دوست عزیر!
باید بگم که پیش از این در TSql فوق، راه حل شما یعنی Use Master کردن در ابتدای دستور را امتحان کرده ام، ولی با همین مشکل مواجه شدم. ضمنا دستور 'exec sp_who2 'active نیز امتحان کردم که نتیجه آن این بود که پایگاه داده ی master در حالت background قرار داشت و همچنین پایگاه داده خود پروژه نیز در حالت runnable، فکر می کنم که برای Alter کردن DB نباید هیچ کس(حتی خود برنامه) در حال استفاده از آن باشه! اگه راه راه حلی برای رفع این مشکل به ذهن شما و سایر دوستان رسید لطفا کمک کنید!

AminSobati
چهارشنبه 07 مرداد 1388, 01:01 صبح
وقتی ALTER DATABASE ...ROLLBACK انجام میدین قائدتا دیتابیس نباید Use باشه. اگر در نتیجه sp_who2 دیدین یک Connection به دیتابیس مورد نظر قرار داره، اون رو Kill کنین و Restore رو تکرار کنین.

hab3045
چهارشنبه 07 مرداد 1388, 15:54 عصر
با تشکر از شما، لطفا در مورد kill کردن connection ها با مثال توضیح دهید. متشکرم!

leilab80
سه شنبه 01 تیر 1389, 09:52 صبح
فکر کنم باید در محلی که می خواهید reatore انجام دهید userمربوط به sql را اضافه کنید