PDA

View Full Version : مشکل در Backup و Restore دیتابیس



mohsen8699
چهارشنبه 16 اردیبهشت 1394, 16:42 عصر
سلام دوستان

بنده توی ریستور کردن دیتابیس بوسیله فایل backup ایجاد شده مشکل دارم

کدی که باهاش backup میگیرم اینه


private void Backup(string strfileName)
{
try
{
string command = @"BACKUP DATABASE Mahtab TO DISK='"+strfileName+"'";
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = null;
SqlConnection cnn = null;
cnn = new SqlConnection (string.Format("data source={0};initial catalog = Mahtab;integrated security=true", Environment.MachineName));

cnn.Open();
cmd = new SqlCommand(command, cnn);
cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("از پایگاه داده با موفقیت پشتیبان تهیه شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
cnn.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}


کدی که باهاش ریستور میکنم اینه


private void Restore(string strfileName)
{
try
{
string command = @"ALTER DATABASE Mahtab SET SINGLE_USER with ROLLBACK IMMEDIATE " +
"use master " +
"RESTORE DATABASE Mahtab FROM DISK='"+strfileName+"'";
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = null;
SqlConnection cnn = null;
cnn = new SqlConnection(string.Format("data source={0};initial catalog = Mahtab;integrated security=true", Environment.MachineName));
cnn.Open();
cmd = new SqlCommand(command, cnn);
cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی اطلاعات از نسخه پشتیبان با موفقیت انجام شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}



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

اما توی ریستور کردن این پیامو بهم میده

130948

لطف میکنید اگه راهنمایی کنید

ghasem110deh
چهارشنبه 16 اردیبهشت 1394, 17:04 عصر
سلام
این رو بصورت زیر تغییر بده ببین درست میشه :


string command = "ALTER DATABASE Mahtab SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE Mahtab FROM DISK =
'" + strFileName + "'" + " WITH REPLACE";

mohsen8699
چهارشنبه 16 اردیبهشت 1394, 17:28 عصر
سلام
این رو بصورت زیر تغییر بده ببین درست میشه :


string command = "ALTER DATABASE Mahtab SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE Mahtab FROM DISK =
'" + strFileName + "'" + " WITH REPLACE";


تشکر فراوان مشکلم حل شد:قهقهه::تشویق:

Aqeel95
چهارشنبه 27 خرداد 1394, 12:44 عصر
سلام وعرض ادب خدمت مهندسین و دوستان برنامه نویس گل
میخوام بکآپ بگیرم ولی نمیشه که
sql server 2014 استفاده میکنم
این از کدهام:


SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");
sfd.Filter = "Backup File(*.Bak)|*Bak";
try
{

if (sfd.ShowDialog() == DialogResult.OK)
{
this.Refresh();
Main_p.sqlcon.Open();
string dbname = sqlcom.Connection.Database;
Main_p.sqlcon.Close();
SqlConnection.ClearAllPools();
string query = "backup database New_work to disk ='" + sfd.FileName + "'";
sqlcom.Connection = new SqlConnection(@"Data Source=KARIMI_PC;Initial Catalog=New_work;Integrated Security=True");
sqlcom.Connection.Open();
sqlcom.CommandText = query;
sqlcom.ExecuteNonQuery();
sqlcom.Connection.Close();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

اینم از خطایی که میده :
132350

اگر که قسمتی از کدهام نامشخصه توضیح میدم!!!! البته میدونم که برای شما مشخص و واضحه
باتشکر

davidrobert
چهارشنبه 27 خرداد 1394, 14:48 عصر
دوست عزیز این کد بکاپ و ریستوری که قرار دادم کد خیلی عالی هستش ولی باید هنگام ریستور و بکاپ در درایو غیر از دریاو ویندوز ریستور و بکاپ انجام بدید و دوم فایل های dll که در این اموزش به رفرس ها اضافه میکنه به کنار فایل اجرای اضافه کنید از اونجا به رفرینس ها اضافه کنید و خوبه این سور این هستش که سرعت ریستور و بکاپ بالا هستش و دوم اگه دیتابیس موجود نباشه دیتابیس رو ایجاد میکنه به همراه داده هاش.
http://uplod.ir/dj305bia0otl/Backup_Restore.7z.htm

asman.abi
چهارشنبه 27 خرداد 1394, 19:38 عصر
سلام وعرض ادب خدمت مهندسین و دوستان برنامه نویس گل
میخوام بکآپ بگیرم ولی نمیشه که
sql server 2014 استفاده میکنم
این از کدهام:


SaveFileDialog sfd = new SaveFileDialog();
sfd.FileName = DateTime.Now.ToString("ddMMyyyy_HHmmss");
sfd.Filter = "Backup File(*.Bak)|*Bak";
try
{

if (sfd.ShowDialog() == DialogResult.OK)
{
this.Refresh();
Main_p.sqlcon.Open();
string dbname = sqlcom.Connection.Database;
Main_p.sqlcon.Close();
SqlConnection.ClearAllPools();
string query = "backup database New_work to disk ='" + sfd.FileName + "'";
sqlcom.Connection = new SqlConnection(@"Data Source=KARIMI_PC;Initial Catalog=New_work;Integrated Security=True");
sqlcom.Connection.Open();
sqlcom.CommandText = query;
sqlcom.ExecuteNonQuery();
sqlcom.Connection.Close();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

اینم از خطایی که میده :
132350

اگر که قسمتی از کدهام نامشخصه توضیح میدم!!!! البته میدونم که برای شما مشخص و واضحه
باتشکر

قبلا هم گفتم چون فایل مربوطه درون درایو C هست. و درایو C سیستمی هست. اجازه دسترسی به شما رو نمیده. برای این کار مسیری به غیر از درایو C انتخاب کنید.

asman.abi
چهارشنبه 27 خرداد 1394, 19:44 عصر
سلام دوستان

بنده توی ریستور کردن دیتابیس بوسیله فایل backup ایجاد شده مشکل دارم

کدی که باهاش backup میگیرم اینه


private void Backup(string strfileName)
{
try
{
string command = @"BACKUP DATABASE Mahtab TO DISK='"+strfileName+"'";
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = null;
SqlConnection cnn = null;
cnn = new SqlConnection (string.Format("data source={0};initial catalog = Mahtab;integrated security=true", Environment.MachineName));

cnn.Open();
cmd = new SqlCommand(command, cnn);
cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("از پایگاه داده با موفقیت پشتیبان تهیه شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
cnn.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}


کدی که باهاش ریستور میکنم اینه


private void Restore(string strfileName)
{
try
{
string command = @"ALTER DATABASE Mahtab SET SINGLE_USER with ROLLBACK IMMEDIATE " +
"use master " +
"RESTORE DATABASE Mahtab FROM DISK='"+strfileName+"'";
this.Cursor = Cursors.WaitCursor;
SqlCommand cmd = null;
SqlConnection cnn = null;
cnn = new SqlConnection(string.Format("data source={0};initial catalog = Mahtab;integrated security=true", Environment.MachineName));
cnn.Open();
cmd = new SqlCommand(command, cnn);
cmd.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی اطلاعات از نسخه پشتیبان با موفقیت انجام شد", "پیام",MessageBoxButtons.OK,MessageBoxIcon.Information);
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}



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

اما توی ریستور کردن این پیامو بهم میده

130948

لطف میکنید اگه راهنمایی کنید

شما کد ریستور رو به این تغییر بدی درست میشه. البته یکی از دوستان اومده و دیتا بیس رو آفلاین کرده و عمل خودش رو انجام داده(میشه ولی لازم به این نبود:لبخندساده:)

string command = @"use master RESTORE DATABASE Mahtab FROM DISK='"+strfileName+"' WITH REPLACE";

Aqeel95
چهارشنبه 27 خرداد 1394, 21:32 عصر
قبلا هم گفتم چون فایل مربوطه درون درایو C هست. و درایو C سیستمی هست. اجازه دسترسی به شما رو نمیده. برای این کار مسیری به غیر از درایو C انتخاب کنید.
قبلا کجا گفته بودین؟:متعجب: (شوخی بودها)
اما این مشکل رو حل کردم. با جستجوی خطا تو سایتای خارجی معلوم شد که مشکل از user سیستمم بوده و به sql اجازه دسترسی نداده بود...
یه همچین چیزایی تقریبا
--------------
الحمدلله هم BackUp وهم Restore رو کامل درست کردم ودیگه مشکلی ندارن

asman.abi
شنبه 30 خرداد 1394, 00:03 صبح
قبلا کجا گفته بودین؟:متعجب: (شوخی بودها)
اما این مشکل رو حل کردم. با جستجوی خطا تو سایتای خارجی معلوم شد که مشکل از user سیستمم بوده و به sql اجازه دسترسی نداده بود...
یه همچین چیزایی تقریبا
--------------
الحمدلله هم BackUp وهم Restore رو کامل درست کردم ودیگه مشکلی ندارن

شما به این آدرس مراجعه کنید. متوجه می شید.

http://barnamenevis.org/showthread.php?497707-%D9%86%D8%B5%D8%A8-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%D8%B1-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88-C&p=2223686&viewfull=1#post2223686

http://barnamenevis.org/showthread.php?497997-%DA%86%D8%B1%D8%A7-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%D9%86%D8%B5%D8%A8-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1-%D9%86%D9%85%DB%8C-%DA%A9%D9%86%D8%AF&p=2224825&viewfull=1#post2224825

Aqeel95
سه شنبه 02 تیر 1394, 11:44 صبح
شما به این آدرس مراجعه کنید. متوجه می شید.

http://barnamenevis.org/showthread.php?497707-%D9%86%D8%B5%D8%A8-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%AF%D8%B1-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88-C&p=2223686&viewfull=1#post2223686

http://barnamenevis.org/showthread.php?497997-%DA%86%D8%B1%D8%A7-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-%D9%86%D8%B5%D8%A8-%DB%8C%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%B1%D9%82%D8%B1%D8%A7%D8%B1-%D9%86%D9%85%DB%8C-%DA%A9%D9%86%D8%AF&p=2224825&viewfull=1#post2224825

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

Aqeel95
پنج شنبه 04 تیر 1394, 23:07 عصر
**********سلام خدمت دوستان عزیز
سوالمو توی تالار backup &restore نوشتم اما فک کنم اونجا کمتر دیده بشه :*************
سلام خدمت اساتید گرامی
نمیخواستم تایپک جدید درست کنم برای همین همینجا میپرسم سوالمو
--------------
با کد زیر من بکآپ گرفتن اتوماتیک درست کردم از برنامه که هرگاه از برنامه خارج شد کاربر خودکار بکآپ گیری انجام بشه


SqlCommand sqlcom = new SqlCommand();
sqlcom.Connection = new SqlConnection("Data Source=KARIMI_PC;Initial Catalog=New_work;Integrated Security=True");
sqlcom.Connection.Open();
string dbname = sqlcom.Connection.Database;
sqlcom.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE New_work TO DISK='C:\\Users\\Karimi\\Documents\\Montada\\auto back up.bak'";
sqlcom.Connection = new SqlConnection(@"Data Source=KARIMI_PC;Integrated Security=True");
sqlcom.Connection.Open();
sqlcom.CommandText = query;
sqlcom.ExecuteNonQuery();
sqlcom.Connection.Close();
Application.Exit();

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

Aqeel95
شنبه 06 تیر 1394, 18:05 عصر
هم اکنون منتظر یاری شما هستیم :))

Louai_M
دوشنبه 26 مرداد 1394, 20:08 عصر
سلام دوستان من از کد زیر برای بکاپ گیری استفاده می کنم اما خطای '..' را می گیرید


public void Backup(string strFileName)
{
string command = @"BACKUP DATABASE dbToos.mdf TO DISK='" + strFileName + "'";

this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.\\sqlexpress;AttachDbFilename=|DataDirecto ry|\\dbToos.mdf;Integrated Security=true");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("نسخه پشتیبانی با موفقیت ایجاد شد");
oConnection.Close();

}

abdullah20
دوشنبه 26 مرداد 1394, 21:39 عصر
دوست عزیز دستور بکاپ شما میخواد از دیتابیسی بکاپ تهیه کنه که اتچ شده ولی کانکشن استرینگ شما داره بانک را از یک مسیر میخونه
این 2 مورد با هم جور در نمیان
یا دیتابیس را اتچ کنید یا در دستور بکاپ خوب ادرس بانک خود را قرار دهید

Louai_M
سه شنبه 27 مرداد 1394, 18:54 عصر
خوب دیتابیس من تو خود پوشه debug پروژست اگه آدرس بدم خوب فردا با تغییر جای پروژه دیگه کد کار نمی کننه اگه بتونید یه کد پیشتیبانی و بازیابی پشتیبان معرفی کنید ممنون میشم

abdullah20
سه شنبه 27 مرداد 1394, 19:04 عصر
من که نگفتم از ریشه درایور آدرس را کپی کنید از Application.StartupPath استفاده کنید
یا اگر کلا نمیخواید آدرس بدید در پست قبلی گفتم باید دیتابیس را اتچ کنید

Louai_M
چهارشنبه 28 مرداد 1394, 00:04 صبح
باشتکر از راهنماییتون کد را به شکل زیر تغییر دادم حل شد


string command = @"BACKUP DATABASE [" + Application.StartupPath + @"\dbToos.mdf] TO DISK='"+strfileName+"'";