摘要:基于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格式阅读原文