# پایگاه‌های داده > SQL Server > مدیریت دیتابیس (Database Administration) > Backup & Restore >  یکی یه کد بدون مشکل از restore بذاره تورو خدا!

## hamidhws

سلام

خواهش میکنم دوستان یکی کمک کنه
با بکاپ مشکلی ندارم اما هر چی کد ریستور توی سایتو امتحان میکنم خطا میده
من زیاد با دستورات اس کیو ال آشنا نیستم و از طریق vs 2010 و قسمت server explorer  برای store procedure  کد مینویسم (بانکمم sql express هست)

وقتی یه sp جدید میسازم یه همچین چیزی میاد

CREATE PROCEDURE dbo.StoredProcedure2
	/*
	(
	@parameter1 int = 5,
	@parameter2 datatype OUTPUT
	)
	*/
AS
	/* SET NOCOUNT ON */
	RETURN


اینو چطوری تغییر بدم که یه ریستور بدون خطا داشته باشم؟ بدون اینکه با مشکلایی از طریق باز بودن کانکشن و ... بر بخورم؟ تورو خدا کمک کنید 2 هفته هست درگیرم

----------


## hamidhws

چنتا کد که توی سایت هم بود تست کردم اما جواب نگرفتم
یکی محبت کنه یه کد بدون مشکل بذاره ممنون میشم

در حال حاضر از این sp استفاده میکنم اما خطا میده 
ALTER PROCEDURE dbo.Restore1
@DataPath Nvarchar(1024),
@DB nvarchar(1024)

AS
ALTER DATABASE  [@DB]  SET SINGLE_USER with ROLLBACK IMMEDIATE
RESTORE DATABASE [@DB] FROM DISK=@DataPath with REPLACE
 
 ALTER DATABASE [@DB] SET MULTI_USER

----------


## hamidhws

حداقل یفرمایید چطوری باید همه کانکشن های وصل شده به دیتابیس رو ببندم؟
از دوستان خواهش میکنم راهنمایی کنند
میدونم در این موارد قبلا در موردش توی سایت بحث شده اما یه کد sp میخواستم
ممنون

----------


## ehsan.moolaei

> حداقل یفرمایید چطوری باید همه کانکشن های وصل شده به دیتابیس رو ببندم؟


توی vs از این کد استفاده کن

SqlClient.SqlConnection.ClearAllPools();

یا

SqlConnection.ClearAllPools();




> اما یه کد sp میخواستم


با استفاده از stored procedures نمیشه ارتباط کانکشن ها رو قطع کرد چون خودش ماله sql هستش و از طریق sql داره sp رو اجرا میکنه
بعد از قطع کردن کانکشن با دستورای بالا دستور restore بانکت رو توی یه بانک دیگه مثل master فراخوانی کن
موفق باشی

----------


## حمیدرضاصادقیان

> با استفاده از stored procedures نمیشه ارتباط کانکشن ها رو قطع کرد چون خودش ماله sql هستش و از طریق sql داره sp رو اجرا میکنه


یک همچین صحبتی اصلا صحت نداره. شما میتوانید با استفاده از یک Select از جدول Sysprocesses لیست تمام Connection های باز به دیتابیس رو پیدا کنید. سپس تمام اونها رو با استفاده از kill  از بین ببرید.
تنها نکته اش این هست که شما باید یک Connection جدا به دیتابیس Master ایجاد کنید.

----------


## ehsan.moolaei

جناب صادقیان میشه این مطلبی رو که گفتین با ذکر مثال بگین
ممنون میشم

----------


## hamidhws

ممنون دوست عزیز
میشه در مورد کد ریستور هم راهنماییم کنید؟ ممنون میشم

فرض کنید یه بکاپ دارم با این آدرس    c:/test.bak

و دیتابیس اصلیم هم توی این آدرسه   c:/data/test.mdf

دقیقا چطوری باید ریستور کنم؟ 

اگه بصورت کد   C#‎) vs) باشه که چه بهتر اما باز اگه کد sp هم باشه  خوبه
لطفا راهنماییم کتید


پیشاپیش تشکر

----------


## حمیدرضاصادقیان

> این مطلبی رو که گفتین با ذکر مثال بگین


ببینید برای بدست آوردن لیست Connection هایی که به یک Database وصل هستند باید از کد زیر استفاده کنید.


select spid from master..sysprocesses where dbid=db_id('database Name')


بعد میتوانید در داخل یک حلقه با استفاده از دستور kill مقدار spid رو به حلقه پاس داده و ارتباطها رو قطع کنید.

----------


## ehsan.moolaei

با سلام



> فرض کنید یه بکاپ دارم با این آدرس c:/test.bak


بیبن اگه توی برنامت واسه restore کردن فرمی رو طراحی کنی که توی اون فرم  به وسیله open dialog فایل backup رو انتخاب کنی و به وسیله اون مسیر فایلت رو توی یه textbox بزاری هم ظاهر برنامت زیباتر میشه هم کاربری که با برنامت کار میکنه راحت تره
بعدش واسه همون فرم یه دکمه بازیابی بزار و این کد که کد sql هست رو فراخوانی کن

Restore Database [database name] From Disk ='+''''+textbox.Text+''''+' With Replace

به جای database nameاسم پایگاهت رو بنویس و به جای textbox اسم textbox ی که مسیر فایل توش می افته رو قرار بده
موفق باشی

----------


## hamidhws

> با سلام
> 
> بیبن اگه توی برنامت واسه restore کردن فرمی رو طراحی کنی که توی اون فرم  به وسیله open dialog فایل backup رو انتخاب کنی و به وسیله اون مسیر فایلت رو توی یه textbox بزاری هم ظاهر برنامت زیباتر میشه هم کاربری که با برنامت کار میکنه راحت تره
> بعدش واسه همون فرم یه دکمه بازیابی بزار و این کد که کد sql هست رو فراخوانی کن
> 
> Restore Database [database name] From Disk ='+''''+textbox.Text+''''+' With Replace
> 
> به جای database nameاسم پایگاهت رو بنویس و به جای textbox اسم textbox ی که مسیر فایل توش می افته رو قرار بده
> موفق باشی


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

از کد شما هم ممنون حتما اونو تست میکنم 

بازم ممنونم

----------


## mohammad kafiyan

سلام به دوستان من هم نیز دارم با استفاده از store procedure کد مر بوط به restore بنویسم آیا میشه یا نه تا به حال جواب نگرفتم چون اجازه نمی ده عملیات   restore
انجام بده
لطفا کد مربوطه را قرار دهید
با تشکر

----------


## mar236

> یک همچین صحبتی اصلا صحت نداره. شما میتوانید با استفاده از یک Select از جدول Sysprocesses لیست تمام Connection های باز به دیتابیس رو پیدا کنید. سپس تمام اونها رو با استفاده از kill  از بین ببرید.
> تنها نکته اش این هست که شما باید یک Connection جدا به دیتابیس Master ایجاد کنید.


اگه ممكنه نمونه كد بزاريد... ممنونم

----------

