PDA

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



shahin60
شنبه 23 شهریور 1392, 18:14 عصر
یاسلام خدمت دوستان
یه برنامه نوشتم تحت شبکه ،هر کاری می کنم از دیتابیس پشتیبان بگیرم وبازیابی کنم نمی شه وخطا می گیره.
همه تاپیک ها تو این موضوع رو دیدم نتیجه نگرفتم
کلی کد از همین سایت گرفتم تست کردم نمی شه که نمی شه.
کانکشن استرینگ من به این شکله و از sql server 2005 استفاده می کنم

Data Source=192.168.0.1;Initial Catalog=DBFANO;User ID=ali;Password=010203

مسیر پشتیباگیری کلاینت ها وسرور باید کجا باشه؟
آیا کلاینت ها می تونن بازیابی کنن؟
کد پشتیبان گیری و بازیابی توسط سرور و کلاینت ها رو می خوام؟
:خجالت:
اگه یه نمونه بزارید که عالی می شه

parvizwpf
شنبه 23 شهریور 1392, 19:10 عصر
خطا چیه دقیقا؟

shahin60
یک شنبه 24 شهریور 1392, 08:18 صبح
خطا نمی تونه پشتیبان بگیره
دوستان کمک کنن
خیلی ضروریه؟

y_ziaee
یک شنبه 24 شهریور 1392, 11:11 صبح
دوست من سلام:

میشه دقیقا" پیغام خطایی را که دریافت میکنید بنویسید؟

shahin60
دوشنبه 25 شهریور 1392, 22:39 عصر
کد پشتیبان گیری من:

Shamsi.Shamsi sh = new Shamsi.Shamsi();
string[] m = sh.ShamsiDate().Split('/');
string h = m[0].ToString() + "-" + m[1].ToString() + "-" + m[2].ToString();
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup " + h;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = "//192.168.0.1 \\Backup";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=192.168.0.1;Initial Catalog=DBFANO;User ID=ali;Password=010203 ");
SqlConnection.ClearAllPools();
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//گرفتن نام دیتابیس
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "' WITH NOFORMAT, NOINIT, NAME = N'DBFANO-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
cmd.Connection = new SqlConnection(@"Data Source=192.168.0.1;Initial Catalog=DBFANO;User ID=ali;Password=010203");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}
catch
{
MessageBox.Show("ايجاد نسخه پشتيبان با خطا مواجه گرديد ", " پيام ", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
}

}

AliSaeedi_v
دوشنبه 25 شهریور 1392, 23:28 عصر
سلام.من پارسال یه همچین برنامه ای نوشتم.کلاینت ها نمیتونن نه پشتیبان بگیرن و نه بازیابی کنن.چون قراره یه فایل رو از سرور اطلاعاتش رو بگیرن و بسازن و یا به سرور بفرستن و بازگردانی کنن باید برنامه نویسی تحت شبکه انجام بدی و بتونی امنیت رو طوری تنظیم کنی تا سیستم ها بتونن به منابع هم دسترسی داشته باشن.من نتونستم و دیگه هم کار نکردم..

shahin60
سه شنبه 26 شهریور 1392, 08:48 صبح
چرا من کلی برنامه دیدم کلاینت ها پشتیبان می گیرن
اگر یه کلاینت با سطح دسترسی مدیر وارد بشه باید بتونه پشتیبان بگیره وبازیابی کنه
مثلا همین کد بالا اگر مسیر پوشه شر شده تو سروز رو. بهش بدی پشتیبان می گیره ولی بازیابی نمی کنه
اساتید کمک کنن :افسرده: :افسرده:

VRAnonymous
سه شنبه 26 شهریور 1392, 22:45 عصر
باید دوتا سیستم توی شبکه به sharing folder های همدیگه دسترسی داشته باشن

من خودم برای این کار مراحل زیر رو انجام دادم :
به صورت دستی و بدون برنامه نویسی :
هر دوتا سیستم رو به هم شناسوندم هم از طریق ip هم از طریق computer name توی شبکه های workgroup

برنامه نویسی :: برای پشتیبان گیری در کلاینت
1.یک فولدر share میکنی
2.یه درخواست به بانک میفرستی که فایل بک آپ رو توی اون آدرس share ذخیر کنه مثلا client\\sharefolder\db.bak
3.دیگه این مرحله به اختیار خودته که میتونی زیپ کنی یا نه

برنامه نویسی : :بازرسانی اطلاعات
1.باز هم یه فولدر share میکنی
2.اندفعه به سرور میگی فایل db.bak را بخونه و restore کنه


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

shahin60
چهارشنبه 27 شهریور 1392, 11:18 صبح
میشه کدهاشو بزاری!
خیلی واجبه

VRAnonymous
پنج شنبه 28 شهریور 1392, 20:52 عصر
Private Shared Function GetSecurityDescriptor() As ManagementBaseObject
Dim account As New NTAccount("NT Authority", "Everyone")
Dim sid As SecurityIdentifier = DirectCast(account.Translate(GetType(SecurityIdent ifier)), SecurityIdentifier)
Dim sidArray As Byte() = New Byte(sid.BinaryLength - 1) {}
sid.GetBinaryForm(sidArray, 0)
Dim Trustee As ManagementObject = New ManagementClass(New ManagementPath("Win32_Trustee"), Nothing)
Trustee("Domain") = "NT Authority"
Trustee("Name") = "Everyone"
Trustee("SID") = sidArray
Dim AdminACE As ManagementObject = New ManagementClass(New ManagementPath("Win32_Ace"), Nothing)
AdminACE("AccessMask") = 2032127
AdminACE("AceFlags") = 3
AdminACE("AceType") = 0
AdminACE("Trustee") = Trustee
Dim SecurityDescriptor As ManagementObject = New ManagementClass(New ManagementPath("Win32_SecurityDescriptor"), Nothing)
SecurityDescriptor("ControlFlags") = 4
'SE_DACL_PRESENT
SecurityDescriptor("DACL") = New Object() {AdminACE}
Return SecurityDescriptor
End Function
Private Function ExistShareName(ByVal ShareDirectoryName As String) As Boolean
ShareDirectoryName = ShareDirectoryName.Trim
Dim ManagementClass As New Management.ManagementClass("Win32_Share")
Dim ManagementObjet As Management.ManagementObject
For Each ManagementObjet In ManagementClass.GetInstances()
If ManagementObjet.Properties("Type").Value = &H0 Then
If (ManagementObjet.Properties("Name").Value.ToString() = ShareDirectoryName) Then
Return True
End If
End If
Next ManagementObjet
Return False
End Function
Private Function SetShareDirectory(ByVal SharePath As String, ByVal ShareName As String, ByVal ShareDescription As String) As Boolean
Dim managementClass As New ManagementClass("Win32_Share")
Dim inParams As ManagementBaseObject = managementClass.GetMethodParameters("Create")
inParams("Description") = ShareDescription
inParams("Name") = ShareName
inParams("Path") = SharePath
inParams("Type") = &H0
inParams("MaximumAllowed") = Nothing
inParams("Password") = Nothing
inParams("Access") = GetSecurityDescriptor()
Dim outParams As ManagementBaseObject = managementClass.InvokeMethod("Create", inParams, Nothing)
If Convert.ToUInt32(outParams.Properties("ReturnValue").Value) <> 0 Then
Return False
Else
Return True
End If
End Function
Private Function UnSetShareDirectory(ByVal ShareName As String) As Boolean
ShareName = ShareName.Trim
If Not ExistShareName(ShareName) Then Return True
Try
Using MyManagementObject As New ManagementObject("root\cimv2", "Win32_Share.Name='" & ShareName & "'", Nothing)
Dim outParams As ManagementBaseObject = MyManagementObject.InvokeMethod("delete", Nothing, Nothing)
'Return CInt(CUInt(outParams.Properties("ReturnValue").Value))
Return True
End Using
Catch ex As Exception
Return False
End Try

End Function



واسه share کردنه
برای پارامترهاشو بقیه چیزها توی گوگل بگرد

a_ehsan68
جمعه 29 شهریور 1392, 00:05 صبح
حداقل اگه کاربرای عزیز جواب سوال دوستمونو نمیدونن حداقل از مدیران محترم خواهش میکنم جواب سوال دوستمونو بدن.

این از سوال خیلی کاربرانه. از جمله خود بنده.

مرسی

shahin60
جمعه 29 شهریور 1392, 18:01 عصر
دوستان بیشتر راهنمایی کنن