您的位置:首页 > 数据库

基于ASP.NET(C#)Web开发平台,对远程备份与恢复SQLServer数据库的方法

2008-10-29 09:26 796 查看
摘要:基于ASP.NET(C#)Web开发平台,对远程备份与恢复SQLServer数据库的方法进行了简单、详细地介绍;解决了基于WEB方式的远程数据库恢复中我们常常会遇到“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE操作异常终止”等问题;高效地实现了远程数据库备份与恢复功能。
  关键词:ASP.net;C#;远程备份与恢复;SQLServer数据库
  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31410-02
  Design and Implementation of the Long-distance Backup and Recovery SQLServer Database Based on ASP.net(C#)
  YIN Bang-zhi
  (Heyuan Vocational Technical School of GuangDong Prov.,Heyuan 517000,China)
  Abstract:Based on the ASP.NET(C#) Web development platform,it introduced the method of long-distance backup and recovery SQLServer database simply and detailedly; It solved the problem we met on the web when we are recovery long-distance database“Because while the database is being used,others can’t get the right to access it. RESTORE DATABASE operation will abnormally terminate”;It carried out backup and recovery function of the long-distance database efficiently.
  Key words:ASP.net;C#; Long-distance Backup and Recovery;SQLServer Database
  
  1 引言
  
  随着数据库管理技术的发展,为了避免由于意外而引发的数据丢失,常常需要对数据进行备份,以便日后能够对相关数据进行恢复,减少由于意外而造成的损失。T-SQL语言提供的BACKUP和RESTORE命令可以分别实现数据备份与恢复操作,但基于WEB方式的远程数据库恢复中我们常常会遇到“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE操作异常终止”等问题。原因很简单,当用户与SQLServer数据库正在通信时,数据库系统具有排它访问性。下面基于ASP.NET(C#)Web开发平台,就远程备份与恢复SQLServer数据库进行了详细地设计与实现。
  
  2 界面设计及控件说明
  
  2.1 界面设计
  界面设计如图1示:
  图1
  2.2 界面控件说明
  界面控件说明如表1示:
  表1
  
  3 变量定义及本框内容为空的判断处理方法
  
  3.1 定义变量
  设数据库备份文件存放在Web服务器上的指定虚假路径下的DataBackup子目录下。我们可以使用ASP.net的Server对象的MapPath方法获得Web服务器上的指定虚假路径相对应的物理文件路径。
  string ServerName = Txt_ServerName.Text.ToString();
  string DBName = Txt_DBName.Text.ToString();
   string UName = Txt_UserName.Text.ToString();
   string UPassword = Txt_UserPasswrod.Text.ToString();
   string DBBackupName = Server.MapPath("DataBackup//") + Txt_FileName Text.ToString();
  3.2 文本框内容为空的判断及处理方法
  下面给出文本框Txt_ServerName内容为空的判断及处理方法,其余文本框内容为空的判断及处理方法类似。
  if (Txt_ServerName.Text.Trim() == "")
  {ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('服务器名或IP地址不能为空!')", true);
  return;}
  3.3 建立并打开远程数据库连接
  string ConnStrt = "Server='" + ServerName + "';Initial Catalog='" + DBName + "';uid='" + UName + "';pwd='" + UPassword + "';";
  SqlConnection Conn = new SqlConnection(ConnStr);
  Conn.Open();
  
  4 远程数据库备份与恢复程序实现

 4.1远程数据库备份
  命令按钮Btn_DBackup 单击事件C#程序实现代码如下:
  protected void Btn_DBackup _Click(object sender, EventArgs e)
  {string BackupStr = "backup database " + DBName + " to disk='" + DBBackupName + "'";
  try {
  if (File.Exists(DBBackupName)) {
  ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('此文件已存在,请重新输入!')", true);
   return; }
  SqlCommand comm = new SqlCommand(BackupTxt, conn);
  comm.ExecuteNonQuery(); //执行远程数据库备份命令
  ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('数据库备份成功!')", true); }
   catch (Exception ms) {
  ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('数据库备份失败!')", true);
   Response.Write(ms.Message); }
  
本文原文
   finally {
   conn.Close(); //关闭远程数据库连接 }}
  4.2 远程数据库恢复
  我们可以采用以下步骤实现远程数据库恢复操作:
  (1)使远程数据库转入单用户模式,断开所有已连接数据库的用户的连接并回退它们的事务。
  (2)使用T-SQL中的“restore”命令恢复远程数据库。
  (3)使远程数据库转入多用户模式。
  命令按钮Btn_ DRecovery单击事件C#程序实现代码如下:
  protected void Btn_DRecovery_Click(object sender, EventArgs e)
  { Btn_DRecovery.Attributes.Add("onclick", "return confirm('确认要恢复数据吗?')");
  string RecoveryStr = "Alter DATABASE " + DBName + " set single_user with rollback immediate use master RESTORE DATABASE " + DBName + " from disk='" + DBBackupName + "'" ;
   SqlConnection conn = new SqlConnection(RecoveryStr);
   conn.Open();
   try{
  SqlCommand comm1 = new SqlCommand(RecoveryStr, conn);
  comm1.ExecuteNonQuery(); //执行远程数据库恢复命令
  RecoveryStr = "Alter DATABASE " + DBName + " set multi_user";
  SqlCommand comm2 = new SqlCommand(RecoveryStr, conn);
  comm2.ExecuteNonQuery();
  //使远程数据库转入多用户模式
  ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('数据库还原成功!')", true);}
   catch (Exception ms){
  ClientScript.RegisterClientScriptBlock(this.GetType(), "Error", "alert('数据库还原失败!')", true);
  Response.Write(ms.Message);}
   finally{
  conn.Close();}}
  
  5 程序运行及注意事项
  
  程序运行如图2所示。
  图2
  注意事项如下:
  (1)在命名空间区域需要引用using System.Data.SqlClient命名空间。
  (2)为了让SQL Server在断开用户的连接之前等待用户完成他们的事务,可以使用下面的命令格式:
  ALTER DATABASE 远程数据库名称 SET SINGLE_USER WITH ROLLBACK AFTER 时间(秒)SECONDS
  即让SQL Server先等待(如30秒钟),然后断开所有的连接并回退它们的事务。
  (3)在还原过程中,为了防止由于文件过大而不能完成还原操作,我们可以在Web.Config文件中配置允许的文件大小。如:
  httpRuntimemaxRequestLength="字节数"ExecutionTimeout="时间值(秒)"
  
  6 结束语
  
  实现数据库备份与恢复的方法有多种,在日常的SQLServer数据库管理中,我们常常直接打开SQLServer的企业管理器对数据库系统进行备份与恢复,但这只能在服务器上操作,不能远程执行。本文中所谈到的方法为远程数据库备份与恢复提供了一种方便、快捷、有效的途径。
  
  参考文献:
  [1]张晓辉等.SQL Server 2000管理及应用系统开发[M].北京:人民邮电出版社.2003.
  [2]明日科技 张跃廷,等.ASP.NET数据库系统开发完全手册[M]. 北京:人民邮电出版社,2007.
  注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: