PDA

View Full Version : نحوه Backup & Restore گیری از 2008 SQL Server Express



FremderJunge
یک شنبه 17 مهر 1390, 22:42 عصر
سلام دوستان میدونم تاپیک تکراریه ولی من هرچی کد تو پست های قبلی بود رو تست کردم خطا داده ، یک نفر لطف کد یا یک مثال ساده برای Backup & Restore از یک دیتابیس اکسپرس ارسال کنه.

m.soleimani
دوشنبه 18 مهر 1390, 00:24 صبح
سلام دوستان میدونم تاپیک تکراریه ولی من هرچی کد تو پست های قبلی بود رو تست کردم خطا داده ، یک نفر لطف کد یا یک مثال ساده برای Backup & Restore از یک دیتابیس اکسپرس ارسال کنه.

Backup (http://www.msdev.com/directory/Description.aspx?eventId=1458)

Restore (http://www.msdev.com/directory/Description.aspx?eventId=1460)

شاد و پیروز باشید./

FremderJunge
دوشنبه 18 مهر 1390, 09:52 صبح
تشکر ویژه از m.soleimani که این ویدیوی آموزشی رو آدرس دادن ولی متاسفانه به اینترنت پرسرعت تا اون هفته دسترسی ندارم که این آموزش رو ببینم اگه کسی مثال کدی هم داره اطف کنه. یه مشکل دیگه اینکه من فعلا برای این پروژه SQl Server Management Studio ندارم بدون اون میشه Backup & Restore گرفت یا نه باید برم گیر بیارم؟

FremderJunge
پنج شنبه 21 مهر 1390, 21:41 عصر
سلام کسی یه مثل ساده آپلود کنه مشکل ما حل بشه؟
من خیلی کد چک کردم مشکل ابنجاست که پیغام میده Database در حال استفاده است و نمی تونید از اون بک آپ بگیرید.

m.soleimani
پنج شنبه 21 مهر 1390, 23:34 عصر
اگر از منجمنت استدیو استفاده نمی‌کنی به صورت دستی دیتابیس رو stop کن تا دیگه جایی ازش استفاده نکنه برای این کار کافیه که داخل run این دستور رو بنویسی services.msc. از اونجا سرور رو پیدا کن و stop کن کارت که تموم شد میتونی دوباره start کنی./

FremderJunge
پنج شنبه 21 مهر 1390, 23:50 عصر
اگر از منجمنت استدیو استفاده نمی‌کنی به صورت دستی دیتابیس رو stop کن تا دیگه جایی ازش استفاده نکنه برای این کار کافیه که داخل run این دستور رو بنویسی services.msc. از اونجا سرور رو پیدا کن و stop کن کارت که تموم شد میتونی دوباره start کنی./
خودم که دستی میتونم این کارو انجام بدم می خوام تو نرم افزار این کار رو خودش خودکار انجام بده!

m.soleimani
پنج شنبه 21 مهر 1390, 23:59 عصر
خودم که دستی میتونم این کارو انجام بدم می خوام تو نرم افزار این کار رو خودش خودکار انجام بده!

یه چیز غیر اصولی که الان به فکرم می‌رسه و بدون فکر کردن دارم میگم این هست که یه بچ فایل براش بنویسی « در صورتی که بلد باشی » و زمان مورد نیاز فراخوانیش کنی تا خودش بانک رو متوقف کنه و بعد هم با یه برنامه دیگه بانک رو دوباره راه‌اندازی کنه فعلن همین رو توی ذهنم دارم نصفه شبی ولی اگر مورد مناسبی بعدن پیدا کردم حتمن خبرت می‌کنم ./

FremderJunge
جمعه 22 مهر 1390, 00:13 صبح
یه چیز غیر اصولی که الان به فکرم می‌رسه و بدون فکر کردن دارم میگم این هست که یه بچ فایل براش بنویسی « در صورتی که بلد باشی » و زمان مورد نیاز فراخوانیش کنی تا خودش بانک رو متوقف کنه و بعد هم با یه برنامه دیگه بانک رو دوباره راه‌اندازی کنه فعلن همین رو توی ذهنم دارم نصفه شبی ولی اگر مورد مناسبی بعدن پیدا کردم حتمن خبرت می‌کنم ./
مرسی
بچ فایل رو گذاشتم برای مرحله آخر چون چیزی ازش بلد نیستم ولی چاره ای نباشه میرم دنبالش، فعلا ساده ترین کار نوشتن یه دستور که خود فایل اصلی دیتابیس رو کپی پیست کنه.:لبخند:

m.soleimani
جمعه 22 مهر 1390, 00:24 صبح
مرسی
بچ فایل رو گذاشتم برای مرحله آخر چون چیزی ازش بلد نیستم ولی چاره ای نباشه میرم دنبالش، فعلا ساده ترین کار نوشتن یه دستور که خود فایل اصلی دیتابیس رو کپی پیست کنه.:لبخند:

هم‌شهری این‌ رو تست کن ببین نیاز شما رو برطرف می‌کنه یا نه :


using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceProcess;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
string myServiceName = "MSSQL$SQLEXPRESS"; //service name of SQL Server Express
string status; //service status (For example, Running or Stopped)
Console.WriteLine("Service: " + myServiceName);
//display service status: For example, Running, Stopped, or Paused
ServiceController mySC = new ServiceController(myServiceName);
try
{
status = mySC.Status.ToString();
}
catch (Exception ex)
{
Console.WriteLine("Service not found. It is probably not installed. [exception=" + ex.Message + "]");
Console.ReadLine();
return;
}
//display service status: For example, Running, Stopped, or Paused
Console.WriteLine("Service status : " + status);
//if service is Stopped or StopPending, you can run it with the following code.
if (mySC.Status.Equals(ServiceControllerStatus.Stoppe d) | mySC.Status.Equals(ServiceControllerStatus.StopPen ding))
{
try
{
Console.WriteLine("Starting the service...");
mySC.Start();
mySC.WaitForStatus(ServiceControllerStatus.Running );
Console.WriteLine("The service is now " + mySC.Status.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Error in starting the service: " + ex.Message);
}
}
Console.WriteLine("Press a key to end the application...");
Console.ReadLine();
return;
}
}
}


پی‌نوشت : راستی یادم رفت بگم این رفرنس رو هم به پروژه خودت اضافه کن :


System.ServiceProcess

FremderJunge
جمعه 22 مهر 1390, 00:49 صبح
این کد خروجی میده که سرویس شما در حالت اجراست.
اگه درست متوجه شده باشم با نوشتن یه متد Stop الان باید بشه دیتابیس رو متوقف کرد و بک آپ گرفت.

m.soleimani
جمعه 22 مهر 1390, 01:05 صبح
این کد خروجی میده که سرویس شما در حالت اجراست.
اگه درست متوجه شده باشم با نوشتن یه متد Stop الان باید بشه دیتابیس رو متوقف کرد و بک آپ گرفت.
بله به همین شکل عمل می‌کنه بعد از این که کارت رو انجام دادی برای این‌که مشکلات بعدی پیش نیاد دوباره سرویس مورد نظر رو راه‌اندازی کن./

FremderJunge
جمعه 22 مهر 1390, 11:25 صبح
string strFileName = "BackupFile.bak";
try
{
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = new SqlCommand();
SqlConnection.ClearAllPools();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\mydb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='c:\\" + strFileName + "' WITH NO_COMPRESSION ,CONTINUE_AFTER_ERROR ,FORMAT, INIT, NAME = N'accounting-Full Database Backup', SKIP,NOREWIND, NOUNLOAD, STATS = 10";
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\mydb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Cursor = Cursors.Default;
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd : " + ex.Message);
}
با کد بالا مشکل BackUp حل شد حالا میرسیم به Restore و دوباره روز از نو

m.soleimani
جمعه 22 مهر 1390, 13:20 عصر
با کد بالا مشکل BackUp حل شد حالا میرسیم به Restore و دوباره روز از نو
یکم تلاش کن به نتیجه میرسی همیشه دستت رو بزار روی زانوی خودت و بلندشو به هر حال کدت رو بنویس هرجا به مشکل برخوردی بپرس حتمن بهت پاسخ داده می‌شه. اگر کد مناسبی هم به ذهنم رسید برات می‌نویسم ./

FremderJunge
سه شنبه 26 مهر 1390, 19:27 عصر
سلام
هر نوع کدی رو برای ریستور امتحان کردم ولی باز خطای میده که پایگاه داده شما در حال استفاده است آیا کدی باید وارد کنم تا ارتباط ها با پایگاه داده رو حذف کنه یا اشکال از جای دیگه است؟
کدی رو هم که دوست عزیز m.soleimani دادن کل Sql رو Off میکنه و دوباره Run هم نمیکنه در حای که تو برنامه پیغام اجرا میده!

یه سوال دیگه مثلا در آینده به این پایگاه داده بخوایم یه جدول جدید یا به یکی از جداول چند فیلد اضافه کنیم تکلیف این Backup ها چی میشه؟آیا راهی هست که از BackUp قبلی استفاده کرد یا باید اطلاعات رو از اول وارد کرد؟

FremderJunge
چهارشنبه 25 آبان 1390, 16:07 عصر
سلام
کد Restore که به سختی پیداش کردم اینجا میگذارم شاید به درد کسی بخوره.
try
{
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = new SqlCommand();
SqlConnection.ClearAllPools();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|DataBase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "USE [master]; RESTORE DATABASE [" + dbname + "] FROM DISK = N'" + TxtAddress.Text + "' WITH NOUNLOAD, REPLACE, STATS = 10";
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|DataBase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Cursor = Cursors.Default;
MessageBox.Show("نسخه پشتیبان با موفقیت جایگزین شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
}
catch
{
MessageBox.Show(" خطا در جایگزینی نسخه پشتیبان", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

mobed_6262
یک شنبه 20 آذر 1390, 15:31 عصر
البته یه راه ساده تر اینکه اگه به شما پیغام میده که دیتابیس در حال اجراست (که البته در مورد Backup گیری تا به حال من این پیغام را مشاهده نکردم) یه دیتابیس دیگه را به حالت اجرایی ببرید بعد از دیتابیستان Backup بگیرید .
می تونی از دستور use استفاده کنی .
برای Backup گیری از دیتابیس به نام kamel از روش زیر استفاده کن .
use master
go
backup database kamel to disk='e:\kamel'
go
فقط آدرس باید داخل ' ' باشد

omp_programmer
چهارشنبه 18 فروردین 1395, 10:44 صبح
با سلام به دوستان برنامه نویس
من دیتابیسم رو در sql management 2012 نوشتم و الان میخوام در سیستم مقصد با sql express 2012 برنامه مو اجرا کنم
برای بکاب گیری از کوئری زیر استفاده می کنم (یعنی اتچ بیس هستش):
'BACKUP DATABASE [|DatDirectory|\PhoneBookDB.mdf] TO DISCK = 'save path
ارور میده که دیتابیس در این مسیر وجود ندارد در واقع DataDirectory داخل براکت کار نمی کند. چون
اگر مسیر دیتابیس را به صورت دستی وارد می کنم بکاپ عمل میکند، Application.StartupPath رو هم
امتحان کردم ولی باز جواب نداد:ناراحت:

اگر دوستان راهنمایی بفرمایند ممنون میشم...