1.方案分析
还原数据库是使用数据库的备份文件对数据库进行还原操作。由于病毒的破坏,磁盘损坏或操作员操作失误等原因会导致数据丢失、不完整或数据错误,此时,需要对数据库进行还原。
在实际应用中选用怎样的数据库备份方案将直接对数据库的恢复产生影响,而且也决定了数据库在遭到破坏前后的一致性水平,所以在做出选用什么样的数据库备份方案时必须认识到以下几个问题。
(1)如果进行数据库的完全备份,那么在恢复数据库时将无法恢复自最近一次数据库备份以来的数据库中所发生的所有事务,这种方案的优点是简单,而且在进行数据库恢复时操作也很方便。
(2)如果在进行数据库备份时也进行事务日志备份,可以将数据库恢复到失败点。
2.实施过程
本实例主要应用RESTORE DATABASE语句还原数据库。
具体实施过程:
(1)新建一个网站,将其命名为FileRevert,默认主页为Index.aspx。
(2)在Index.aspx页添加1个DropDownList控件,1个FileUpload控件,1个Button控件,用于选择要恢复的数据库、选择要恢复数据库的文件和执行还原数据库操作。
(4)主要程序代码。
在Page_Load事件中,根据条件从数据库中检索出相应的数据,并将结果集中的数据填充到DropDownList中,代码如下。
双击【恢复数据库】按钮触发该按钮的Click事件,在该事件中执行数据库还原操作,代码如下。 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string cmdtxt1 = "Server=(local);DataBase=master;Uid=sa;Pwd=";
string cmdtxt2 = "Exec sp_helpdb";
SqlConnection Con = new SqlConnection(cmdtxt1);
Con.Open();
SqlCommand mycommand = new SqlCommand(cmdtxt2, Con);
SqlDataReader dr = mycommand.ExecuteReader();
this.dropSqlName.DataSource = dr;
this.dropSqlName.DataTextField = "name";
this.dropSqlName.DataBind();
dr.Close();
Con.Close();
}
}
注意:在编写上述代码前,需要在命名空间区域添加“using System.Data.SqlClient“和”protected void btnRestore_Click(object sender, EventArgs e)
{
string path = this.fileShow.PostedFile.FileName; //获得备份路径及数据库名称
string last = path.Substring(path.LastIndexOf(".") + 1);//获取文件的后缀名
string dbname = this.dropSqlName.SelectedValue;
if (last == "bak") //判断是不是数据库备份文件
{
string cmdtxt1 = "Server=(local);database='" + this.dropSqlName.SelectedValue + "';Uid=sa;Pwd=";
string cmdtxt2 = "use master restore database " + dbname + " from disk='" + path + "'";
SqlConnection Con = new SqlConnection(cmdtxt1);
Con.Open();
try
{
SqlCommand Com = new SqlCommand(cmdtxt2, Con);
Com.ExecuteNonQuery();
Response.Write("alert('还原数据成功!');
location='Index.aspx'");
}
catch (Exception ms)
{
Response.Write(ms.Message);
Response.Write("alert('还原数据失败!')
");
}
finally
{
Con.Close();
}
}
else
{
Response.Write("alert('必须是数据库文件!');
");
}
}