Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44837187
  • 博文数量: 384
  • 博客积分: 9990
  • 博客等级: 中将
  • 技术积分: 5644
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-05 17:44
文章分类

全部博文(384)

文章存档

2011年(1)

2008年(383)

分类: 服务器与存储

2008-06-06 05:30:54

一、背景

一旦系统正常运行以后,系统维护最主要工作就是数据安全与可恢复性。本方案(以下提到的数据库均指微软的Sql Server7.0或以上数据库)主要探讨数据库备份与恢复。

一般的数据备份解决方案无非是以下三种:(1)、磁带备份;(2)、双机热备份;(3)、手工备份。作为一般的中小型政府部门和企业采用磁带备份,代价太 高,性能价格比不高;普遍采用的可能是双机热备份方案,但是用户可能依然不放心,还需要手工备份,把数据存放到一个与外界断绝联系的可控环境中,这种情况 是普通存在的。所以作为双机热备份方案的辅助方案或者在条件限制的情况下,作为双机热备份的替代方案,有必要整理出一套手工备份方案。

二、设计思路

Sql Server数据库本身提供非常方便强大的备份功能(DTS),可以以向导的方式引导用户备份到本地局域网的机器或者远程的机器上,但是现在出现一个问 题:就是一旦数据库大了的话,本地局域网备份速度可以接受,可是远程备份,尤其是拨号上网,速度就可能慢,一旦时间过长,网络可能断掉,又得重新备份,能 否提出一种方案充分利用Sql Server数据库本身已有的备份功能(DTS),同时又解决备份速度慢的问题,考虑到数据库备份文件的可压缩比率非常高,可以直接对备份文件进行压缩操 作,是否更有效率?

下面是设计思路,最后定型取决于两种方式效率的高低。

第一步:利用Sql Server本身带有的备份功能(DTS)把数据库全部或者差额定时备份到某个目录,一旦备份成功,这时候在指定的备份目录下有.bak文件存在;

第二步:利用公司自开发的解压缩组件RichZip把.bak文件压缩成另一个文件.zip文件,RichZip的压缩比等同于WinZip;

第三步:通过Http协议下载.zip文件到本地,按照不同的项目和日期保存;

第四步:如果需要恢复,把.zip文件解压缩成.bak文件,然后再用Sql Server的工具把备份文件恢复;

需要实验解决的几个问题:

1、在同一环境下,直接使用Sql Server的备份工具与这种方案所需要的时间哪一个更长?是否在不同量级里面有不同的结果?

2、是自己利用组件开发一个基于http协议的下载程序,还是直接采用其它的共享下载工具是否更有效率?比如说NetAnts(网络蚂蚁)或者其它下载工具。

说明:

1、该方案只在微软平台上做过实际操作:操作系统Window NT4.0或者以上(推荐使用Win2000),数据库Sql Server6.5或者以上(推荐使用Sql7.0)。

三、实际情况

3.1 实验结果

3.1.1 实验一结果:无论在哪种连接环境下,局域网还是拨号上网,直接使用Sql Server的备份工具与本方案的效率差距都比较大,只是由于数据库小时,直接使用Sql Server的备份工具比本方案方便一些。

以下是一些简单的、不完整的实际操作数据,仅供参考。

操作环境:联想56K调制解调器,上网速度52K,通过SysGate上网,平均3K左右。

库名   备份文件大小 压缩文件大小  下载时间

Sql备份工具 本方案

SoftEnterPrise 27970Kb 2109Kb(13.26倍)  没有耐心等待,强行中断 12分钟

SoftProduct 10265Kb 739Kb(13.89倍) 18分钟 3分钟

SoftProductHz  11948Kb 930Kb(12.85倍)   25分钟 5分钟

实际操作过程中是使用网络蚂蚁下载的,三个库的备份文件一共50MB,压缩后一共不到4MB;使用Sql备份工具,至少需要一个小时左右,而使用要方案最多不超过20分钟,这中间的效率是不可比拟的,还不包括在使用Sql备份工具时如果断网造成的延时。

3.1.2 实验二结果:建议使用专门的下载工具,如网络蚂蚁或者其它下载工具,是基于如下考虑:A、专门的下载工具功能强大,提供断点续传、多线程、定时下载等许多 功能;B、许多用户都会使用,而且非常熟练,不需要再培训;C、比较稳定,如果自己要开发下载程序的话,一个是功能不强大,另外需要一段相当长的测试时 间,需要投入时间与精力,不合算。如果是因为集成或者产品化的原因,可以考虑做一个相对简单的下载程序,与其它应用结合,或者开发一个管理备份文件的程 序,管理起来比较方便。

3.2 服务器配置及源码

3.2.1 服务器端配置

3.2.1.1 Sql Server的配置:

-先建立Device(设备);

-然后备份具体的数据库到Device(设备)中,可以选择备份的时间及备份的方式;

重复上述操作,直到做好所有需要备份的数据库配置。

注意事项:

1、 备份文件存在的目录不要让用户能通过Http协议访问到;

2、 根据实际需要选择全额备份还是差额备份以及定时操作;

3、 如果系统备份以后,备份目录下就会出现.bak文件。

3.2.1.2 虚拟目录的配置

-为备份系统建立一个虚拟目录,如BackUp,一定要加上挑战反应,不允许匿名访问,这样访问时就需要输入系统管理员的用户名和密码,增强安全性。

3.3 源码

实现思路:为了保护数据的安全性,在3.2.1.2中要把备份系统的虚拟目录设成不允许匿名访问,需要系统管理员的密码;另外在3.2.1.1注意事项中 1 提到的不让备份文件存在的目录让用户能通过Http协议访问到,需要在生成下载文件后临时生成一个虚拟目录,下载完毕后再删除掉,确保安全。

一共包括四个文件,BackSet.asp、BuildvDir.asp、DelvDir.asp、BackList.asp。

-BackSet.asp:选择要建立临时下载虚拟目录的站点,同时临时给定下载虚拟目录的名称;

- BuildvDir.asp:根据BackSet.asp文件给定的站点和虚拟目录名称,建立虚拟目录;

-DelvDir.asp:删除在BackSet.asp文件给定的站点中的虚拟目录;

-BackList.asp:压缩备份文件,建立对应的被压缩后备份文件的下载链接;,

3.3.1 BackSet.asp文件解释

3.3.1.1 源码



lt;body bgcolor="#EEEEEC">

lt;center>

lt;font size=4>生成或者删除**项目备份数据库虚拟目录

lt;/center>

lt;hr size=1>

lt;br>

lt;center>

lt;form name="BackForm" method="Post">

lt;table border=1 width=70%>

lt;tr>

lt;td width=40% align=center>

lt;font size=2>

请选择要使用的站点名称:

lt;/font>

lt;/td>

lt;td>

lt;select Name="WebSiteIndex">

lt;%

dim ObjServer

dim obj3W

dim sServerName

et ObjService=GetObject("IIS://" & Request.ServerVariables("SERVER_NAME") & "/W3SVC")

for each obj3w in objservice

if IsNumeric(obj3w.Name) then

ServerName=Obj3w.ServerComment

if Instr(sServerName,"管理 WEB 站点") =0 then

ServerName=obj3w.Name & "-" & Obj3w.ServerComment

%>

lt;option value="<%=obj3w.Name%>"><%=sServerName%>

lt;%

end if

end if

ext

et ObjService=Nothing

%>

lt;/select>

lt;/td>

lt;/tr>

lt;tr>

lt;td width=40% align=center>

lt;font size=2>

请输入备份操作的虚拟目录名称:

lt;/font>

lt;/td>

lt;td>

lt;input Type=text name="vDir" value="SrrdBackUp" size=42>

lt;/td>

lt;/tr>

lt;/table>

lt;br>

lt;br>

lt;input type=button Name="Build" value="生成虚拟目录">

lt;input type=button Name="Del" value="删除虚拟目录">

lt;/form>

lt;/center>

lt;/body>

lt;/html>

lt;script language=vbs>

Sub Build_Onclick()

'生成临时虚拟目录

if Trim(document.BackForm.vDir.value)="" then

msgbox "请输入虚拟目录名称!",16,"错误"

exit sub

else

document.BackForm.action="BuildvDir.asp"

document.BackForm.submit

end if

end sub

Sub Del_Onclick()

'删除临时生成的虚拟目录

if Trim(document.BackForm.vDir.value)="" then
msgbox "请输入虚拟目录名称!",16,"错误"

exit sub

else

document.BackForm.action="DelvDir.asp"

document.BackForm.submit

end if

end sub

lt;/script>



说明:

1、 由于在实际过程中,经常是关闭缺省网站或者一台机器上有多个网站存在,提取IIS中站点,可以让使用者选择不同的站点下建立虚拟目录;

2、 要用代码对IIS进行操作,需要ADSI的配合;

3、 要对IIS进行操作,必须有系统管理员的权限,所以加挑战反应既是为了安全,也是实际需要。

3.3.2 BuildvDir.asp文件解释

3.3.2.1 源码



lt;%

dim iWWWIndex '站点顺序

dim vDirName '虚拟目录名称

dim pDirName '对应的物理目录名称

dim sDefaultPage '虚拟目录使用的缺省页面名称

'获得要使用的站点顺序

iWWWIndex=Request.Form("WebSiteIndex")

'获得要生成的虚拟目录名称

vDirName=Request.Form("vDir")

'当前文件物理路径

DirName=request.servervariables("Path_Translated")

DirName=Left(pDirName,instrrev(pDirName,"\")-1)

'缺省页面名称

DefaultPage="BackList.asp"

if CreateVirtulDir(iWwwIndex,vDirName,pDirName,sDefaultPage)=false then

'建立系统虚拟目录失败

%>

lt;script language=vbs>

msgbox "创建虚拟目录失败!",16,"错误"

window.history.back

lt;/script>

lt;%

else

%>

lt;script language=vbs>
阅读(877) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~