分享
 
 
 

用VB备份和恢复SQL Server数据库的方法

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

摘要 备份与恢复是数据库管理员维护数据库安全性和完整性的重要操作。本文分析并介绍用Access备份SQL数据库的方法,很好地达到了数据备份的目的。同时,就Access 数据库的安全接口作了简略讨论,使备份后不致丧失数据安全性。并提出了改进备份与恢复策略的一些建议。

关键词 SQL Server数据库; Visual Basic 6.0; 数据备份;数据恢复; Access

引言

对于关键应用的数据库系统应根据具体环境和条件制订一个完善可行确保系统安全的备份计划,没有备份的系统是不可靠、危险的,后果将是严重的,破坏性病毒、误操作、自然灾害等等都可能会对数据库系统造成难以估量的破坏。尤其对一个信息化程度较高的企业来说,最有价值的财产或许就是企业数据库中的数据。一个系统中最重要的是大量的实时数据,没有备份功能显然是不安全和不完善的。经过实践摸索出Visual Basic 6.0开发的备份程序,能将数据库备份到Access数据库(Access 为目前流行的桌面型数据库产品, 具有存储操作灵活、便利等优点, 并且因它与SQL Server 同属微软数据库产品, 二者能很好地兼容)中,并对Access数据库进行加密以防数据被非法访问。该程序还能用Access备份库的数据恢复SQL Server数据库,从而减少因误操作损坏数据内容而造成的损失。使用该方法,用户不须添加额外设备,只须在原有服务器上运行该备份程序,其界面简单方便,适合普通用户使用。

备份与恢复概述

备份是数据库管理员定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。常用的数据备份类型有:完全备份、差异备份、事务日志备份、文件或文件组备份。一个通用的备份策略是:以较长的时间间隔执行完全备份,以适中的时间间隔进行差异备份,并以较短的时间间隔进行事务日志备份。当数据遭到破坏后就可以利用备份来恢复数据库。恢复数据库是一个装载数据库的备份,然后应用事务日志重建的过程。一个通用的恢复策略是:首先恢复完全备份的数据,然后恢复差异备份数据,最后根据事务日志备份进行恢复。

1、备份方案

开发所需软件:Visual Basic 6.0 Access备份程序的设计方法:

(1) 用控制面版的ODBC设置,给SQL Server中的数据库添加一个数据源名称。

(2) 在Access中新建一个数据库,命名为backup.mdb。

(3) 用VB定义两个主要过程:Attach_Table()和Create_Table()。Attach_Table的作用是将SQL Server数据库中的所有需要备份的表链接到Access数据库中,在此过程中要排除系统表,因为那是SQL Server自创建的,表中无用户数据。Create_Table的作用是在backup.mdb中创建目的表,即在这个备份Access库中创建表用来保存所有存在SQL数据库中的用户数据。另外,在链接过程中,要去掉SQL Server自带的拥有者名称。

2、程序的逻辑结构

① 通过第一步创建的ODBC数据源打开要备份的SQL数据库;

② 使用Attach_Table()将该数据库中的所有用户表链接到backup.mdb中,排除系统表的方法是:

For Each tdf in backup_db.TableDefs

If (tdf.attributes And dbSystemObject)=0 Then

//条件成立,说明该表是用户定义的表,可以链接,否则跳过

End if

Next

③ 使用Create_Table()对每个表创建与之对应的备份表,取名可遵循如下原则, 若原表叫table_name, 则备份表叫b_table_name。

④ 将table_name表中的所有记录复制到b_table_name中。

⑤从备份库删除对SQL数据表的链接。

3、程序原码

采用微软DAO (Data Access Object) 数据模型, 打开Access 本地数据库, 并连接一个外部ODBC数据表, 拷贝该表结构完成, 有以下过程块CopyStru :

Private Sub copyStru ()

Set dbsTemp = wrkjet. OpenDatabase (tagFilName)// 链接表的过程

For i = 0 To tabN - 1

Set tdfLinked = dbsTemp. CreateTableDef (“linkTab”)

tdfLinked. Connect = “OdbC; DATABASE = xgsbgsys ; UID =

sa ; PWD = ; DSN = xgsdb ;”

tdfLinked. SourceTableName = tabName (i)

dbsTemp. TableDefs. Append tdfLinked

Set temp Tab = dbsTemp. CreateTableDef ()

temp Tab. Name = tabName (i)

//创建新表的过程

For Each fld In tdfLinked. Fields

Set newFil = temp Tab. CreateField (fld. Name , fld. Type ,fld. Size)

newFil. OrdinalPosition = fld. OrdinalPosition

newFil. Required = fld. Required

temp Tab. Fields. Append newFil

Next

//创建索引

For Each idx In tdfLinked. Indexes

Set newIdx = temp Tab. CreateIndex ()

With newIdx

Name = tabName (i) & ” x”

Fields = idx. Fields

Unique = idx. Unique

Primary = idx. Primary

End With

temp Tab. Indexes. Append newIdx

Next

dbsTemp. TableDefs. Append temp Tab

Set temp Tab = Nothing

dbsTemp. TableDefs. Delete ”linkTab”

Next i

dbsTemp. Close

Set dbsTemp = Nothing

wrkjet. Close

Set wrkjet = Nothing

End Sub

End Sub

追加数据, 采用微软ADO (ActiveX data object) 数据模型, 分别操纵SQL Server 和Access 数据对象, 追加记录数据来完成, 有以下过程块CopyDa2ta :

Private Sub copyData ()

Set sourceCn = New adodb. Connection

sourceCn. CursorLocation = adUseServer

strSql =“PROVIDER = MSDASQL ; dsn = xgsdb ; uid = sa ;

pwd = ;”

sourceCn. Open strSql

Set targetCn = New adodb. Connection

targetCn. CursorLocation = adUseClient

targetCn. Open ” PROVIDER = Microsoft. Jet. OL Edb. 3.51 ;

Data Source = ”& tagFilName &“;”

End If //追加新表

For i = 0 To tabN - 1

Set targetRst = New adodb. Recordset

strSql = ”select 3 from ”& tabName (i)

targetRst. Open strSql , targetCn , adOpenStatic , adLockPes2simistic , adCmdText

Set sourceSet = New adodb. Recordset

strSql = ”select 3 from ”& tabName (i) & strSQLApp

sourceSet. Open strSql , sourceCn

zdN = sourceSet. Fields. Count

If sourceSet. EOF Then Go To hh

sourceSet. MoveFirst

Do While Not sourceSet. EOF

targetRst. AddNew

For j = 0 To zdN - 1

If Trim (sourceSet. Fields (j) . Value) = ””Then

targetRst. Fields (j) . Value = Null

Else

targetRst. Fields (j) . Value = Trim (sourceSet. Fields(j) . Value)

End If //复制记录

Next

targetRst. Update

sourceSet. MoveNext

Loop

recN = targetRst. RecordCount

hh :sourceSet. Close

Set sourceSet = Nothing

targetRst. Close

Set targetRst = Nothing

Next

targetCn. Close

Set targetCn = Nothing

sourceCn. Close

Set sourceCn = Nothing

End Sub //删除链接

其中字符数组tabName (i) 中存放需备份的各数据表名, strSQLAPP 字符串中存放对数据表的限制条件where 子句内容。

4、数据恢复

如果要从Access中将数据恢复到SQL Server中,方法类似,仅仅是拷贝记录的方向和以上相反,即从Access表往链接过来的SQL表中拷贝。

安全方案

因为Access属小型数据库,所以要保证其不被非法访问。可以在VB程序中实现对备份数据库的安全性接口,有以下两种方法限制对Access的任意访问:

(1)给Access数据库加口令,在VB程序中用口令打开数据库。打开Access软件,选中“工具”菜单,选择“安全”项,选择“加密/解密数据库”,然后选择备份数据库的名字,就可以给这个数据库加上密码。这样的话,任何人如果想打开备份数据库,手动修改数据表内容,必须先输入正确的访问密码,否则不能继续操作。用VB程序打开数据库时,必须提供访问密码,否则无法访问数据库。

(2)给Access数据库定义不同的用户组和用户权限,从而使不同级别的用户可以分别读或写某表或视图。打开Access软件,选中“工具”菜单,选择“安全”项,选择“用户/组权限”,在此可定义不同的组和用户,并按组划分用户的权限级别,从而限制低或无权限的用户执行某些操作。用VB 程序打开数据库进行操作时,对不同的操作采用不同的用户名和用户密码,从而区分有不同使用权限的人的访问操作。

备份方案的几点建议

1、在业余时间执行完全备份

如果你的公司没有工作在24时的环境之下,那么业余时间是执行备份的最佳时间。这既可以提高备份的性能,又可以减少备份对用户的影响。

2、安排一个完全备份在几天内完成

如果数据库非常大,并且你不能在期限内完成一个完全备份,那么就把该备份进行分解。你可以在一部分数据库中执行文件或文件组备份。照这样,经过几天,就可以备份所有的数据。

3、使用差异备份

如果你没有时间每天晚上执行一个完全备份,那么就可以在一周之中执行差异备份,而在周末执行一个完全备份。

4、建立一张合理的备份时间表

一个提高正被备份的系统性能的最好办法是不要做不必要的备份。必须根据要求确定最有效的备份时间表。不要做超过你所需要的备份,但是也不要因为性能而牺牲数据的安全。根据你的要求,建立对自己最有利的备份计划。

结束语

该备份方案使用VB设计出友好方便的用户界面,用户只需点击按钮便可执行备份或恢复操作;而且用Access作备份数据库,备份同样的数据,其所占用的硬盘空间远远小于SQL数据库所占空间,大大地提高了效率和节约了用户资源。通过实践检验,其运行效率比双机备份要高得多。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有