PDA

View Full Version : مقاله: نرم افزار Restore کردن کامل دیتابیس SQL Server + کد برنامه



Chabok
جمعه 25 تیر 1389, 10:24 صبح
http://chaboksoft.com/files/SQLRestore/SQLRIcon.png
نرم افزار Restore کردن کامل دیتابیس SQL Server + کد برنامه

با سلام خدمت دوستان عزیز

همانگونه که مستحضرید Restore کردن صحیح و کامل دیتابیس های MSSQL همیشه دردسرهای خاص خودش را داشته است .

به همین دلیل چند هفته پیش یک برنامه کوچک جهت این کار نوشتم که تصمیم گرفتم آن را به همراه سورس منتشر کنم .

البته سورس کد خاصی نداره . غیر از یک Loading Overlay که با یک ترفند ساده نمایش داده میشه .

محیط برنامه :
http://chaboksoft.com/files/SQLRestore/BNREST_W.JPG

نام سرور و نحوه اتصال را مشخص کنید و Connect را بزنید .
http://chaboksoft.com/files/SQLRestore/BNREST_WCON.JPG

کلیه دیتابیس های موجود روی سرور لیست شده .
باید دیتابیس مقصد برای بازگردانی فایل پشتیبان انتخاب شود .
سپس فایل پشتیبان را نیز انتخاب کنید .
http://chaboksoft.com/files/SQLRestore/BNREST_WDB.JPG

کلید Restore database from backup file را کلیک کنید .
در ابتدا برنامه اطلاعات فایل پشتیبان را می خواند .
http://chaboksoft.com/files/SQLRestore/BNREST_WVRF.JPG

و پس از تست صحیح بودن فایل پشتیبان و گرفتن اطلاعات آن یک تایید مجدد از کاربر برای انجام عمل Restore گرفته می شود .
http://chaboksoft.com/files/SQLRestore/BNREST_WVRFD.JPG
http://chaboksoft.com/files/SQLRestore/BNREST_WSURE.JPG

در صورت تایید عملیات Restore آغاز می شود .
http://chaboksoft.com/files/SQLRestore/BNREST_WRST.JPG
و انشالله اگر خطایی رخ ندهد پیغام Restore Completed نمایش داده خواهد شد .:لبخند:
http://chaboksoft.com/files/SQLRestore/BNREST_WRSTD.JPG

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

برنامه توسط VS 2008 و تحت dotNetFramework v2 نوشته شده است .

با تشکر

Chabok
جمعه 25 تیر 1389, 10:29 صبح
الگوریتم کاری برنامه

برای Restore کردن یک دیتابیس در برنامه از دستور زیر استفاده میشه .
که عبارت های داخل {} نمایش دهنده مقادیری است که باید جایگزین شوند .

RESTORE DATABASE [DBName] FROM DISK = N'.Bak File path' WITH FILE = 1, MOVE N'.bak Data LogicalName' TO N'DB MDF path', MOVE N'.bak Log LogicalName' TO N'DB LDF path', NOUNLOAD, REPLACE, STATS = 10

فایل های backup دیتابیس MSSQL شامل هر دو فایل Data,Log می باشند که هر کدام یک LogicalName دارند .
که در دستور بالا توسط bak Data LogicalName و bak Log LogicalName مشخص شده اند .

DB MDF path و DB LDF path نیز مسیر فایل های Data,Log دیتابیسی که میخواهیم فایل پشتیبانی را روی آن بریزیم مشخص می کند.

برای بدست آوردن اطلاعات فایل پشتیبان (LogicalName های Data,Log) باید از این دستور استفاده کرد .
RESTORE FILELISTONLY from disk='Bak FilePath'
http://chaboksoft.com/files/SQLRestore/BNREST_BAKNFO.JPG

که ما به LogicalName و Type نیاز داریم .در ستون Type ، حرف D مشخص کننده Data و L مشخص کننده Log است .

همانگونه که قبل تر گفته شد ما به مسیر فایل های Data و Log دیتابیس مقصد نیز احتیاج داریم .
که توسط sys.master_files به مسیر فایل ها و sys.sysdatabases به اطلاعات دیتابیس ها دسترسی خواهیم داشت .

که برای لیست کردن کلیه دیتابیس ها همراه با مسیر فایل های Data و Log کوئری زیر را نوشتم :
http://chaboksoft.com/files/SQLRestore/BNREST_ALLDB.JPG

فقط تنها نکته ای که باقی می ماند این است که پس از Restore کردن دیتابیس از روی فایل پشتیبان LogicalName های دیتابیس به LogicalName های فایل پشتیبان (یا در واقع دیتابیس مبدأ) تغییر نام پیدا می کنند .

برای مثال اگر از دیتابیس MYDB با LogicalName های MYDB_MDF و MYDB_LDF یک پشتیبانی بگیریم و بخواهیم روی دیتابیس دیگری به نام YOURDB بازگردانی کنیم ، LogicalName های دیتابیس YOURDB به MYDB_MDF و MYDB_LDF تغییر می کنند .

به همین دلیل پس از انجام عمل Restore در صورتی که LogicalName های دیتابیس مقصد تغییر کرده باشند توسط دستور های زیر آن ها را به مقادیر اولیه تغییر نام می دهیم.


ALTER DATABASE {DBNAME} MODIFY FILE (NAME = {NewLogic_Data}, NEWNAME='{OldLogic_Data}')
ALTER DATABASE {DBNAME} MODIFY FILE (NAME = {NewLogic_Log}, NEWNAME='{OldLogic_Log}')

توضیح خاص دیگری نیست .

elahe1364
دوشنبه 04 مرداد 1389, 08:57 صبح
با تشکر از برنامه کاملتون

زمانيکه اين برنامه يا کد restore که خودم نوشتم رو اجرا ميکنم اين خطا رو ميده.


Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
The backup or restore was aborted.
14 percent processed.
24 percent processed.
34 percent processed.
44 percent processed.
54 percent processed.
64 percent processed.
74 percent processed.
84 percent processed.
94 percent processed.
100 percent processed.

Chabok
دوشنبه 04 مرداد 1389, 20:00 عصر
با سلام

این برنامه همان طور که شرح داده شد کار خیلی خاص و منحصربفردی انجام نمیده .

فقط توسط همین چند مرحله دستوراتی که توضیح داده شد مراحل Restore کردن یک دیتابیس را تسهیل و تسریع می بخشد .

مزیت برنامه به این است که هر فایل پشتیبانی مربوط به یک دیتابیس را می توانید روی یک دیتابیس دیگر بازیابی کنید .

واضحه که اگر خطایی از سمت سرور رخ بده برنامه نیز همان خطا را خواهد داد .

شما باید علت خطا را که مربوط به دیتابیس و سرور شما می باشد را پیدا کنید .

موفق باشید .

ostovarit
دوشنبه 08 شهریور 1389, 14:09 عصر
با تشکر از برنامه خوبی که گذاشتید ...

من در برنامه ام در زمانی که سیستم مشغول انجام عملیاتی هست از backgroundWorker استفاده کردم و متد ماسکی رو که شما در برنامتون نوشتید اجرا کردم به شکل زیر :



backgroundWorker1.RunWorkerAsync();
this.Cursor = Cursors.WaitCursor;

ShowMask("Sending ...");

//do somthing

HideMask();

backgroundWorker1.CancelAsync();
this.Cursor = Cursors.Default;


اما همچنان سیستم در زمان انجام عملیات هنگ میکند ... ( در نمونه ای که خودتون هم نوشتید این حالت هست)

در صورتی که در متد DoWork بنویسم با ارور زیر در متد ماسک مواجه میشم:
Cross-thread operation not valid: Control 'Pnl_Container' accessed from a thread other than the thread it was created on.

- برای اینکه در زمان انجام عملیات ماسک روی فرم رو بگیرد و سیستم هنگ نکند چه باید کرد؟

Chabok
چهارشنبه 10 شهریور 1389, 01:43 صبح
با سلام

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

من در برنامه ام در زمانی که سیستم مشغول انجام عملیاتی هست از backgroundWorker استفاده کردم و متد ماسکی رو که شما در برنامتون نوشتید اجرا کردم به شکل زیر :

اما همچنان سیستم در زمان انجام عملیات هنگ میکند ... ( در نمونه ای که خودتون هم نوشتید این حالت هست)


این ماسک کار خاصی انجام نمیده که از هنگ شدن فرم جلوگیری بکنه .
هنگ شدن فرم نیز به این دلیل است که در همین thread جاری عملیات را انجام می دهیم.



در صورتی که در متد DoWork بنویسم با ارور زیر در متد ماسک مواجه میشم:
Cross-thread operation not valid: Control 'Pnl_Container' accessed from a thread other than the thread it was created on.

- برای اینکه در زمان انجام عملیات ماسک روی فرم رو بگیرد و سیستم هنگ نکند چه باید کرد؟

کار با عناصر فرم در هنگام استفاده از Thread و یا BGWorker باعث این مسئله می شود .

پیشنهاد میکنم این مقاله را مطالعه بفرمایید .
http://msdn.microsoft.com/en-us/library/ms171728.aspx

اگر در آینده فرصت شد برنامه را اصلاح میکنم تا عملیات در یک Thread جداگانه انجام شود.
موفق باشید .

ostovarit
چهارشنبه 10 شهریور 1389, 09:11 صبح
با سلام
اگر در آینده فرصت شد برنامه را اصلاح میکنم تا عملیات در یک Thread جداگانه انجام شود.
موفق باشید .

مشکلم رو حل کردم ماسک تا زمان عملیات نمایش داده میشه و بعد از اون محو میشه هنگم نمیکنه ... ولی progressbar که گذاشتم توی ماسک الکی زیاد میشه واسش راه حلی پیدا نکردم که در زمان واقعی پر بشه ... من منتظر نمونه شما هستم ... از راهنماییتون ممنونم...

e.Rezaei
جمعه 07 آبان 1389, 19:46 عصر
سلام
ببخشيد يه برنامه مي خواستم براي پشتيبان گرفتن از بانكي كه به روش
service based <<- Add new Item
ساختم . براي كار كردن با اين نوع بانك ها لازم نيست به اسكيو ال وصل شد . حالا مي شه
با كدنويسي از اين بانك backup گرفت در صورتي كه به اسكيوال Attach نباشه ؟ ممنون مي شم زودتر جواب بديد .

b.paseban
چهارشنبه 12 آبان 1389, 20:13 عصر
سلام دوست عزیز.
من از ظهره که میخوام از دیتا بیسم بک آپ بگیرم اما اول روش گرفتن بک آپ رو نمیدونستم.
حالام که روش اون رو یاد گرفتم برنامه sql server روی سیستمم نصب نیست.برنامه sql server managment studioرو دانلود کردم و نصبش کردم.اما موقع کانکت شدن ارور میده.
کلی تاپیک زیرورو کردم تا به تاپیک شما رسیدم.فکر کردم برنامه شما بدرد کار من میخوره.اما بعد از نصب برنامه شما موقع کانکت شدن این ارور رو میده.
از شما بخاطر این برنامه تشکر میکنم.
اگه میشه بگین این برنامه اولا بدرد کار من میخوره یا نه ؟اگه بدرد کار من میخوره چطوری این ارور رو برطرف کنم.
باتشکر فراوان.

Chabok
پنج شنبه 13 آبان 1389, 00:24 صبح
با سلام

این پیغام نشان دهنده نصب نبودن و یا متوقف بودن MSSQL روی Instance مورد نظر می باشد .
از صحت نصب نسخه MSSQL خود اطمنیان حاصل نمایید .
در پست دوم {این تاپیک} (http://barnamenevis.org/forum/showthread.php?t=224146) اشاره شده است .

در مورد این که این برنامه به درد کار شما میخوره یا نه هم از اسم و شرح تاپیک مشخصه که کار برنامه چیه
امیدوارم که به کار شما بیاد . موفق باشید

pasak.org
جمعه 21 مرداد 1390, 20:39 عصر
دانلود فیلم آموزش restore کردن دیتابیس در sql 2008 (http://pasak.org/showproduct.php?id=343)

0




http://pasak.org/admin/img_product/343.jpg

در این فیلم آموزش نحوه restore کردن database در Sql server 2008 را می توانید دانلود نمایید





http://pasak.org/images/new/Download.gifدانلود با حجم 3.6 مگا بايت از لينک مستقيم (http://pasak.org/download.php?sid=3ad7c2ebb96fcba7cda0cf54a2e802f5&k=64cf27fbf6661e82d56c9e64b3ad93d7&id=343)

atifeh
یک شنبه 09 مهر 1391, 23:44 عصر
با سلام
برنامه همچین خطایی داردhttp://C:\Users\Novin Pendar\Desktop\error.png

taha6206
دوشنبه 06 خرداد 1392, 23:46 عصر
نرم افزار مشکل داره داداش