PDA

View Full Version : حرفه ای: پشتیبان گیری و بازگردانی اطلاعات در اسکیول سرور



davidrobert
شنبه 15 شهریور 1393, 18:57 عصر
سلام و خسته نباشید به تمام دوستان گل برنامه نویس .
دوستان من با یه مشکلی در ضمنی ریستور و بکاپ بر خورد کردم که برنامه این امکان ریستور و بکاپ رو به من نمیده من از اسکیول سرور Microsoft.SQL.Server.2012.Enterprise.Edition.with. Service.Pack.1-KOPiE و دات نت Microsoft Visual Studio Ultimate 2013 en-US x86 Nov8-2013 استفاده میکنم و میخوام بکاپ بگیرم از دیتابیسم که در اسکیول سرور هستش به هم اجازه نمیده میگه باید دیتابیس کنار فایلت باشه تا بشه ولی میخوام از خود دیتابیس که در اسکیول سرور هستش ریستور و بکاپ بگیرم برای اینکه سرعت برنامه من رو خیلی بالا میبره از این کد استفاده میکنم که آدرس رو به صورت محلی و همین طور به صورت اسکیول سرور دادم قبول نمیکنه بخاطر مثال امنیتی خطا به من میده.
123141
123142

این 2 تا خطا رو به من میده در هر دو روش آدرس دهی برای ریستور و بکاپ گرفتن ممنون میشم به من کمک کنید به روز کد نویسی ADO, Linq یا Ef به یکی از این روش ها کد در اختیار من قرار بدید تا من بتونم ریستور و بکاپ گیری کنم و بگم این کد با ADO هستش فقط کد ریستور و بکاپ ADO ولی باقی کدام با Ef هستش ممنون میشم کمک کنید در این ضمنی این هم کد های من در ضمنی ریستور و بکاپ.
private void backupinformation()
{
DialogResult dr;
dr = MessageBoxShow.Show("تهیه نسخه پشتیبان", "آیا مایلید نسخه پشتیبان از اطلاعات خود تهیه فرمایید",
MessageBoxShow.Buttons.YesNo, MessageBoxShow.Icons.Question);
if (dr == DialogResult.Yes)
{
try
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string date = pc.GetYear(DateTime.Now) + "-" + pc.GetMonth(DateTime.Now) + "-" +
pc.GetDayOfMonth(DateTime.Now);
System.Globalization.PersianCalendar pcc = new System.Globalization.PersianCalendar();
DateTime tm = new DateTime();
tm = DateTime.Now;
string timenow = pcc.GetHour(tm).ToString() + "_" + pcc.GetMinute(tm).ToString() + "_" +
pcc.GetSecond(tm).ToString();
SaveFileDialog savefiledialog = new SaveFileDialog();
savefiledialog.AddExtension = true;
savefiledialog.CheckFileExists = false;
savefiledialog.OverwritePrompt = true;
savefiledialog.FileName = "Backup_FileDataBase" + date + " " + timenow;
savefiledialog.Filter = @"(*.bak) پشتیبان گیری|*.bak";
savefiledialog.Title = "پشتیبان گیری";
savefiledialog.DefaultExt = "Bak";
savefiledialog.RestoreDirectory = true;
if (savefiledialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection =
//new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\DBBSS.mdf;Int egrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection =
new SqlConnection(
@"Data Source=.\SQLEXPRESS;Initial Catalog=DBBSS;Integrated Security=True;MultipleActiveResultSets=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP" +
" DATABASE [" + dbname + "] TO DISK ='" + savefiledialog.FileName +
"'";
cmd.Connection =
new SqlConnection(
"Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
label1.Visible = true;
progressBar1.Visible = true;
label1.Text = "%" + progressBar1.Value.ToString() + ": درصد پشتیبان گیری";
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBoxShow.Show("پشتیبان گیری", "نسخه پشتيبان به طور كامل ايجاد شد.",
MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.None);
label1.Visible = false;
progressBar1.Visible = false;
}
catch (Exception ex)
{
if (!ShowFriendMeesage)
MessageBox.Show(ex.Message);
else
MessageBoxShow.Show("خطا", "خطا در باز یابی اطلاعات / خطا 103",
MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.None);
}
}
}
catch
{

}
}
}
public static bool ShowFriendMeesage = false;

void restore()
{
MessageBoxShow.Show("هشدار",
"آیا مطمئن هستید برای بازیابی اطلاعات در صورت بازیابی اطلاعات اطلاعات قبلی از بین رفته و اطلاعات جدید جایگزین میشود.",
MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);
try
{
OpenFileDialog OpenFileRestore = new OpenFileDialog();
OpenFileRestore.AddExtension = true;
OpenFileRestore.CheckFileExists = false;
OpenFileRestore.CheckPathExists = true;
OpenFileRestore.Filter = "(*.Bak) فایل پشتیبان گیری|*.Bak";
OpenFileRestore.Title = "باز یابی فایل پشتیبان گیری";
OpenFileRestore.DefaultExt = "Bak";
OpenFileRestore.RestoreDirectory = true;
if (OpenFileRestore.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
//cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=DBBSS;Integrated Security=True;MultipleActiveResultSets=True");
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\DBBSS.mdf;Int egrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + OpenFileRestore.FileName + "';ALTER DATABASE [" + dbname + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
label1.Visible = true;
progressBar1.Visible = true;
progressBar1.PerformStep();
progressBar1.Value = 100;
cmd.Connection.Close();

progressBar1.Text = "%" + progressBar1.Value.ToString() + "درصد بازگردانی اطلاعات :";
MessageBoxShow.Show("بازگرانی", "نسخه پشتیبان با موفقیعت باز گردانی شد.", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.None);
MessageBoxShow.Show("هشدار", "برنامه باید بسته شود", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Warning);
Application.Exit();
progressBar1.Value = 0;
progressBar1.Visible = false;
label1.Visible = false;
}
catch (Exception ex)
{
if (!ShowFriendMeesage)
MessageBox.Show(ex.Message);
else
MessageBox.Show("خطا در باز یابی اطلاعات / خطا 100");
}
}
}
catch
{
}
}

من سرباز هستم دیر به دیر سر میزنم به این سایت خواهشن برای من کدش رو قرار بدید خیلی ممنون میشم.

علی فتحی
دوشنبه 17 شهریور 1393, 20:24 عصر
private void buttonItem5_Click(object sender, EventArgs e)
{
#region Select Name
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "bak";
saveFileDialog1.FileName = "Bakeup";
saveFileDialog1.Filter = @"SQL Backup files (*.bak) |*.bak|All files (*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";


if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
Backup(strFileName);


}
#endregion
}


private void Backup(string strFileName)
{
#region Store File Bak


SqlCommand oCommand = null;
SqlConnection oConnection = null;
try
{
string ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dat.mdf;Integrated Security=True;User Instance=True";
string Command = @"backup database [" + Application.StartupPath + "\\Dat.mdf] to disk ='" + strFileName + "' with init,stats=10";


this.Cursor = Cursors.WaitCursor;


oConnection = new SqlConnection(ConectionString);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();


oCommand = new SqlCommand(Command, oConnection);
oCommand.ExecuteNonQuery();


this.Cursor = Cursors.Default;
MessageBox.Show("تهیه نسخه پشتیبان انجام شد .");


}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
finally
{
oConnection.Close();
oCommand.Parameters.Clear();
oCommand.Dispose();
}
#endregion
}


private void buttonItem6_Click(object sender, EventArgs e)
{
#region Select File Bak
string strFileName = string.Empty;


openFileDialog1.Filter = @"SQL Backup files (*.bak) |*.bak|All files (*.*) |*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restore SQL File";


if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = openFileDialog1.FileName;
Restore(strFileName);
}
#endregion
}
private void Restore(string strFileName)
{
#region Restore File Bak


SqlCommand oCommand = null;
SqlConnection oConnection = null;


try
{
string ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dat.mdf;Integrated Security=True;User Instance=True";
string Command = "ALTER DATABASE [" + Application.StartupPath + "\\Dat.mdf] SET SINGLE_USER with ROLLBACK IMMEDIATE use master RESTORE DATABASE [" + Application.StartupPath + "\\Dat.mdf] FROM DISK='" + strFileName + "'";


this.Cursor = Cursors.WaitCursor;


oConnection = new SqlConnection(ConectionString);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();


oCommand = new SqlCommand(Command, oConnection);
oCommand.ExecuteNonQuery();


this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی انجام شد .");




}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
finally
{
oConnection.Close();
oCommand.Parameters.Clear();
oCommand.Dispose();
}
#endregion

}

davidrobert
جمعه 21 شهریور 1393, 10:32 صبح
آقا علی فتحی عزیز از کد شما استفاده کردم ولی برنامه این خطا رو به من داد.
123347

davidrobert
جمعه 21 شهریور 1393, 11:21 صبح
دوستان من از این کد هم استفاده میکنم برای پشتیبان گیری ولی باز برای پشتیبان گیری به من خطا میده. این دستور ها من در یه کلاس هستش. این هم بگم از اسکیول سرور 2012 enterperis و دانت 2013 استفاده میکنم و این هم کدای من هستش.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Billing_Software_Store.Class;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Windows.Forms;
namespace Billing_Software_Store //bayad ba tavajoh be "namespace" barname, tanzim shavad
{
class Backup_Restore:IDisposable
{
private string BackUpConString = @"data source=.\SQLEXPRESS;Initial Catalog=DBBSS;Integrated Security=True";//Connection String baraye Dastyabi be Data base Asli
private string ReStoreConString = @"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";//Connection String baraye dastresi be data base Master


//------------------------------------------------------------

public void Dispose()
{
GC.SuppressFinalize(this);
}



//-------------------------------------------------------------
public void ReStorMyDB()
{
if (MessageBoxShow.Show("بازگردانی دیتابیس", "تمام داده دیتابیس تغییر میکنن!!! \n آیا موافق می باشید, انتخاب \"Yes\".", MessageBoxShow.Buttons.YesNo, MessageBoxShow.Icons.Question) == DialogResult.Yes)
{

SqlConnection.ClearAllPools();
using (SqlConnection con = new SqlConnection(ReStoreConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);

if (srvr != null)
{
try
{

Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "DBBSS";//Bayad ham nam ba Data base barname tanzim shavad
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "فایل پشتیبان گیری|*.bak";
if (opfd.ShowDialog() == DialogResult.OK)
{


BackupDeviceItem bkpDevice = new BackupDeviceItem(opfd.FileName, DeviceType.File);

rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
rstDatabase.SqlRestore(srvr);
MessageBoxShow.Show("سرور", "بازگردانی دیتابیس موفق آمیز بود.", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);
}
}
catch (Exception e)
{
MessageBoxShow.Show("خطا نرم افزاری", "خطا: در بازگردانی دیتابیس", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Error);
}
}
}

}
}

public void BackUpMyDB()
{
using (SqlConnection con = new SqlConnection(BackUpConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);

if (srvr != null)
{
try
{


Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = "DBBSS";//Bayad ham nam ba Data base barname tanzim shavad
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "فایل پشتیبان گیری|*.bak";
sfd.FileName = "BackUp_" + (DateTime.Now.ToShortDateString().Replace('/', '.'));
if (sfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.SqlBackup(srvr);
MessageBoxShow.Show("سرور", "پشتیبان گیری با موفقعیت به انجام رسید", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);
}
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
}
}
}


}
}

این دستور برای اجرای دستور بکاپ در فرم هستش.
private void BtnRestore_Click(object sender, EventArgs e)
{
using (var back=new Backup_Restore())
{
back.BackUpMyDB();
}{
این هم تصویر پیغام خطا برای پشتیبان گیری از خود اسکیول سرور.
123350

خواهشن کمک کنید شدیداً به کمک نیاز دارم.

mohammad reza beizavi
جمعه 21 شهریور 1393, 13:28 عصر
درود
این خطایی که تصویرش رو گذاشتید مربوط به این هست که سیستم عامل اجازه دسترسی به اون مسیری که می خواید فایل پشتیبان رو قرار بدید نمیده. این مسیر:
C:\Users\SayyeBan\Desktop\x.bak
بهتره یک پوشه رو خودتون بسازید و مسیر فایل پشتیبان رو اونجا قرار بدید.