PDA

View Full Version : یکی یه کد بدون مشکل از restore بذاره تورو خدا!



hamidhws
شنبه 10 اردیبهشت 1390, 13:55 عصر
سلام

خواهش میکنم دوستان یکی کمک کنه
با بکاپ مشکلی ندارم اما هر چی کد ریستور توی سایتو امتحان میکنم خطا میده
من زیاد با دستورات اس کیو ال آشنا نیستم و از طریق 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
دوشنبه 12 اردیبهشت 1390, 19:39 عصر
چنتا کد که توی سایت هم بود تست کردم اما جواب نگرفتم
یکی محبت کنه یه کد بدون مشکل بذاره ممنون میشم

در حال حاضر از این 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
چهارشنبه 14 اردیبهشت 1390, 06:17 صبح
حداقل یفرمایید چطوری باید همه کانکشن های وصل شده به دیتابیس رو ببندم؟
از دوستان خواهش میکنم راهنمایی کنند
میدونم در این موارد قبلا در موردش توی سایت بحث شده اما یه کد sp میخواستم
ممنون

ehsan.moolaei
چهارشنبه 14 اردیبهشت 1390, 13:23 عصر
حداقل یفرمایید چطوری باید همه کانکشن های وصل شده به دیتابیس رو ببندم؟
توی vs از این کد استفاده کن


SqlClient.SqlConnection.ClearAllPools();

یا


SqlConnection.ClearAllPools();


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

حمیدرضاصادقیان
چهارشنبه 14 اردیبهشت 1390, 13:30 عصر
با استفاده از stored procedures نمیشه ارتباط کانکشن ها رو قطع کرد چون خودش ماله sql هستش و از طریق sql داره sp رو اجرا میکنه

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

ehsan.moolaei
پنج شنبه 15 اردیبهشت 1390, 07:47 صبح
جناب صادقیان میشه این مطلبی رو که گفتین با ذکر مثال بگین
ممنون میشم

hamidhws
شنبه 17 اردیبهشت 1390, 05:25 صبح
ممنون دوست عزیز
میشه در مورد کد ریستور هم راهنماییم کنید؟ ممنون میشم

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

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

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

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


پیشاپیش تشکر

حمیدرضاصادقیان
شنبه 17 اردیبهشت 1390, 11:27 صبح
این مطلبی رو که گفتین با ذکر مثال بگین

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


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


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

ehsan.moolaei
یک شنبه 18 اردیبهشت 1390, 09:01 صبح
با سلام

فرض کنید یه بکاپ دارم با این آدرس c:/test.bak
بیبن اگه توی برنامت واسه restore کردن فرمی رو طراحی کنی که توی اون فرم به وسیله open dialog فایل backup رو انتخاب کنی و به وسیله اون مسیر فایلت رو توی یه textbox بزاری هم ظاهر برنامت زیباتر میشه هم کاربری که با برنامت کار میکنه راحت تره
بعدش واسه همون فرم یه دکمه بازیابی بزار و این کد که کد sql هست رو فراخوانی کن


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

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

hamidhws
یک شنبه 18 اردیبهشت 1390, 20:12 عصر
با سلام

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


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

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

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

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

بازم ممنونم

mohammad kafiyan
شنبه 17 دی 1390, 11:49 صبح
سلام به دوستان من هم نیز دارم با استفاده از store procedure کد مر بوط به restore بنویسم آیا میشه یا نه تا به حال جواب نگرفتم چون اجازه نمی ده عملیات restore
انجام بده
لطفا کد مربوطه را قرار دهید
با تشکر

mar236
شنبه 30 اردیبهشت 1391, 09:59 صبح
یک همچین صحبتی اصلا صحت نداره. شما میتوانید با استفاده از یک Select از جدول Sysprocesses لیست تمام Connection های باز به دیتابیس رو پیدا کنید. سپس تمام اونها رو با استفاده از kill از بین ببرید.
تنها نکته اش این هست که شما باید یک Connection جدا به دیتابیس Master ایجاد کنید.

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