ASP.net(C#)远程备份与恢复SQLServer数据库的设计与实现

时间:2022-10-21 07:03:46

ASP.net(C#)远程备份与恢复SQLServer数据库的设计与实现

摘要:基于(C#)Web开发平台,对远程备份与恢复SQLServer数据库的方法进行了简单、详细地介绍;解决了基于WEB方式的远程数据库恢复中我们常常会遇到“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE操作异常终止”等问题;高效地实现了远程数据库备份与恢复功能。

关键词:;C#;远程备份与恢复;SQLServer数据库

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31410-02

Design and Implementation of the Long-distance Backup and Recovery SQLServer Database Based on (C#)

YIN Bang-zhi

(Heyuan Vocational Technical School of GuangDong Prov.,Heyuan 517000,China)

Abstract:Based on the (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:;C#; Long-distance Backup and Recovery;SQLServer Database

1 引言

随着数据库管理技术的发展,为了避免由于意外而引发的数据丢失,常常需要对数据进行备份,以便日后能够对相关数据进行恢复,减少由于意外而造成的损失。T-SQL语言提供的BACKUP和RESTORE命令可以分别实现数据备份与恢复操作,但基于WEB方式的远程数据库恢复中我们常常会遇到“因为数据库正在使用,所以未能获得对数据库的排它访问权,RESTORE DATABASE操作异常终止”等问题。原因很简单,当用户与SQLServer数据库正在通信时,数据库系统具有排它访问性。下面基于(C#)Web开发平台,就远程备份与恢复SQLServer数据库进行了详细地设计与实现。

2 界面设计及控件说明

2.1 界面设计

界面设计如图1示:

图1

2.2 界面控件说明

界面控件说明如表1示:

表1

3 变量定义及本框内容为空的判断处理方法

3.1 定义变量

设数据库备份文件存放在Web服务器上的指定虚假路径下的DataBackup子目录下。我们可以使用的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]明日科技 张跃廷,等数据库系统开发完全手册[M]. 北京:人民邮电出版社,2007.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:VB6对.NET类库的调用 下一篇:HLA中对象模型模板向关系表映射方法研究