PDA

View Full Version : مشكل در backupگيري از ديتابيس



navid1n2000
شنبه 30 خرداد 1388, 21:43 عصر
منتوي برنامه م يك قسمتي دارم به اسم پشتيبان گيري
براي ذخيره پشتيبان مشكلي ندارم
اما براي بازيابي پشتيان مشكل دارم
اين ارور رو ميده كه فكر كنم به ديتابيسش ربط دار:
http://upload.iranblog.com/6/1245556587.jpg
دليلش چيه ؟
اينم كدش :


SqlConnection objConnection = new SqlConnection("Server=PC;Database=VamDB;Integrated Security = True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "Restore DataBase VamDB From Disk= '" + Masir + "' ";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();

Soroush.Sarabi
شنبه 30 خرداد 1388, 22:45 عصر
سلام

خوب دوست عزیز شما نمی تونی رو db که الان بهش وصل هستی Restore نمایید.

لازم است که برای این کار به dm master وصل شوید و بعد عملیات را انجام دهید.

navid1n2000
یک شنبه 31 خرداد 1388, 01:45 صبح
سلام

خوب دوست عزیز شما نمی تونی رو db که الان بهش وصل هستی Restore نمایید.

لازم است که برای این کار به dm master وصل شوید و بعد عملیات را انجام دهید.
نفهميدم
طبيعتا همينطوره
يعني اول وصل ميشه به پايگاه داده بعد توي يك سمت از برنامه ميره و پشتبانشو بازيابي مي كنه!!!!!!!!!!!!1

NewFoxStudent
یک شنبه 31 خرداد 1388, 09:46 صبح
دوست عزیز به جای VAMDB باید به یه بانک دیگه مثل master متصل بشی

Soroush.Sarabi
یک شنبه 31 خرداد 1388, 10:48 صبح
دوست عزیز کد رو اینگونه تغییر بده :

SqlConnection objConnection = newSqlConnection("Server=master;Database=VamDB;Integrated Security = True");

navid1n2000
چهارشنبه 03 تیر 1388, 19:11 عصر
دوست عزیز کد رو اینگونه تغییر بده :

SqlConnection objConnection = newSqlConnection("Server=master;Database=VamDB;Integrated Security = True");
نه . فكر كنم بايد اينطوريش كنم :


SqlConnection objConnection = new SqlConnection("Server=PC;Database=master;Integrated Security = True");
SqlDataAdapter objDataAdapter = new SqlDataAdapter();
objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "Restore DataBase VamDB From Disk= '" + Masir + "' ";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;
objConnection.Open();
objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();

اينطوريش كردم . حالا اين پيامو ميده :
http://upload.iranblog.com/6/1245947604.jpg

NewFoxStudent
چهارشنبه 03 تیر 1388, 20:00 عصر
از این پیغام مشخص که شما جای دیگه به این بانک اطلاعاتی (VamDB) متصل هستید
از بسته بودن همه کانکشنها و همینطور Use نبودن بانک توی queryAnaliser یا Enterpricemanager مطمئن بشید

navid1n2000
چهارشنبه 03 تیر 1388, 20:08 عصر
از این پیغام مشخص که شما جای دیگه به این بانک اطلاعاتی (VamDB) متصل هستید
از بسته بودن همه کانکشنها و همینطور Use نبودن بانک توی queryAnaliser یا Enterpricemanager مطمئن بشید
مشكل منم همينه
شايد يه جاي ديگه وصله
يعني راهي نداره كه در حين اتصال اينطور شه؟؟؟؟؟؟؟؟؟؟؟؟
دستوري وجود داره كه همه ارتباطهارو ببنده ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

vpourshab
چهارشنبه 03 تیر 1388, 22:59 عصر
از كد زير استفاده كنيد فقط دقت كنيد كه به جاي اسامي زير مقدار صحيح پاس كنيد
Name نام فايلي كه مي خواهيد نام فايل بك آپ باشد
path مسير روي هارد
DataBase نام ديتابيس روي سرور


if (Backup)
{
string Backupstr = string.Format("BACKUP DATABASE [{0}] TO DISK = N'{1}' WITH NOFORMAT, INIT, NAME=N'{2}',SKIP, NOREWIND, NOUNLOAD, STATS=10", Database, Path, Name);
try
{

sqlconn.Open();
sqlcomm.CommandText = Backupstr;
sqlcomm.ExecuteNonQuery();
sqlconn.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}

}

if (restor)
{
string Restorstr = string.Format("USE master; RESTORE DATABASE [{1}] FROM DISK = N'{0}' WITH REPLACE,STATS=10", Database, Path, Name);
try
{

sqlconn.Open();
sqlcomm.CommandText = Restorstr;
sqlcomm.ExecuteNonQuery();
sqlconn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

navid1n2000
سه شنبه 30 تیر 1388, 16:38 عصر
من هنوز مشكلم حل نشده
و باز همون پيغام خطارو ميده

Ali_Mor
چهارشنبه 31 تیر 1388, 16:45 عصر
معمولا وقتی در کانکشن استرینگPooling=true می باشد(که بصورت پیش فرض هم همینگونه است) حتی بعد از closeنمودن کانکشن، باز ارتباطاتی از برنامه شما با بانک برقرار است.
یک روش اینه که در کانکشن استرینگ Pooling=false بگذاری(که بنظر حقیر راه خوبی نیست)
یک روش هم استفاده از این کد برای بسته شدن تمام کانکشنها می باشد

SqlConnection.ClearAllPools
در ضمن برای چنین اعمالی با بانک کلاسهای Smo در دات نت تعبیه شده. در این سایت بگردی پیدا می کنی

Ali_Mor
جمعه 02 مرداد 1388, 00:17 صبح
این تابع کانکشن استرینگ و مسیری که فایل پشتیبان بانک باید ذخیره بشه رو میگیره و عمل پشتیبان گیری رو انجام میده


Public Sub BackupDatabase(ByVal ConnectionStr As String, ByVal PathSave As String)

Using cnn As New SqlConnection(ConnectionStr)

cnn.Open()

' Get server
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)

' Create backup device item for the backup
PathSave = System.IO.Path.Combine(PathSave, cnn.Database + ".bak")
Dim bdi As New BackupDeviceItem(PathSave, DeviceType.File)

' Create the backup informaton
Dim Backup As New Backup
With Backup
.Devices.Add(bdi)
'Type Of Backup
.Action = BackupActionType.Database
.BackupSetDescription = "Backup DataBase at: " & Date.Now.ToString
.BackupSetName = "set " & cnn.Database
.Database = cnn.Database
.LogTruncation = BackupTruncateLogType.Truncate
.Initialize = True
'Set the Incremental property to False to specify that this is a full database backup.
.Incremental = False
'Backup.ExpirationDate = New DateTime(2007, 5, 1)
End With

' Run the backup
Backup.SqlBackup(Srv)
End Using
End Sub


این تابع هم این تابع کانکشن استرینگ و مسیری که فایل پشتیبان بانک در اونجا قرار داره رو میگیره و عمل بازیابی رو انجام میده


Public Sub RestoreBackup(ByVal ConnectionStr As String, ByVal BackupFilePath As String)
Using cnn As New SqlConnection(ConnectionStr)
cnn.Open()
Dim DBName As String = cnn.Database

' change dataBase to master
cnn.ChangeDatabase("master")

' Get server
Dim Srvcon As New ServerConnection(cnn)
Dim Srv As New Server(Srvcon)

' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(BackupFilePath, DeviceType.File)

' Create the restore object
Dim Restore As New Restore()
'cnn.Close()
With Restore
.Devices.Add(bdi)
.NoRecovery = False
.ReplaceDatabase = True
.Database = DBName
.PercentCompleteNotification = 10
End With


Srv.KillAllProcesses(DBName) 'Important Code For Remove All Processes
Restore.SqlRestore(Srv)
End Using
End Sub

در ضمن این موارد فراموش نشه


Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Common