PDA

View Full Version : ریستور پس از تغیرات دیتا بیس



Dr.Saeed
پنج شنبه 05 فروردین 1389, 10:55 صبح
با سلام و تبریک سال نو
دوستان من از برنامه ای بک آپ گرفتمحالا لازمه که بعد ازمدتی دیتا بیسو تغییر بدم حالا از کدهایی که استفاده میکنم تغیرات دیتا بیسو نادیده میگیره یعنی اگه تیبلی اضافه کرده باشم ÷س از ریستور کردن فایل بک آپ قبلی دیگه وجود نداره
ممنون میشم راهنماییم کنید


SqlConnection mycn = new SqlConnection(@"data source=.\SQLEXPRESS;attachdbfilename=|datadirector y|\dbname.mdf;" + "initial catalog=dbname;integrated security=true;connect timeout=30;user instance=true");
mycn.Open();
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;" + " RESTORE DATABASE dbname FROM DISK ='" + TxtRestoreBackPath.Text + "'with Replace";
cmd.Connection = mycn;
cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
mycn.Close();
mycn.Open();
cmd.CommandText =
"ALTER DATABASE db name SET MULTI_USER";
cmd.Connection = mycn;
cmd.ExecuteNonQuery();
mycn.Close();
MessageBox.Show(" \n ", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.ExitThread();

hakelberfin
پنج شنبه 05 فروردین 1389, 12:52 عصر
سلام
دوست عزیز باید هم اینجوری بشه. درستش هم همینه.
شما در هنگام Restore کردن فایلی رو ریستور میکنید که تغییرات روش ثبت نشده .
باید بعد از اعمال تغییرات از دیتابیستون دوباره BackUp بگیرید .

در این کد هم که شما نوشتید و برای Restore کردنه عبارت Replace دیتابیس قبلی(Restore گرفته شده) رو جایگزین فعلی (تغییر داده شده) و درستش هم همینه

Dr.Saeed
جمعه 06 فروردین 1389, 07:07 صبح
با سلام و تشکر
حالا تکلیف چیه
دوستان چطوری این مشکل را حل میکنن برنامه ای که قرار آپدیت بشه و اطلاعات رو هم لازم داره چطوری با ورژن جدید مچ بشه؟

hakelberfin
جمعه 06 فروردین 1389, 11:08 صبح
سلام
چرا لازمه دیتابیس رو تغییر بدی؟
دوست عزیز شما کدتون رو طوری تغییر بدید که موقع خروج از برنامه BackUp گرفته بشه.
البته به عنوان توضیح خدمتتون عرض کنم که تغییر در دیتابیس باید ساختار فعلی رو تغییر نده و فقط افزودنی هایی به ساختار فعلی اضافه کنه . که اگر این افزودنی ها ، فیلدهایی به جداول باشه لازمه که ساختار View هات رو هم Update کنی .

Dr.Saeed
یک شنبه 08 فروردین 1389, 18:13 عصر
با تشکر
دوست عزیز شاید منظورم را درست بیان نکردم
یکی از برنامه های من 6 ماه پیش شروع به کار کرده و خریدار خواستار تغییرات در برنامه و اضافه کردن قسمت هایی شده است حالا اگر بخواهم این تغییرات رو اعمال کنم می بایست تیبل و استورهای جدید تعریف کنم حال اگر بخواهم فایلی که از برنامه قبلی ریستور کنم با کدهای من تیبل جدید در نظر گرفته نمی شود در حالی که اطلاعات خریردار می بایست برگردانده شود در حقیقت کدهایی احتیاج دارم که اطلاعات رو برگردونه و اگر تیبلی اضاف شده باشه نادیده نگیره

hakelberfin
یک شنبه 08 فروردین 1389, 23:06 عصر
سلام دوست عزیز

مشکل شما رو فهمیدم . این مشکل تا الان برای من پیش نیومده ولی شتری که پای برنامه ی هر برنامه نویسی می خوابه.
اگر جداولی که طراحی کردید تغییرات کمی نسبت به قبلی ها داشتند ( اضافه شدن یکی دوتا ستون و نه تغییر نوع داده - اونم از نوع طوفانیش !- ) ، فعلا برای اون ستونها مقدار پیش فرض تعریف کن . ( حتما این کارو بکن ، اگه خواستی بعد از افزودن داده ها میتونی تغییرش بدی )
1.به نظر من حداقل کاری که میتونید انجام بدید اینه که یه برنامه بنویسید و اطلاعات هر جدول رو بخونید و در DataTable ذخیره کنید و بعد داده ها رو از DataTable به جداول جدیدت اضافه کن.
البته در این روش ساختار View هات رو باید بصورت دستی تغییر بدی.
خلاصه حتما نیاز به کدنویسی خواهی داشت.

2.حداکثر کاری هم که میتونی بکنی اینه که شدیدا پیگیر حل این مسئله باشی 1. از طریق اساتید باتجربه ی این سایت (سئوالت رو در تالار SQl هم مطرح کن) 2. جستجوی اینترنتی و ...

حتما بعد از پیدا کردن روش کار ما رو هم بی خبر نذار . باتشکر

FastCode
دوشنبه 09 فروردین 1389, 01:44 صبح
باید یه sqlscript با دیتا وبدون drop بگیری.
توی تالار sql بپرس بهت میگن.(من خودم هم خیلی بلد نیستم ولی مطمئنم گه این بهترین راهه ولی در حجم زیاد ممکنه تا 15 دقیقه زمان ببره.)