PDA

View Full Version : مشکل این کد برای restore کجاست؟



veniz2008
چهارشنبه 07 تیر 1391, 22:03 عصر
سلام دوستان،من از stored procedure زیر برای restore استفاده میکنم ولی خطا میده،اینم عکسی از خطا،مشکلش کجاست؟
88852

baktash.n81@gmail.com
پنج شنبه 08 تیر 1391, 14:43 عصر
خطای اول که معلومه نمی تونید از گزینه Use درونSP استفاده کنید ...

اون With آخر رو برای چی نوشتید ؟؟ یعنی چه کاری قراره انجام بده ...

veniz2008
پنج شنبه 08 تیر 1391, 15:49 عصر
من براساس کد زیر داخل محیط سی شارپ عمل Restore رو بدرستی انجام میدم،حالا میخوام این کد رو به پروسیجر تبدیل کنم،در واقع آدرس فایل بک آپ رو بهش بدم و عمل restore انجام بشه:
کد نوشته شده در محیط #C :

ALTER DATABASE tel SET SINGLE_USER with ROLLBACK IMMEDIATE Use master
RESTORE DATABASE tel FROM DISK='" + txtselectbackup.Text + "' WITH REPLACE
حالا شما با توجه به این دستور، sp ای رو که من نوشتم ایرادش کجاست؟چرا داخل محیط ویژوال use رو قبول میکنه ولی داخل sql قبول نمیکنه؟

حمیدرضاصادقیان
پنج شنبه 08 تیر 1391, 18:17 عصر
سلام.
داخل یک Stored Procedure نمیتوانید یک دیتابیس دیگه رو Use کنید. به خاطر اینکه اون Procedure داره داخل اون دیتابیس اجرا میشه و با این روش ارتباط با اون دیتابیس قطع میشه و مشکل ایجاد خواهد شد.
شما میتوانید داخل یک SP ابتدا User های متصل به اون دیتابیس رو Kill کنید سپس Restore رو انجام بدید.

veniz2008
پنج شنبه 08 تیر 1391, 21:06 عصر
سلام.
داخل یک Stored Procedure نمیتوانید یک دیتابیس دیگه رو Use کنید. به خاطر اینکه اون Procedure داره داخل اون دیتابیس اجرا میشه و با این روش ارتباط با اون دیتابیس قطع میشه و مشکل ایجاد خواهد شد.
شما میتوانید داخل یک SP ابتدا User های متصل به اون دیتابیس رو Kill کنید سپس Restore رو انجام بدید.
من نمیدونم چطوری باید user ها رو kill کنم، میشه بیشتر توضیح بدید یعنی با چه کدی باید اینکار رو انجام بدیم؟

alimanam
سه شنبه 13 تیر 1391, 21:32 عصر
با سلام


من نمیدونم چطوری باید user ها رو kill کنم، میشه بیشتر توضیح بدید یعنی با چه کدی باید اینکار رو انجام بدیم؟

یک روش ساده استفاده از کد زیر است :

ALTER DATABASE <Put Your Database Here> SET OFFLINE WITH ROLLBACK IMMEDIATE

موفـــق باشید./

veniz2008
یک شنبه 18 تیر 1391, 11:20 صبح
دوستان من sp مربوط به restore رو بصورت زیر نوشتم و بدون خطا اجرا شد ولی درون محیط ویژوال که میخوام این sp رو صدا بزنم و دیتابیس رو restore کنم با خطای زیر مواجه میشم:
کد sp :

create proc myrestore2
@pathfile nvarchar(300)
as
ALTER DATABASE tel SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE tel FROM DISK= @pathfile WITH REPLACE
go
خطای اتفاق افتاده درون ویژوال استودیو:
89371

حمیدرضاصادقیان
یک شنبه 18 تیر 1391, 11:35 صبح
خوب شما بعد از Restore باید دیتابیس رو به online تبدیل کنید.با استفاده از
Alter Databse DBname Set online

veniz2008
یک شنبه 18 تیر 1391, 16:48 عصر
آقا این کد آدمو بدبخت میکنه!!!!!
من کدی رو که داده بودید به آخر sp خودم اضافه کردم ولی یه مشکل عجیب پیش میاد. بعد از زدن دکمه restore اطلاعات به درستی بازیابی میشن ولی sp از درون sql و قسمت stored procedure هام حذف میشه(نه تنها اون sp بلکه بقیه sp های مربوط به restore رو که بصورت آزمایشی ایجاد کرده بودم همه رو پاک کرد، در واقع انگار روی تک تک sp های مربوط به restore کلیک راست کرده باشیم و delete رو زده باشیم). یعنی بار اول برنامه به درستی اجرا میشه وقتی برنامه رو میبندم و دوباره اجرا میکنم و میخوام دوباره بازیابی اطلاعات کنم پیغام خطا میده که این sp وجود نداره که همونطور که گفتم با مراجعه به sql ، میبینم که sp حذف شده( در واقع همه sp های مربوط به restore حذف میشن). چند بار تست کردم ولی همین مشکل وجود داره. لطفا راهنمایی کنید. اینم sp ای که استفاده میکنم:

create proc myrestore5
@pathfile nvarchar(300)
as
ALTER DATABASE tel SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE tel
FROM DISK= @pathfile with replace alter database tel set online
go

veniz2008
چهارشنبه 21 تیر 1391, 16:07 عصر
چرا از دوستان کسی راهنمایی نمیکنه؟؟؟، کاملا واسم عجیبه که این سوال این همه مدت باقی مونده و کسی یه راهنمایی جامع نمیکنه.
واسه من عجیب و جالبه که چرا این کد تمام spهای مربوط به restore رو پاک میکنه. از دوستان و مدیران این بخش تقاضا دارم که به تاپیک هایی که ایجاد میشه توجه کنند. لطفا راهنمایی کنید.

حمیدرضاصادقیان
چهارشنبه 21 تیر 1391, 16:32 عصر
دوستان و مدیران این بخش تقاضا دارم که به تاپیک هایی که ایجاد میشه توجه کنند
تمامی دوستان و مدیران هم سرکار هستند و مشغولند.اگر فرصت کنند جواب خواهند داد.

این کد ربطی به حذف شدن sp های شما نداره.
ممکنه اون backup که دارید بازیابی میکنید قبل از ایجاد شدن اون sp ها تهیه شده. شما ابتدا آخرین backup رو بازیابی کنید و تمامی تغییرات رو بدید و ازش یک backup گرفته و مجدد restore کنید.
شما هر backup که بازیابی میکنید در واقع آخرین تغییراتی که تا اون لحظه در دیتابیس بوده و ازش backup گرفته شده restore میکنه و اگر بعد از اون هرکاری کرده باشید با Restore اون backup همه اونها حذف خواهند شد، دقیقا مشابه همین اتفاقی که برای شما رخ داده.

veniz2008
چهارشنبه 21 تیر 1391, 17:19 عصر
اوکی حل شد، نکته اش همون بود که گفتید. از جناب صادقیان و بقیه دوستان که کمک کردن تا مشکلم حل بشه تشکر میکنم.

ali_habibi1384
پنج شنبه 22 تیر 1391, 17:37 عصر
public Boolean Restore(string PathMainDataBase, string PathFileBackUp)
{
try
{
ExecuteNoneQuery(CommandType.Text, @"use master RESTORE DATABASE [" + PathMainDataBase + "] FROM DISK='" + PathFileBackUp + "'", null);
return true;
}
catch
{
return false;
}
}