PDA

View Full Version : مشکل در RESTORE کردن فایل پشتیبان



bazardeh
دوشنبه 20 تیر 1390, 11:15 صبح
سلام
من بانک خودم رو به صورت زیر پشتیبان می گیرم و مشکلی نیست


try
{
SqlConnection sq = new SqlConnection("server=(local);database=RSR;integrated security=true;");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " +RSR+ " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (SqlException sd)
{
MessageBox.Show("" + sd.Message + "\n" + sd.Errors, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


ولی برای RESTORE کردن پشتیبان با کد زیر خطا میدهد



try
{
SqlConnection sq = new SqlConnection("server=(local);database=RSR;integrated security=true;");
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
string query = "USE [master]; RESTORE DATABASE [" + RSR + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = new SqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (SqlException sd)
{
MessageBox.Show("" + sd.Message + "\n" + sd.Errors, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


این عکس این خطا
72301

لطفا کمک کنید باتشکر

B.I.O.H.A.Z.A.R.D
دوشنبه 20 تیر 1390, 11:55 صبح
کد restore رو قرار بدید. کد ها تکراری هستن.

bazardeh
دوشنبه 20 تیر 1390, 12:08 عصر
try
{
SqlConnection sq = new SqlConnection("server=(local);database=RSR;integrated security=true;");
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
string query = "USE [master]; RESTORE DATABASE [" + RSR + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = new SqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (SqlException sd)
{
MessageBox.Show("" + sd.Message + "\n" + sd.Errors, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


با تشکر

bazardeh
دوشنبه 20 تیر 1390, 17:26 عصر
کجای کار من غلط است

bazardeh
دوشنبه 20 تیر 1390, 23:02 عصر
پشتیبان گیری من کاملاً کار می کنه و مشکلی ندارم فقط در برگرداندن اطلاعات مشکل دارم

B.I.O.H.A.Z.A.R.D
دوشنبه 20 تیر 1390, 23:05 عصر
ببینید این تاپیک و نرم افزار داخلش کمکتون میکنه. خیلی کامله واقعاً
http://barnamenevis.org/showthread.php?234252-%D9%86%D8%B1%D9%85-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-Restore-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%A7%D9%85%D9%84-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-SQL-Server-%DA%A9%D8%AF-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87

zahra_no
دوشنبه 24 مرداد 1390, 22:37 عصر
دوستان من از صبح دنبال این مشکلم و به جایی نرسیدم

من مشکل این دوست عزیز رو دارم ولی نمیدونم چطوری رفعش کنم

دقیقا کد backup , restore مثل همینه
و با از این دو تابع هم قبل از restore استفاده میکنم
private void KillConnectionWithTSQL()
{
try
{
using (SqlConnection con = new SqlConnection(@"Data Source = ZAHRA-PC\SQLEXPRESS;Integrated Security = SSPI"))
{

string query = @"SELECT DISTINCT request_session_id FROM master.sys.dm_tran_locks
WHERE resource_type = 'DATABASE'
AND resource_database_id = db_id(N' PIM ')";
// string query = @"select pids from master..sysprocesses where dbid=db_id(PIM)";
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = query;
SqlDataReader reader = cmd.ExecuteReader();

List<object> pids = new List<object>();
while (reader.Read())
{
pids.Add(reader[0]);
}
reader.Close();

foreach (object Pid in pids)
{
if (Pid != null)
{
query = "KILL " + Pid;
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
}

if (con.State == ConnectionState.Open)
con.Close();
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void GetActiveConnectionWithTSQL()
{
try
{
using (SqlConnection con = new SqlConnection(@"Data Source = ZAHRA-PC\SQLEXPRESS;Integrated Security = SSPI"))
{
string query = @"SELECT
(select count(*) from master.dbo.sysprocesses p where dtb.database_id=p.dbid) AS [ActiveConnections]
FROM master.sys.databases AS dtb
WHERE (dtb.name=N'PIM')";
if (con.State != ConnectionState.Open)
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = query;
var result = cmd.ExecuteScalar();
if (result != null)
lblActiveConnections.Text = result.ToString();
else
lblActiveConnections.Text = "0";

if (con.State == ConnectionState.Open)
con.Close();

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}


ولی همچنان همان پیغام خطا رو میگیرم.

دوستان لطفا کمکم کنید.

zahra_no
دوشنبه 24 مرداد 1390, 23:08 عصر
قبل از restore کوئری زیر رو اجرا کنید
1
ALTER DATABASE DatabaseName SET SINGLE_USER with ROLLBACK IMMEDIATE





بعد restore رو انجام بدید مثل کوئری زیر
1
RESTORE DATABASE DatabaseName FROM DISK= 'Path' WITH FILE = 1,NOUNLOAD,REPLACE,STATS = 10





بعد کوئری زیر رو در نهایت اجرا کنید
1
ALTER DATABASE DatabaseName SET MULTI_USER





به جای DatabaseName اسم دیتابیستونو بذارید , path هم مسیر بک آپ هست

اینو دوست عزیزمون زحمت کشیدن دستش درد نکنه با این کد تونستم مشکلمو حل کنم soheila_1643
(http://barnamenevis.org/member.php?29793-soheila_1643)

bazardeh
دوشنبه 24 مرداد 1390, 23:11 عصر
سلام خدمت دوست عزیزم اگر خطا شما همان خطا ذکر شده در بالا است
به کد زیر یه تست بگیرید با این کد مشکل من حل شده


SqlConnection.ClearAllPools();


این کد رو بعد کد آخرین کانکشن تون قرار دهید