利用sql中现有的数据库备份和恢复的命令以及nt中的idc技术,实现sql数据库中数据滚动备份到磁带的功能。本系统所实现功能既能保证近一段时间的数据总在数据库中,又能保证系统管理员可随时恢复备份数据,供用户查询。本文所实现的功能具有普遍的意义,特别适用于中小型企业开发基于intranet技术的管理信息系统。
磁带数据备份及恢复的工作过程
为了充分利用sql中现有的数据库备份与恢复功能,以降低实现磁带数据备份的代价,我们特地在硬盘上建立了一个与磁带的容量相当的数据库,我们称之为桥数据库,如fjjdbbk。可方便地实现数据的滚动备份了。其工作过程是:管理员把某月的数据从主数据库移到桥数据库中;然后用sql的备份功能把桥数据库备份到磁带上。用户需要查看磁带中的历史数据时,系统又用sql的恢复备份功能把磁带中的数据恢复到桥数据库中,用户直接在桥数据库中查阅历史数据。此外,在数据备份到磁带后,在进行下次数据备份前,必须清空备份数据库中的数据。为了提高工作效率,我们建立了一个空白桥数据库(没有数据时的桥数据库)。每次进行磁带备份数据之前,就用此空白数据库恢复桥数据库。空白数据库文件建立后要保存好,不可随便删除。
建立该备份空白数据库过程为:先建立主数据库fjjdbbk,然后在fjjdbbk中建立与当前数据库中一样结构的表。建立这些表结构时最好的方法是先用enterprise manager的object菜单下的generate sql scripts功能生成建立这些表的scripts文件,然后选择fjjdbbk数据库,用enterprise manager的tools菜单下的query analyzer功能运行该文件,就建立了这些所需表。显然,这时的fjjdbbk为空数据库。我们再利用备份命令或运行tools菜单下的backup/restore功能备份该空数据库。
磁带数据备份及恢复的实现
在nt中,web服务器iis(internet information server)提供了完善的访问sql的技术idc。idc是一个dll文件(httpodbc.dll),其实,它通过odbc接口可访问各种数据库。在具体实现web页面访问数据库时,需建立两种类型的文件:idc文件(*.idc)和html模板文件(*.htx)。idc文件用于控制数据库的访问。它一般由两部分组成:
.文件头 指明系统数据源,模板文件名,用户名及口令。有时还包括一些有关检索数据库方面的参数设置。
.文件主体 这部分内容以"sqlstatement:"为起始标志,然后写操纵数据库的标准sql语句。注意,每条语句以"+"号开头,它作为区分每条sql语句的标志。需要强调的是,对于ms sql数据库,idc可用其任何标准的命令及函数。例如定义变量,控制数据流等。
idc的处理流程如下:首先,web服务器iis分析浏览器传来的url字符串。如果当前字符串以"*.idc"结尾,就将该idc请求传给idc接口模块,idc将依次读取并解释idc文件的内容,通过odbc模块向数据库服务器发服务请求;数据库服务器将执行结果通过odbc接口返回给idc模块。接着idc模块把结果插入指定的的模板文件,形成一个实际的html文件交给iis;最后由iis将该html返回浏览器。
在web信息系统中要实现完整的磁带数据备份及恢复功能需要实现以下三个功能:"数据备份"功能、"数据恢复"功能和"清理数据"功能。"数据备份"功能在保证系统管理员操作的前提下,根据用户输入的所要备份数据的起始日期和终止日期,从主数据库把要备份的数据转存到桥数据库中,然后运用sql的dump命令实现该功能。"数据恢复"功能则在保证系统管理员操作的前提下,提供"恢复桥数据库"和"恢复空白桥数据库"的功能。只要运用sql的load命令就可实现上述功能;同样,"清理数据"功能也要保证在系统管理员操作的前提下,根据用户输入的所要删除数据的起始日期和终止日期,运用sql中的delete命令删除当前数据库中数据。因此。为了"数据备份"功能和"清理数据"功能的顺利实施,要求每个表都有归档时间字段。
实现本系统磁带数据备份与恢复功能的部分idc文件如下:
/*bkup.idc*/
datasource: web sql
template: bkup.htx
username: sa
password: sa
sqlstatement:
+if %jb%=1
+/*判断系统维护员*/
+select qsrq=convert(varchar(12),getdate(),1),
zzrq=convert(varchar(12),+dateadd(day,1,getdate()),1)
+/*预置起始日期和终止日期*/
/*bkupcz.idc*/
datasource: web sql
template: bkupcz.htx
username: sa
password: sa
sqlstatement:
+insert fjjdbbk.dbo.jkld select * from fjjdb.dbo.jkld
+where convert(varchar(12),gdsj,1)>=′%qsrq%′
and convert(varchar(12),gdsj,1)< =′%zzrq%′
…………
+/*把当前数据库中选定的数据转存到桥数据库中*/
+dump database fjjdbbk to tape = ′//./tape0′ with init, nounload
+/*备份数据*/
+select ts=′备份数据库操作已完成!′
/*huif.idc*/
datasource: web sql
template: huif.htx
username: sa
password: sa
sqlstatement:
+if %jb%=1
+begin
+load database fjjdbbk from tape=′//./tape0′ with
nounload
+/*恢复备份数据*/
+select ts=′恢复数据库操作已完成!′+/*
+end
/*qlsjkcz.idc*/
datasource: web sql
username: sa
password: sa
template: qlsjkcz.htx
sqlstatement:
+delete fjjdb.dbo.jkld
where convert(varchar(12),gdsj,1)>=′%qsrq%′ and
convert(varchar(12),gdsj,1)<=′%zzrq%′
…………
+/*删除当前数据库中选定的数据*/
+select ts=′删除操作已完成!′
在本系统中,主数据库保证存储4个月数据。系统规定,系统管理员每月月初备份上月的数据到磁带。然后删除前第4个月的数据。实现了当前数据与历史数据的同步查阅,这是web系统的一个显著的优点
新闻热点
疑难解答