PDA

View Full Version : سوال: بدست آوردن مشخصات آخرین نسخه پشتیبان



طبیب دل
دوشنبه 24 اسفند 1388, 11:45 صبح
با سلام
چطوری میشه مشخصات آخرین نسخه بکاپ گرفته شده از دیتابیس رو مثل مسیر ، تاریخ و ساعت بدست آورد؟
آیا حتمآ باید تو دیتابیس ذخیره بشه یا روش دیگه ای هم هست؟

mehdi.mousavi
دوشنبه 24 اسفند 1388, 13:31 عصر
با سلام چطوری میشه مشخصات آخرین نسخه بکاپ گرفته شده از دیتابیس رو مثل مسیر ، تاریخ و ساعت بدست آورد؟ آیا حتمآ باید تو دیتابیس ذخیره بشه یا روش دیگه ای هم هست؟

سلام.
چرا نام فایل رو هنگام گرفتن Backup جوری نمیذارید که بعدا بتونید این اطلاعات رو از روی نام فایل استخراج کنید؟ بعنوان مثلا backup_01_01_2010 یا هر چیز دیگه... بدین شکل مشکل ساعت و تاریخ رفع میشه...

اما اگر مایل نیستید اینکارو انجام بدید، قاعدتا میتونید از SMO/DMO استفاده کنید. من چون دقیقا ازش اطلاع ندارم نمیتونم کمکتون کنم، اما احتمالا در بخش SQL Server کسی باشه که ابتدا به این سوال پاسخ بده که "آیا DMO توانایی استخراج اطلاعاتی که شما بدنبالش هستید از یک فایل Backup رو داره یا خیر. اگر پاسخ مثبت هستش، چگونه".

وقتی به این سوال پاسخ داده بشه، اونوقت میتونیم CLSID های مورد نظر برای کار بار اون Object خاص رو پیدا کنیم و توی کد خودمون، همونکار رو بطور خودکار انجام بدیم.

موفق باشید.

پاورقی: من فرض کردم شما از SQL Server استفاده می کنید! لطفا هنگام مطرح کردن چنین سوالاتی، حتما اینگونه اطلاعات رو هم در اختیار خوانندگان قرار بدید.

طبیب دل
دوشنبه 24 اسفند 1388, 17:34 عصر
سلام.
چرا نام فایل رو هنگام گرفتن Backup جوری نمیذارید که بعدا بتونید این اطلاعات رو از روی نام فایل استخراج کنید؟ بعنوان مثلا backup_01_01_2010 یا هر چیز دیگه... بدین شکل مشکل ساعت و تاریخ رفع میشه...

اما اگر مایل نیستید اینکارو انجام بدید، قاعدتا میتونید از SMO/DMO استفاده کنید. من چون دقیقا ازش اطلاع ندارم نمیتونم کمکتون کنم، اما احتمالا در بخش SQL Server کسی باشه که ابتدا به این سوال پاسخ بده که "آیا DMO توانایی استخراج اطلاعاتی که شما بدنبالش هستید از یک فایل Backup رو داره یا خیر. اگر پاسخ مثبت هستش، چگونه".

وقتی به این سوال پاسخ داده بشه، اونوقت میتونیم CLSID های مورد نظر برای کار بار اون Object خاص رو پیدا کنیم و توی کد خودمون، همونکار رو بطور خودکار انجام بدیم.

موفق باشید.

پاورقی: من فرض کردم شما از SQL Server استفاده می کنید! لطفا هنگام مطرح کردن چنین سوالاتی، حتما اینگونه اطلاعات رو هم در اختیار خوانندگان قرار بدید.
با سلام
فرض شما در مورد بانکم درسته
در مورد نام فایل باید بگم که نام رو کاربر میتونه تغییر بده و دست من نیست ولی در مورد مواردی مثل SMO/DMO و اصطلاحات دیگه که به کار بردید هیچی نمیدونم اگه میشه بیشتر توضیح بدید

طبیب دل
سه شنبه 25 اسفند 1388, 09:00 صبح
سلام.
چرا نام فایل رو هنگام گرفتن Backup جوری نمیذارید که بعدا بتونید این اطلاعات رو از روی نام فایل استخراج کنید؟ بعنوان مثلا backup_01_01_2010 یا هر چیز دیگه... بدین شکل مشکل ساعت و تاریخ رفع میشه...

اگر نام فیل رو طوری که گفتید بزارم چطوری میشه به اطلاعاتش دسترسی داشت؟ ضمن اینکه ممکنه تو هر مسیریی ذخیره بشه

طبیب دل
سه شنبه 25 اسفند 1388, 10:11 صبح
چرا کسی جواب نمیده خواهش میکنم کمک کنید:افسرده::ناراحت:

طبیب دل
چهارشنبه 26 اسفند 1388, 00:20 صبح
یکی از دوستان در تاپیک sqlServer این نظر رو دادن گفتم شاید بد نباشه بقیه دوستان هم بدونن


SELECT TOP 2 t2.database_name, t2.backup_finish_date, t1.physical_name
FROM msdb.dbo.backupfile t1
INNER JOIN msdb.dbo.backupset t2
ON t1.backup_set_id = t2.backup_set_id
ORDER BY t2.backup_finish_date DESC;

حالا اگر کسی باز هم نظری داره استفاده میکنم چون من هنوز این استفاده نکردم اگه کسی میتونه توضیح بده

FastCode
چهارشنبه 26 اسفند 1388, 06:44 صبح
using System;
using System.Windows.Forms;
namespace Esfand.Data
{
public partial class FormBackupRestore : Form
{
public FormBackupRestore()
{
InitializeComponent();
pictureBox1.Load("Backup.png");
pictureBox2.Load("Restore.png");
foreach (System.IO.DriveInfo Info in System.IO.DriveInfo.GetDrives())
{
if (Info.IsReady)
if ((Info.DriveType == System.IO.DriveType.Removable) || (Info.DriveType == System.IO.DriveType.Ram) || (Info.DriveType == System.IO.DriveType.CDRom && Info.DriveFormat == "LFS") || (Info.DriveType == System.IO.DriveType.Network) )
{
//Info.TotalFreeSpace is important but hard to implement.
comboBox1.Items.Add(Info);
comboBox2.Items.Add(Info);
}
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
try
{
if (comboBox1.SelectedItem != null)
{
string n = System.DateTime.Now.Ticks.ToString();
Backer.Backup(/*ConnectionString*/, /*DataBase Name*/, comboBox1.SelectedItem.ToString());
}
}
catch
{
System.Diagnostics.Debugger.Break();
}
}
private void pictureBox2_Click(object sender, EventArgs e)
{
try
{
DB DB = (DB)comboBox3.SelectedItem;
if (DB != null)
{
Backer.Restore(/*ConnectionString*/, /*DataBase Name*/, DB.MDF, DB.LDF);
}
}
catch (Exception ex)
{
Interaction.ReportErr(ex);
System.Diagnostics.Debugger.Break();
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox3.Items.Clear();
string t;
DB DB;
foreach (String S in System.IO.Directory.GetDirectories(comboBox2.Selec tedItem.ToString(), /*DataBase Name*/ + "*.MDF", System.IO.SearchOption.TopDirectoryOnly))
{
try
{
t = S.Remove(0, (comboBox2.SelectedItem.ToString() + "Esfand").Length).ToUpper();
DB = new DB();
DB.MDF = t;
DB.LDF = t.Replace("MDF", "LDF");
DB.Time = System.DateTime.FromBinary(long.Parse(t));
DB.ShamsiDate = /*ShamsiProcedure*/(DB.Time);
comboBox3.Items.Add(DB);
}
catch { }
}
}
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;

/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

#region Windows Form Designer generated code

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.comboBox3 = new System.Windows.Forms.ComboBox();
((System.ComponentModel.ISupportInitialize)(this.p ictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.p ictureBox2)).BeginInit();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.FormattingEnabled = true;
this.comboBox1.Location = new System.Drawing.Point(6, 88);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(201, 21);
this.comboBox1.TabIndex = 1;
//
// pictureBox1
//
this.pictureBox1.Location = new System.Drawing.Point(6, 7);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(201, 75);
this.pictureBox1.TabIndex = 4;
this.pictureBox1.TabStop = false;
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);
//
// pictureBox2
//
this.pictureBox2.Location = new System.Drawing.Point(6, 115);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(201, 75);
this.pictureBox2.TabIndex = 5;
this.pictureBox2.TabStop = false;
this.pictureBox2.Click += new System.EventHandler(this.pictureBox2_Click);
//
// comboBox2
//
this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Location = new System.Drawing.Point(6, 196);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(201, 21);
this.comboBox2.TabIndex = 7;
this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexCh anged);
//
// comboBox3
//
this.comboBox3.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox3.FormattingEnabled = true;
this.comboBox3.Location = new System.Drawing.Point(6, 223);
this.comboBox3.Name = "comboBox3";
this.comboBox3.Size = new System.Drawing.Size(201, 21);
this.comboBox3.TabIndex = 8;
//
// FormBackupRestore
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(212, 248);
this.Controls.Add(this.comboBox3);
this.Controls.Add(this.comboBox2);
this.Controls.Add(this.pictureBox2);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.comboBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FormBackupRestore";
this.Text = "FormBackupRestore";
((System.ComponentModel.ISupportInitialize)(this.p ictureBox1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.p ictureBox2)).EndInit();
this.ResumeLayout(false);

}

#endregion

private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private System.Windows.Forms.ComboBox comboBox2;
private System.Windows.Forms.ComboBox comboBox3;
private class DB
{
public string MDF, LDF, ShamsiDate;
public DateTime Time;
public override string ToString() { return ShamsiDate; }
}
}
}

public static void Backup(string ConnectionString, string Database, string Path)
{
System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("MSSQLSERVER", ".");
if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Stop ped) { sc.Start(); sc.WaitForStatus(System.ServiceProcess.ServiceCont rollerStatus.Running); }
System.Data.SqlClient.SqlConnection SQLConn = new System.Data.SqlClient.SqlConnection(ConnectionStri ng);
SQLConn.Open();
string SourceM = (new System.Data.SqlClient.SqlCommand("SELECT TOP 1 filename FROM sysfiles WHERE (groupid = 1)", SQLConn)).ExecuteScalar().ToString().TrimEnd(' ');
string SourceL = (new System.Data.SqlClient.SqlCommand("SELECT TOP 1 filename FROM sysfiles WHERE (groupid = 0)", SQLConn)).ExecuteScalar().ToString().TrimEnd(' ');
if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Stop ped) { sc.Stop(); sc.WaitForStatus(System.ServiceProcess.ServiceCont rollerStatus.Stopped); }
string DT = System.DateTime.Now.Ticks.ToString();
System.Threading.Thread.Sleep(100);
System.IO.File.Copy(SourceM, Path + Database + DT + ".mdf", true);
System.IO.File.Copy(SourceL, Path + Database + DT + ".ldf", true);
sc.Start();
}
public static void Restore(string ConnectionString, string Database, string Path_M, string Path_L)
{
System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("MSSQLSERVER", ".");
if (sc.Status == System.ServiceProcess.ServiceControllerStatus.Stop ped) { sc.Start(); sc.WaitForStatus(System.ServiceProcess.ServiceCont rollerStatus.Running); }
System.Data.SqlClient.SqlConnection SQLConn = new System.Data.SqlClient.SqlConnection(ConnectionStri ng);
SQLConn.Open();
string SourceM = (new System.Data.SqlClient.SqlCommand("SELECT TOP 1 filename FROM sysfiles WHERE (groupid = 1)", SQLConn)).ExecuteScalar().ToString().TrimEnd(' ');
string SourceL = (new System.Data.SqlClient.SqlCommand("SELECT TOP 1 filename FROM sysfiles WHERE (groupid = 0)", SQLConn)).ExecuteScalar().ToString().TrimEnd(' ');
if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Stop ped) { sc.Stop(); sc.WaitForStatus(System.ServiceProcess.ServiceCont rollerStatus.Stopped); }
System.IO.File.Copy(Path_M, SourceM, true);
System.IO.File.Copy(Path_L, SourceL, true);
sc.Start();
}

اگر چیزی رو فراموش کردم بگو.

طبیب دل
چهارشنبه 26 اسفند 1388, 19:59 عصر
fastcode عزیز از جوابت ممنونم ولی اگه بشه خود برنامه رو همراه با فرمها بزاری خیلی بهتره و اگه ممکنه یه خورده توضیح در مورد کدها بدی بد نیست باز هم ممنونم