利用VBScript实现ILAS II 2.0数据自动备份
2015-03-27武汉软件工程职业学院
武汉软件工程职业学院 郭 勇
利用VBScript实现ILAS II 2.0数据自动备份
武汉软件工程职业学院 郭 勇
ILAS II系统是目前国内用户最多的图书馆自动化集成管理系统,但该软件在数据备份功能上不够完善,针对ILASII系统这项功能的缺失,笔者运用VBScript程序开发出数据自动备份功能的脚本,实现了异地数据备份的自动化,从而降低了系统管理员的工作强度,优化了图书馆信息技术部门的业务水平。
ILAS II 2.0;数据自动备份;VBScript
1 ILAS II 2.0常用数据备份方案及其存在的缺陷
ILAS II 2.0(Inte—grated Library Auto mation Syestem),它是上世纪八十年代作为国家重点科技项目下达、由深圳图书馆承担并组织开发的全套图书馆自动化系统。采用客户机/服务器(C/S)模式,主服务器系统能在各种平台如IBM AIX、IRIX、SUN Solaris、SCO UNIX及其它版本的UNIX下运行,客户端工作站以windows平台为依托,支持国家标准大字符集(GBK),以Visual C++等程序语言为开发工具,使用TCP/IP通信协议,数据库采用大型分布式数据库管理系统——LDBMS。
尽管ILAS系统是目前国内用户最多的图书馆自动化集成管理系统,但该系统却未将数据备份功能集成于内,需要管理员采用手工进行日常备份。数据是图书馆的核心,编目、典藏、流通、OPAC等等功能的实现均基于数据库软件技术对底层数据进行各项操作,数据一旦发生紊乱或丢失将导致图书馆业务停滞瘫痪以及馆藏的流失,造成无法弥补的损失。数据备份的重要性,只有在数据丢失后才能深刻体会到,如果系统管理员不幸遭遇到“多么痛的领悟”,为时已晚,损失已不可逆转的产生,无法再进行补救。因此,防患于未然,充分制定好完善的数据备份方案才是避免损失的最佳策略。
目前常用的备份方式有硬盘双工备份,即在ILAS服务器上配置两个相同规格的硬盘做成Raid1,使系统运行时同时向两个硬盘写数据。如果其中一个硬盘损坏,并不会影响系统的运行,硬盘双工的缺陷是无法解决服务器非硬盘硬件故障造成的系统瘫痪或当人为误操作、病毒、数据错误等造成的逻辑错误发生时,硬盘双工备份也不能做出判断,停止错误数据写入,只会被动地将错误数据写入数据库并且复制一遍。有条件的图书馆还可采用安全性更好、成本也相对更高的双机容错方案,即配置两台系统相同的服务器,一旦ILAS服务器出现故障,可以立即启动备用服务器,这种方式的缺陷与硬盘双工备份方式一样,无法对错误数据的写入进行识别,依然存在数据风险。
2 非实时写入数据的异地备份方案
在采取实时双硬件备份的基础上,还应该对数据进行非实时性的异地周期性备份,因为这种备份方式不是实时性的,故一旦发生实时错误数据写入故障,就可以从数据存档中调出最近时间节点的正常拷贝对数据进行恢复,从而避免了数据完全丢失带来的毁灭性打击。为了将发生数据故障的损失减小到最低程度,备份周期应该较短,周期长度不应超过24小时。这种周期性备份与硬盘双工备份的区别在于,后者实时将数据自动写入冗余盘,前者是靠人工操作完成周期性数据拷贝,并且拷贝可以存储于网络中的客户端电脑。如果完全采用手工方式通过输入DOS命令将数据库进行打包再传输到客户端电脑,然后再对每个拷贝按时间顺序进行管理,如此频繁的备份频率和繁琐的操作不仅费时,而且还得注意力高度集中不能在输入命令过程中出错,这对于系统管理员来说是一件苦差。那么能否应用软件技术实现自动数据备份从而将系统管理员从这项“苦差”中解脱出来呢?答案是肯定的,笔者自身也从事系统管理员的工作,于是将编程经验应用到这一项工作任务的解决方案中,开发出VBS脚本程序实现了ILASII数据备份、传输、管理的自动化。
3 实现ILAS II 2.0数据自动备份的VBScript脚本
VBScript是Visual Basic Script的简称,即 Visual Basic脚本语言,有时也被缩写为VBS。它是基于Visual Basic程序语言的脚本语言,是IIS(互联网信息服务,InternetInformation Services)的默认源程序语言。VBScript最开始是通过事件驱动来扩展客户端HTML的功能,可在网页上处理、控制对象,它能与HTML页面很好的结合使用。另外,VBScript还提供了一些应用对象(COM组件、WMI、WSH、ADSI)访问系统中的元素,编程者可以方便地编写脚本,用于实现一些特有功能,一般被用来完成重复性的Windows系统操作任务。笔者所编写的VBS脚本如下(附注释):
3.1 第一个脚本代码
Dim WshShell Set WshShell = WScript.CreateObject("WScript. Shell")
WshShell.Run "telnet 192.168.1.240"
〈创建一个对象"wshshell",用WshShell对象的Run方法打开telnet程序,用它连接到IP地址为192.168.1.240的服务器〉
WScript.sleep 6000
〈延时6000毫秒〉
WshShell.AppActivate"c:"
〈〉
WshShell.SendKeys"root"
WshShell.SendKeys"{ENTER}"
〈键入帐号〉
WScript.sleep 3000
WshShell.SendKeys"******"
WshShell.SendKeys"{ENTER}"
键入密码
WScript.sleep 8000
延时
WshShell.SendKeys"cd /u"
WshShell.SendKeys"{ENTER}"
〈设定当前目录为根目录U盘下〉
WScript.sleep 3000
WshShell.SendKeys"rm ilasIIbf"
WshShell.SendKeys"{ENTER}"
〈压缩ilasII_GB之前必须删除掉上一次备份数据库压缩文件 〉
WScript.sleep 3000
WshShell.SendKeys"tar cvf ilasIIbf ilasII_GB"
WshShell.SendKeys"{ENTER}"
打包ilasII_GB数据库并备份为以ilasIIbf命名的压缩文件
3.2 第二个脚本代码
Public t,s,x
定义3个全局变量:t,s,x
t=now
〈取得当天日期和时间〉
s=formatdatetime(t,vbshortdate)
〈返回日期赋值于变量S〉
Sub create(fso,path)
〈定义子程序create〉
If fso.FolderExists(path) Then
Exit Sub
End If
〈如果判定指定路径文件夹存在,则终止程序〉
If Not fso.FolderExists(fso.GetParentFolderName(path)) Then create fso,fso.GetParentFolderName(path)
End If
fso.CreateFolder(path)
〈创建一个指定名称的文件夹〉
End Sub
x="e:ilasIIBF" + cstr(s)
〈将保存备份文件的路径赋值于字符串变量x〉
Set fso = CreateObject("scripting.filesystemobject")
create fso,x
〈调用create程序,在目标目录下新建一个文件夹〉
set fso = Nothing
WScript.sleep 2000
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")〈打开windows命令提示窗口,等待命令的输入〉
WshShell.Run "ftp 192.168.1.240"
〈在窗口输入栏输入服务器IP地址,连接到服务器〉WScript.Sleep 8000
WshShell.AppActivate"c:"
WshShell.SendKeys"root"
WshShell.SendKeys"{ENTER}"
WScript.sleep 3000
WshShell.SendKeys"******"
WshShell.SendKeys"{ENTER}"
WScript.sleep 3000
WshShell.SendKeys"ls"
WshShell.SendKeys"{ENTER}"
WScript.sleep 3000
WshShell.SendKeys"cd /u"
WshShell.SendKeys"{ENTER}"
WScript.sleep 3000
WshShell.SendKeys"{ENTER}"
〈指定服务器当前路径为根目录U盘〉
WScript.sleep 3000
WshShell.SendKeys"lcd e:ilasIIbf"
WshShell.SendKeys"{ENTER}"〈设置接收备份文件的存放路径〉
WScript.sleep 3000
WshShell.SendKeys"bin"
WshShell.SendKeys"{ENTER}"
WScript.sleep 3000
WshShell.SendKeys"get ilasIIbf"
WshShell.SendKeys"{ENTER}"
WshShell.SendKeys"{ENTER}"
WScript.sleep 300000
Set fso = CreateObject("Scripting.filesystemobject")
fso.MoveFile "E:ilasIIbfilasIIbf.*", x
移动(剪切)备份文件至与字符串x的值同名的文件夹下
set fso = Nothing
WshShell.SendKeys"bye"
WshShell.SendKeys"{ENTER}"
3.3 第三个脚本代码
〈第三个脚本程序依次调用第一个脚本和第二个脚本〉
createobject("wscript.shell").run "stepone.vbs"
WScript.Sleep 1300000
〈调用第一个脚本,根据ilasII_GB文件的大小为第一个脚本设定足够的运行时间,必须让第一个脚本运行结束后再启动第二个脚本〉
createobject("wscript.shell").run "steptwo.vbs"
〈调用第二个脚本〉
手动执行自动备份程序只需双击打开第三个脚本程序,在备份客户端使用windows系统的设置定时任务功能,设置定时脚本执行的时间,即实现了ILASII数据备份、传输、管理的自动化。
[1]深圳市科图自动化新技术应用公司.ILAS系统管理员手册.2001.
郭勇(1979—),男,图书馆馆员,现供职于武汉软件工程职业学院。