PDA

View Full Version : سوال: چگونگی تهیه کپی از فایل های دیتابیس به منظور تهیه پشتیبان



ALPking
یک شنبه 11 تیر 1391, 10:35 صبح
سلام
من میخوام از فایل های sql server express کبی تهیه کنم و به عنوان پشتیبان از انها نگهداری کنم .اما برای تهیه کپی در زمان اجرای برنامه چنیین کاری ممکن نیست و میگه که فایل ها در حال استفاده هستند. sql ام همون sql نهادین در vs.net است. از linq هم استفاده کرده ام. راهی وجود نداره هنگام تهیه پشتیبان ارتباط را با فایل های پایگاه قطع کرد تا بشه ازشون پشتیبان گرفت.
و دومین سوال اینکه اصلا تهیه چنین پشتیبانی چطوره و مزایا و معایبش چیه؟
ممنون میشم جواب بدید

uniqueboy_ara
یک شنبه 11 تیر 1391, 10:54 صبح
آموزش گرفتن Backup و Restore کردن دیتابیس با استفاده از SMO (http://barnamenevis.org/showthread.php?348648-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-Backup-%D9%88-Restore-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-SMO)

ALPking
یک شنبه 11 تیر 1391, 11:51 صبح
ممنون جواب دادید.در مورد روش خودم پاسخی ندارید
خواهشا به سوالات خودم پاسخ بدید

uniqueboy_ara
یک شنبه 11 تیر 1391, 13:15 عصر
خوب کاری که شما میخواید، یه کم غیر منطقیه!
حجم فایل بک آپ به شدت از فایل دیتا بیس کمتره و همه اطلاعات رو هم روی خودش داره!

veniz2008
یک شنبه 11 تیر 1391, 15:23 عصر
سلام،این کار به راحتی قابل انجام هستش(البته من از linq استفاده نکردم )،ابتدا درون محیط sql یک stored procedure خیلی کوتاه مینویسید، بدین صورت:
تذکر : دوستان این تگ span که در کد مشاهده میکنید کار من نیست (جزء کد نیست)، بعضی مواقع ادیتور سایت از این شیرین کاری ها میکنه. سعی کردم حذفش کنم ولی نشد.

create proc backupdatabase
@path nvarchar(250)
as
backup database [database1] to disk = @path with init
go
حالا تو محیط ویژوال 2 تا textbox بذارید( اولی مسیر ذخیره شدن پشتیبان رو مشخص میکنه و دومی نام فایل پشتیبانه)،حالا درون دکمه کد زیر رو قرار بدید:

SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=database1;Integrated Security=True");
SqlCommand cmd = new SqlCommand("backupdatabase",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@path", (txtpath.Text + "\\" + txtname.Text + ".bak"));
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("نسخه پشتیبان با موفقیت تهیه گردید");
خودم بر روی دیتابیس هایی که با ویژوال ساخته شدن تست کردم و بدون هیچ مشکلی backup میگیره(پیغام و خطای در حال استفاده بودن هم نمیده).
موفق باشید.

uniqueboy_ara
یک شنبه 11 تیر 1391, 15:43 عصر
محمد جان، الان این دوستمون میاد شما رو هم دعوا میکنه ها! :)
منم براش آموزش Backup گیری گزاشتم، اومد گفت که سوال خودمو جواب بدید!
گویا این دوستمون قصد دارن که خود فایل mdf و ldf رو یه جای دیگه کپی کنن!!!!!!
وگرنه Backup گیری هیچوقت اررور درحال استفاده بودن نمیده! فقط زمانی که بخوای Restore کنی باید دیتابیس در حال استفاده نباشه!

veniz2008
یک شنبه 11 تیر 1391, 16:07 عصر
راس میگی ها،حالا من پاک نمیکنم شاید یه روزی کسی اومد دید و به دردش خورد،این دوستمونم به بزرگواری خودش می بخشه، قصد ما کمک کردن بوده :خجالت:

ALPking
یک شنبه 11 تیر 1391, 16:21 عصر
سلام.خواهش میکنم . اختیار دارید .نفرمایید.
شما حق دارید . آخه میدونید این راهی که من میخوام برم دوز و کلک تنبلا و مبتدی هاست. از اونجایی که من مبتدی هستم و پروژه ای هم که روی اون کار میکنم ارزش کمی داره و خسته ام کرده میخواستم سریع بپیچونمش و نخوام بک آپ گیری واقعی را یاد بگیرم. قبلا هم این کار را کرده بودم ولی با دو تا فایل اجرایی که هم زمان با بسته شدن برنامه اصلی و آزاد شدن فایلهای دیتابیس ، برنامه دوم کپی از فایل ها تهیه می کرد.
حالا که شما اینطور پاسخ دادید قصد کردم که بک آپ گیری را یاد بگیرم ولی متأسفانه من با استور پروسیجر نویسی آشنایی ندارم و تو این زمینه زیادی مبتدی هستم .حالا شما دوستان چه پیشنهادی دارید لطفا کمکم کنید .
(راستی هنوز برام سواله که چطوری میشه داخل یه برنامه چنین کپی ای تهیه کرد)
ممنون

mmd2009
یک شنبه 11 تیر 1391, 16:23 عصر
با سلام.

اینجارو (http://forums.asp.net/t/1290001.aspx/1)ببین. شاید مشکلت رو بتونی حل بکنی

موفق باشید

veniz2008
یک شنبه 11 تیر 1391, 16:49 عصر
خواهش میکنم، یه توصیه بهتون میکنم،شما که وقت میزاری بهتره اصولی مسائل رو یاد بگیرید،چون به مرور زمان به روش های اشتباه عادت میکنید،من طریقه ساخت stored procedure رو در این فیلم کوتاه براتون ساختم،فوق العاده ساده است،فقط باید تمرین کنید.
89040
89041
89042
حجم کل فایل 1 مگابایت هست که امکان آپلود یکباره فایل وجود نداشت( هر 3 قسمت رو دانلود کنید و بعد از زیپ خارج کنید)
موفق باشید.

Y_Safaiee
یک شنبه 11 تیر 1391, 18:43 عصر
با سلام خدمت شما دوست عزیز

منم یه راه حل دارم برات,اگه دوست داری یه جور دیگه بک آپ بگیری یه پروژه دیگه برای بک آپ سازی بنویس و فایل Exe اون رو کنار فایلهای پروژه اصلیت بزار,یعنی چی الان میگم:
یعنی کنار فایل اصلیت یه برنامه دیگه برای بک آپ گیریه و چون اصلا مرتبط با دیتابیس نیست و کارش فقط کپی کردنه راحت و بدون ارور کار میکنه (چون دیتابیست در حال اجرا نیست)

به همین راحتی

موفق باشین
بایت بایت

ALPking
یک شنبه 11 تیر 1391, 18:53 عصر
سلام
ممنون حتما می بینم
راستش داشتم روی روش خودم با راهکار دوستمون پیش میرفتم .آمدم اجرا بگیرم ببینم درست کار می کنه که برق رفت و حالا برنامه ام در فایل setting برنامه خطای زیر را میده. حالا دیگه این شد قوز بالای قوز نمیدوننم چکارش کنم :
Configuration system failed to initialize
اگه دوستان راه حلی براش دارند که راهنمایی کنند و اگه نه که یه تاپیک جدید براش درست کنم
ممنون

ALPking
یک شنبه 11 تیر 1391, 18:58 عصر
ممنون از youuness
قبلا ها این کار را میکردم ولی الان قصد کردم یا از دستورات sql استفاده کنم یا در حین اجرای برنامه این کار را بکنم که فکر کنم روش دوم را پیدا کردم ولی حیف که این مشکل در فایل setting به وجود آمد و فعلا مشکل اصلی منه.
بازم ممنون

ALPking
یک شنبه 11 تیر 1391, 19:17 عصر
ممنون از mmd 2009
سایتی که معرفی کردید رفتم و راه حلی که گفته بود آزمایش کردم جواب داد البته با کمی دست کاری. این کدی هست که من برای این کار نوشتم:

SqlConnection con = newSqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\dbSalabati.mdf;Integrated Security=True;User Instance=True";
if (con.State == ConnectionState.Open)
{
con.Close();
SqlConnection.ClearPool(con);
con.Dispose();
}
File.Copy(Application.StartupPath + @"\dbSalabati.mdf", folderBrowserDialog1.SelectedPath + @"\"+ tarikhBackUp +".mdf");
File.Copy(Application.StartupPath + @"\dbSalabati_log.ldf", folderBrowserDialog1.SelectedPath + @"\" + tarikhBackUp + ".ldf");
MessageBox.Show("پشتیبان تهیه شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);

انشاله که به درد بخوره.
وبرگردیم سر مشکل جدید من با app.config و setting.cs

pooyan3000
یک شنبه 11 تیر 1391, 19:26 عصر
[QUOTE=mohammaddou;1538504]سلام،این کار به راحتی قابل انجام هستش(البته من از linq استفاده نکردم )،ابتدا درون محیط sql یک stored procedure خیلی کوتاه مینویسید، بدین صورت:

create proc backupdatabase
@path nvarchar(250)
as
backup database [database1] to disk = @path with init
go

دوست عزیز اگه یه برنامه تحت وب باشه و برای مسیر بکاپ در procedure مثلاً درایو c رو به صورت دستی مشخص کنیم، آیا اون بکاپ در درایو c سرور قرار می گیره یا در درایو c کاربر؟
اگه بخوایم فایل بکاپ به طور خودکار در سرور قرار بگیره چیکار باید بکنیم؟

merlin425
پنج شنبه 15 تیر 1391, 20:19 عصر
سلام دوستان این روشی که اقای mohammaddou اموزش دادن خیلی جالب بود :کف: راستش من هم به روش اقای ALPking عمل میکردم و همین مشکل رو داشتم تا این که این تاپیک رو خوندم البته روش رو هنوز امتحان نکردم اما اگر ممکن روش Restore کردن این فایل رو که با این روش تهیه کردیم هم میگید :خجالت:

با تشکر

ALPking
جمعه 16 تیر 1391, 09:04 صبح
سلام .منتظر روش restoreهستیم

darkwish
چهارشنبه 21 تیر 1391, 17:34 عصر
سلام دوست عزیز کدی رو ک گذاشتی یه کم توضیح برای ما بده .

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



create proc myrestore
@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

حالا درون دکمه مربوط به انتخاب فایل بک آپ، کدهای زیر رو قرار بدید( این کدها بعد از باز شدن openfiledialog ، فقط فایل های بک آپ رو با پسوند bak. نشون میده و در صورت انتخاب شدن یک فایل مسیر و نام اون فایل رو درون تکست باکس میریزه):

openFileDialog1.Filter = "(*.bak)|*.bak";
if(openFileDialog1.ShowDialog() == DialogResult.OK)
txtselectbackup.Text = openFileDialog1.FileName.ToString();
حالا درون دکمه بازیابی اطلاعات کدهای اصلی برنامه رو قرار میدیم، به اینصورت:

if (txtselectbackup.Text != "")
{
SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=tel;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myrestore";
cmd.Parameters.AddWithValue("@pathfile", (txtselectbackup.Text));
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی اطلاعات با موفقیت انجام شد");
Application.Restart();
}
else
txtselectbackup.Focus();
توجه : برای جلوگیری از تغییرات احتمالی در مسیر فایل پشتیبان انتخاب شده، خاصیت ReadOnly مربوط به textbox رو True کنید.
تذکر : این نکته رو مد نظر داشته باشید که اگر قبلا یه فایل پشتیبان تهیه کردید و حالا میخواید که بازیابی رو انجام بدید حتما از آخرین تغییراتی که در برنامه انجام دادید یک پشتیبان جدید تهیه کنید و با همین پشتیبان جدید، اقدام به بازیابی کنید.
موفق باشید.

ehsan7007
چهارشنبه 01 شهریور 1391, 16:33 عصر
ممنون از زحمات شما.
میشه لطف کنید و اموزش تصویریش رو هم مثل قبلی بزارید؟

ahmad1010
چهارشنبه 01 شهریور 1391, 16:39 عصر
سلام
اگه فقط قصد دارید تا فایل های دیتابیس رو در جای دیگه کپی کنید باید ابتدا آنها را از SQL SERVER خود Deatch نمایید. برای این کار روی پایگاه مورد نظر در قسمت دیتابیس های SQLSERVER راست کلیک نموده و گزینه Deatch را انتخاب نمایید.
به این لینک (http://barnamenevis.org/showthread.php?354590-%D9%85%D9%82%D8%A7%D9%84%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D9%85%D9%84-detach-%D9%88-attach-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%87%D8%A7-%28-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%AA%D8%B5%D9%88%DB%8C%D8%B1-%29) هم سری بزن

veniz2008
چهارشنبه 01 شهریور 1391, 16:43 عصر
کجاش رو مشکل دارید؟. بعید میدونم جاییش ابهام داشته باشه. هرجاشو سوال داری بگو تا توضیح بدم.

ehsan7007
پنج شنبه 02 شهریور 1391, 09:53 صبح
این چرا ارور میده ؟؟؟ :متعجب:



91714

veniz2008
پنج شنبه 02 شهریور 1391, 10:04 صبح
اسم دیتابیست database1 هست؟

ehsan7007
پنج شنبه 02 شهریور 1391, 10:09 صبح
اره ، به صورت پیش فرض هستش.

veniz2008
پنج شنبه 02 شهریور 1391, 10:34 صبح
sp رو داخل sql server تست کردی؟( منظورم sql ای که خود ویژوال داره نیست).

ehsan7007
پنج شنبه 02 شهریور 1391, 10:39 صبح
نه ، اصلا نصب ندارم!!

veniz2008
پنج شنبه 02 شهریور 1391, 10:52 صبح
ببین دوست من، خودم یکبار کامل اجرا و تست کردم هیچ مشکلی نداشت. شما مراحل زیر رو انجام بده:
یه دیتابیس درون ویژوال بساز ( یعنی از قسمت server explorer ). بعدش یه جدول آزمایشی هم درست کن. ( اگر اینکارها رو قبلا انجام دادی دیگه نیازی نیست). حالا در قسمت stored procedure این sp رو بنویس و ذخیره کن. به جای کلمه go از کلمه return استفاده کن. به اینصورت:


create proc mybackup2
@path nvarchar(250)
as
backup database database1 to disk = @path with init
return

ehsan7007
پنج شنبه 02 شهریور 1391, 10:58 صبح
ممنون ، حل شد.
فقط تو ری استور کردن هم همین کار رو بکنم؟
و یه چیزه دیگه ، اینطوری تا چه حجمی رو پشتیبانی می کنه و مشکلی نداره؟ (منظورم حجم دیتابیس هستش)

veniz2008
پنج شنبه 02 شهریور 1391, 11:14 صبح
ممنون ، حل شد.
فقط تو ری استور کردن هم همین کار رو بکنم؟
و یه چیزه دیگه ، اینطوری تا چه حجمی رو پشتیبانی می کنه و مشکلی نداره؟ (منظورم حجم دیتابیس هستش)
برای restore هم دقیقا وضع به همین منوال هست. اینکه تا چه حجمی رو پشتیبان میکنه بستگی به مواردی مثل: مشغول بودن cpu، مقدار ram در دسترس و ... داره.همونطور که قبلا هم گفتم استفاده از روش معمولی برای دیتابیس های حجیم اصلا درست نیست و در عمل هم جواب نمیده چون اکثر سیستم هایی که برنامه روشون نصب میشه از لحاظ سخت افزاری متوسط روبه پایین هستن که قطعا با مشکل مواجه میشیم.

ehsan7007
پنج شنبه 02 شهریور 1391, 17:03 عصر
اقا شرمنده هی مزاحم میشم!! :گریه:

یه سوال کلی داشتم :

چه تو این برنامه چه برنامه های قبلیم ، وقتی همچیزم درسته به cmd.ExecuteNonQuery(); گیر میده.
البته برای بک آپ خطاش اینه :


Database 'database1' does not exist. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.

در صورتی که مطمئن هستم که نام دیتابیسم درسته.
حالا اگه cmd.ExecuteNonQuery(); رو حذف کنم ، مشکلی پیش میاد؟؟؟!!!
اخه با حذفش شرش کنده می شه!!

ehsan7007
پنج شنبه 02 شهریور 1391, 17:11 عصر
حالا که تست می کنم می بینم با حذفش فقط ظاهرا درست می شه و اصلا فایل بک اپی نمیده !!
و فقط مسیج باکس "نسخه پشتیبان با موفقیت تهیه گردید" ظاهر میشه و در عمل فایلی ساخته نمی شه!!

ehsan7007
پنج شنبه 02 شهریور 1391, 17:42 عصر
دوستان یکی بگه چیکار کنم دیگه.
این ارور جدیدشه :
ExecuteNonQuery: Connection property has not been initialized.

mohammad kafiyan
پنج شنبه 02 شهریور 1391, 18:49 عصر
سلام دوست عزیز آقای mohammaddou (http://barnamenevis.org/member.php?155296-mohammaddou)
سوالی داشتم می خواستم بدونم که این sp را کجا باید ایجاد کنیم صد در صد که بانک خودمان نیست لطفا بیشتر ارهنمایی کنید


create proc myrestore
@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



چون در زمان Restore‌ كليه كانكشن هاي مربوط به برنامه را قطع می شود تا بتواند اين عمليات (Restore ) را انجام دهيد
اگر واقعا جواب گرفته اید یک نمونه برنامه بگذارید
با تشکر

ehsan7007
پنج شنبه 02 شهریور 1391, 22:28 عصر
از دوستان کسی مشکل منو نمیدونه؟
حضرت ایوب جای من بود خود کشی کرده بود از این همه ارور !! :گریه:

veniz2008
پنج شنبه 02 شهریور 1391, 23:39 عصر
دوست عزیز با خودت چکار کردی؟، تمامی spها باید درون دیتابیس و در قسمت stored procedure ایجاد بشن. اگر اونجا نذاریم کجا بزاریم؟؟؟
من در قسمت مربوط به ری استور با رنگ قرمز نوشتم :"تذکر". گفتم قبلا از اینکه ری استور رو انجام بدید حتما یه بک آپ قبلش بگیرید.
از قسمت server explorer دیتابیس خودتون رو انتخاب و وارد قسمت stored procedure بشید. sp های بک آپ و ری استور رو بسازید. بعد از اینکه هر دو sp رو ساختید داخل محیط ویژوال یه بک آپ بگیرید. حالا با خیال راحت ری استور رو اجرا کنید. بازم تاکید میکنم اگه بعدا یه sp جدید ساختید اول یه بک آپ جدید بگیرید بعد ری استور رو با همین بک آپ جدیدی که گرفتید انجام بدید.

veniz2008
پنج شنبه 02 شهریور 1391, 23:46 عصر
حالا که تست می کنم می بینم با حذفش فقط ظاهرا درست می شه و اصلا فایل بک اپی نمیده !!
و فقط مسیج باکس "نسخه پشتیبان با موفقیت تهیه گردید" ظاهر میشه و در عمل فایلی ساخته نمی شه!!
دوست عزیز حتما باید command رو اجرا کنید ( یعنی cmd.ExecuteNonQuery ) . اون پیغامی هم که واسه بک آپ داده میگه database1 رو نمیشناسه. قطعا یه جای کا رو رعایت نکردی. طبق توضیحاتی که در پست قبل دادم عمل کن.

ehsan7007
جمعه 03 شهریور 1391, 08:45 صبح
سلام.
ممنونم که پیگیر هستید.
اسم دیتابیسم Database1 هست و در پوشه ی Debug هم قرار داره. connection استرینگم هم درسته . چون من با همون کانکشن استرینگ دیتابیسرو پر می کنم.
این هم کانکشن استرینگم :
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

درضمن ، اون چیزایی رو هم که تو پست 36 گفتید انجام داده بودم!
به قول شما یه جای کار می لنگه ولی نمیدونم کجا!!
نمیتونم یه برنامه ی جدا کنار برنامه ی اصلیم برای بک آپ و ری استور کردن ، با همین روش شما درست کنم؟

veniz2008
جمعه 03 شهریور 1391, 10:18 صبح
سلام.
ممنونم که پیگیر هستید.
اسم دیتابیسم Database1 هست و در پوشه ی Debug هم قرار داره. connection استرینگم هم درسته . چون من با همون کانکشن استرینگ دیتابیسرو پر می کنم.
این هم کانکشن استرینگم :
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

درضمن ، اون چیزایی رو هم که تو پست 36 گفتید انجام داده بودم!
به قول شما یه جای کار می لنگه ولی نمیدونم کجا!!
نمیتونم یه برنامه ی جدا کنار برنامه ی اصلیم برای بک آپ و ری استور کردن ، با همین روش شما درست کنم؟راستشو بخوای من تا حالا با مشکل شما مواجه نشدم. احتمال زیاد میدم که دیتاسورسی که در کانکشن استرینگ نوشتی ( منظورم sqlexoress هست) رو نمیشناسه. مطمئنی database1 با sqlexpress جواب میده؟. با یه دیتابیس جدید هم تست کن. من خودم چندین بار تست کردم مشکلی نداشتم.

ehsan7007
جمعه 03 شهریور 1391, 13:19 عصر
گفتم که ، با همین کانکشن استرینگ اطلاعات رو درج می کنم و اگر مشکلی داشته باشه اونجا هم جواب نمیده.

ehsan7007
جمعه 03 شهریور 1391, 13:25 عصر
به Query ربطی نداره ؟
به دیتا سورس چطور؟
با اضافه کردن یهQuery ارورش به اون دومیه تغییر کرد.

ehsan7007
جمعه 03 شهریور 1391, 16:46 عصر
اگر کسی پاسخ مشکل منو می دونی لطفا راهنمایی کنه.
باتشکر از دوستان.

ehsan7007
جمعه 03 شهریور 1391, 18:34 عصر
بابا یکی بگه من چیکار کنم!!
:گریه:

mohammad kafiyan
شنبه 04 شهریور 1391, 09:29 صبح
سلام به دوستان
دوست عزیز دیگر آنقدر هم :چشمک: نیستم بله می دونم کجا sp را باید ایجاد کنم
کد sp store شما را استفاده کردم جواب هم گرفتم اما با تغییرات که به sp backup,sp resotre دادم (کد های قبلی را حذف کردم به جای آن از کد های شما استفاده کردم و جواب هم گرفتم با تشکر از شما)
کد های قبلی این ها بودند
backup:



ALTER PROCEDURE [dbo].[anbar_backup]
(
-- Add the parameters for the stored procedure here
@Filename NVARCHAR(MAX)
)
AS
BEGIN
SET NOCOUNT ON

BACKUP DATABASE [anbar]
TO DISK = @Filename
WITH INIT,
NOUNLOAD,
NAME = N'MyDataBaseName',
NOSKIP,
STATS = 10,
NOFORMAT
END

resrore :



ALTER PROCEDURE [dbo].[anbar_restore]
(
@strFileName nvarchar(50)
)
AS


ALTER DATABASE [anbar] SET single_user WITH ROLLBACK IMMEDIATE

Restore Database [anbar] From Disk =@strFileName

WITH FILE= 1, NOUNLOAD,REPLACE, STATS = 10 ALTER DATABASE [anbar] SET MULTI_USER

RETURN

مشکل با کد backup که خودم گذاشتم نداشت و baزkup انجام می شد ولی مشکل با restore بود
لطفا اگر اطلاعاتی در مورد پارامتر های که در کد backup مشخص شده توضیحاتی بدهید


لطفا اگر در مورد پارامترهای مربوط به کدام backup full و backup عادی (از فایل ldf)

veniz2008
شنبه 04 شهریور 1391, 09:59 صبح
سلام دوست عزیز آقای mohammaddou (http://barnamenevis.org/member.php?155296-mohammaddou)
سوالی داشتم می خواستم بدونم که این sp را کجا باید ایجاد کنیم صد در صد که بانک خودمان نیست لطفا بیشتر ارهنمایی کنید

چون در زمان Restore‌ كليه كانكشن هاي مربوط به برنامه را قطع می شود تا بتواند اين عمليات (Restore ) را انجام دهيد
اگر واقعا جواب گرفته اید یک نمونه برنامه بگذارید
با تشکر


سلام به دوستان
دوست عزیز دیگر آنقدر هم :چشمک: نیستم بله می دونم کجا sp را باید ایجاد کنم

لطفا اگر در مورد پارامترهای مربوط به کدام backup full و backup عادی (از فایل ldf)
وقتی این دو پست شما رو کنار هم میزارم متوجه نمیشم آخرش میدونید باید sp رو کجا بنویسی یا نمیدونید؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!
در مورد سوالی هم که پرسیدید اطلاعی ندارم.

mohammad kafiyan
شنبه 04 شهریور 1391, 13:38 عصر
سلام دوست عزیز


وقتی این دو پست شما رو کنار هم میزارم متوجه نمیشم آخرش میدونید باید sp رو کجا بنویسی یا نمیدونید

مثل اینکه متوجه منظور من نشدی در همان پست اول هم گفتم
منظورم این بود که آیا در master باید sp را ایجاد کنم و یا در بانک خودم
در پست بعدی که گذاشتم گفتم که با sp restore مشکل دارم چون قبلا درون بانکم این sp را ایجاد می کردم ولی error می داد و اجازه بازیابی را نمی داد

AmirGhasemi
شنبه 04 شهریور 1391, 15:58 عصر
آقا محمد من اگه بخواهم در spجوري تعريف كنم كه حتي نام databaseرا هم از يك تكست باكس بخونه چه شكلي بايد sp را تغيير بدهم؟؟؟

veniz2008
شنبه 04 شهریور 1391, 16:19 عصر
سلام دوست عزیز

مثل اینکه متوجه منظور من نشدی در همان پست اول هم گفتم
منظورم این بود که آیا در master باید sp را ایجاد کنم و یا در بانک خودم
در پست بعدی که گذاشتم گفتم که با sp restore مشکل دارم چون قبلا درون بانکم این sp را ایجاد می کردم ولی error می داد و اجازه بازیابی را نمی داد
اگر پست بعد از پست خودتون رو مطالعه میکردید گفته بودم که باید داخل بانک خودتون ( نه دیتابیس master ) باید spها رو بنویسید.


آقا محمد من اگه بخواهم در spجوري تعريف كنم كه حتي نام databaseرا هم از يك تكست باكس بخونه چه شكلي بايد sp را تغيير بدهم؟؟؟
وقتی ما sp رو داخل همون دیتابیس ایجاد میکنیم نیازی به این کار نیست. اینکار زمانی کاربرد داره که شما بخوای مثلا داخل یه دیتابیس دیگه ( مثل master) بیای یه دیتابیس دیگه رو ازش بک آپ یا ری استور بگیری (هرچند در اینحالت هم ضرورتی نداره). من تست نکردم ولی میتونید یه متغیر دیگه هم تعریف کنید و نام دیتابیس رو از کاربر دریافت کنید و به جای نام دیتابیس نام اون متغیر رو قرار بدید. خودتون تست کنید و جوابشو بگید.

EBRAHIMIEKOKDARAGHI
جمعه 21 مهر 1391, 13:08 عصر
باسلام
باتشکر از کد مفید تون
فقط توی سیستم من باهر بار اجرا پروسیجر مربوطه حذف میشه چرا اگه میشه توضیح بدین ضروریه!!!

EBRAHIMIEKOKDARAGHI
جمعه 21 مهر 1391, 13:24 عصر
با سلام
و باتشکر از کد مفیدتون
اشکالی که در سیستم من به وجود میاد اینکه پروسیجر مربوطه پس ار اجرا حذف میشه لطفا" پاسح بدین خیلی ضروریه!!

EBRAHIMIEKOKDARAGHI
جمعه 21 مهر 1391, 13:38 عصر
با سلام
وبا تشکر از کد مفیدتون
یک مشکلی برای من در استفاده کردن از کدهای شما یوجود آمده که وقتی از این کد استفاده میکنم کار رو درست انجام میده ولی پس ار اجرا پروسیچر مربوطه حدف میشه لطفا" پاسخ دهید ضروریه !!!

Nima_kyan
جمعه 21 مهر 1391, 14:08 عصر
با سلام
وبا تشکر از کد مفیدتون
یک مشکلی برای من در استفاده کردن از کدهای شما یوجود آمده که وقتی از این کد استفاده میکنم کار رو درست انجام میده ولی پس ار اجرا پروسیچر مربوطه حدف میشه لطفا" پاسخ دهید ضروریه !!!

یعنی چی ؟حذف میشه!!
خوب کدتون رو بزارید ببینیم چطور ازش استفاده کردید؟

EBRAHIMIEKOKDARAGHI
جمعه 21 مهر 1391, 14:21 عصر
با سلام و با تشکر
ALTER PROCEDURE myrestore
@pathfile nvarchar(300)
AS
ALTER DATABASE services SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE services
FROM DISK= @pathfile with replace alter database services set online
return
ضمنا" من در linq از این کد استفاده میکنم
dataServicesDataContext dt = new dataServicesDataContext();
dt.myrestore(ofd.FileName);

Nima_kyan
جمعه 21 مهر 1391, 15:20 عصر
مشکل از کدتون نیست.
احتمال خیلی زیاد فایل پک آپی که شما دارید Restoreش میکند مربوط به قبل از نوشتن این Procedure میشه.
شما Procedure ریستور رو ایجاد کنید و بعد از ایجاد اون یه Backup جدید بگیرید و واسه تست از پک آپ جدید استفاده کنید.

sina.kh
چهارشنبه 01 خرداد 1392, 09:22 صبح
سلام دوستان خسته نباشید
والا من تمام روش ها رو امتحان کردم اما جواب نمیده
من از linq استفاده کردم
کدم هم به شکل زیر نوشتم

create PROCEDURE backupdatabase
@path nvarchar(250)
AS
backup database [parmis] to disk=@path with init
return
و کد برنامم هم به شکل زیر است
var db = new linq_barnameh.linq_backupDataContext();
db.backupdatabase(txtProNet1.Text);

اما ارور زیر را میدهد
104497
یکی به من بگه چیکار کنم گیر کردم
ممنون میشم کمکم کنید