数据库复本是复制数据库的技术,利用这种技术,可以是数据库的几个拷贝保持同步。数据库的每个拷贝称为一个复本,并且每个复本都包含一个公共的表、查询、窗体、报表、宏和模块的集合;每个复本还可以包含只在本地计算机上使用的本地对象。
在多用户环境中,一个数据库可能由多个用户使用。在多用户应用程序中,数据库复本可以改善用户共享数据库的途径。用数据库复本可以重新产生一个数据库,使两个或多个用户同时使用自己的数据库复本。尽管各个复本放置在不同的计算机上,但它们是保持同步的。
数据库复本及其拓扑结构
一个数据库的两个或多个以上的复本组成一个复本集,每个复本都是复本集的一部分。在复本集中含有数据库的若干复本和设计原版(Design Master),其中设计原版是唯一能够对数据库进行设计修改的复本。同一个复本集中的复本可以相互交换数据后复制对象的更新,这种交换称为同步。
1.数据库复本的用途
按照传统的做法,在多用户数据库应用程序中,通常将表从数据库的其它对象中分离出来,使得数据能够驻留在网络服务器上,而查询、窗体、报表、宏以及模块则驻留在用户的计算机上。当需要检索或更新数据库中的信息时,必须先登录到网络上,然后打开计算机上的数据库,再打开服务器上相应的数据库。如果使用数据库复本技术,则可以建立既包含数据又包含对象的单一数据库。
在下列情况下,应该使用数据库复本:
(1)需要在各办公室中共享数据。可以用数据库复本建立一个单位的数据库的拷贝,然后将其发送给每个相关的办公室。用户在每个办公室把数据输入到自己的复本中,并使所有的远程复本都与单位的复本同步。下属的各级复本能够维护本地表,在该表中含有其它复本中的信息。
(2)需要在分散的用户之间共享数据。各终端用户在办公室以外输入到数据库中的新信息,可以在终端与单位的网络建立起电子连接的任何时候被同步。在日常工作中,终端用户可以拨入网络,使复本同步,使用数据库的当前最新版本。由于在同步期间只传输新增的更改,因此可以便维持数据更新所花费的时间和费用减到最小。此外,也可使用部分复本(partia1 replicas),只同步部分数据。
(3)需要提高服务器数据的可访问性。如果应用程序不需要立即更新数据,则可以在主服务器上用数据库复本来减少网络加载。而用服务器本身的数据库拷贝来引入第二服务器,则可以改善响应时间。
(4)需要发布应用程序的更新。复制应用程序时,不仅自动复制表中的数据,还要复制应用程序的对象。如果对数据库的设计作了更改,则Microsoft Jet数据库引擎将在下一次同步期间传输这些更改,不必发布软件的新版本。
(5)需要防止全部数据遗失。数据库复本发布跨越多个数据库的数据,因此,当原始数据库被破坏时,可以用复本数据库中的某个数据库来恢复数据。
虽然数据库复本可以解决分布式数据库处理中固有的许多问题,但是在下列情况下,复本仍然达不到理想要求:
1.)需要更新多个复本中的大量记录。对于那些需要对不同复本中的现存记录进行频繁更新的应用程序,可能会比简单地往数据库中插入新记录的应用程序产生更多的记录冲突。当位于不同地点的用户同时对同一个记录进行修改时,将会发生记录冲突。应用程序的记录冲突越多,需要的处理时间就越多,因为这些冲突只能通过手工解决。
2.)对数据一致性的要求非常严格。对于诸如资金过户、航班机票的预订以及包裹装运的跟踪之类的事务处理应用程序,要求ffnu时候的信息不能有半点差错。如果能在一个复本内处理事务,就不要在几个复本中处理。在同步期间,各复本间交换的信息,是事务的结果,而不是事务本身。
2.复本集拓朴结构
复本集拓扑结构定xT复本集中各复本间的通信以及tonp同步的逻辑。复本集的拓扑结构可以有各种不同的形式,但是对大多数的应用程序来说,较好的拓扑结构有两种,即星型结构和完全连接结构。
星型拓扑结构有一个集线器(Hub),该集线器定期与每个卫星复本同步。在这种拓扑结构中,所有数据通过单个集中化数据库在各复本之间共享。由于数据在与其它复本同步时至多只需两步“跳跃,所以星型拓扑结构可以降低数据在各复本中的等待时间。
在同步期间,如果交换的平均数据量相对较小,则对大多数应用程序来说,星型拓扑结构可能是最有效的解决方案。它的实现相当简单,而且既有效又可靠。如果是第一次实现复本,则最好使用星型拓扑结构。
如果把星型拓扑结构中的每个复本都变成一个集线器(Hub),就可以变为完全连接的拓扑结构。在完全连接的拓扑结构中,每个复本与复本集中的其它所有复本同步。完全拓扑结构一个最重要的好处是数据传播的等待时间小。因为每个复本与其它所有复本同步,数据可以直接发送给所有复本,而不必经过一系列复本来间接传播。
与复本操作有关的对象、属性和方法
为了实现复本燥乍, Microsoft Jet数据库引擎提供了多个对象、属性和方法。在这一节中,将介绍与复本操作有关的对象、属性和方法。
1.Document对象和Documents集合
Document对象含有关于对象的一个实例的信息,对象可以是一个数据库、表、查询或关系(仅用于Microsoft Jet数据库)。
每个Container对象有一个包含Document对象的Documents集合(其关系详见VB的帮助文件),这些Document对象描述由Container指定类型的内置对象的实例。表1 列出了Document所描述的对象的类型、其Container对象的名称及Document包含信息的类型。
Document container 包含的信息
数据库 数据库 保存的数据库
表或查询 表或查询 保存的表或查询
关系 关系 保存的关系
用Document对象可以实现下列操作:
・用Name属性返回由用户或Microsoft Jet数据库引擎在建立对象时给对象所取的名字。
・用Container属性返回包含Document对象的Container对象的名称。
・用Owner属性设置或返回对象的拥有者。为了设置owner属性,用户必须有对Document对象的写权限,并且必须把userName属性设置为一个现有的user或Group对象的名称。
・用UserName属性或Permissions属性设置或返回一个用户或组对象的访问权限。为了设置这些属性,用户必须有对Document对象的写权限,并且必须把userName属性设置为一个现有的User或GrOup对象的名称。
・用DateCreated属性和LasUpdated属性分别返回建立Document对象和最后修改Document对象的日期和时间。
由于一个Document对象对应于一个现有的对象,因此用户不能建立新的Document对象或者删除现有的Document对象。一个Documents集合含有多个Document对象。可以通过以下几种格式引用一个Document对象:
Documents(0)
Documents("Name)
Documents![name]
2.container对象和Containers集合
Contalner对象把相似类型的Document对象放在一个组中。每个Database对象含有由内部container对象组成的Containers集合。应用程序可以定自己的文档类型和相应的容器(仅对Microsoft Jet数据库),但这些对象不一定总是通过DAO支持。某些Container对象由Microsoft Jet数据库引擎定义,也可以由其它应用程序定义。
Container对象 包含的信息
数据库 保存的数据库
表 保存的表及查询
关系 保存的关系
说明:
1.)每个Container对象含有由Document对象组成的Documents集合,通常用Container对象作为到Document对象中信息的直接链接,也可以用container集合为给定类型的Document对象设置安全性。
2.)用Container对象可以实现以下操作:
・用Name属性返回Container对象的预定义名称。
・用Permissions和UserName属性来设置container对象的权限;在Container对象的Documents集合中建立Document对象来继承这些访问权限设置。
・用owner属性设置或返回Container对象的所有者。为了设置Ower属性,必须写入Container对象的权限,并把属性设置为现有user或Group对象的名称。
(3)Container对象是由系统预定的,因此不能建立新的container对象,也不能删除现有的Container对象。
(4)可以通过顺序号或Name属性设置或引用集合中的container对象,例如:
Containers(0)
Containers(name)
Containers![Name]
【例】编写程序,列出Tables容器中的Documents集合。
在窗体上画一个命令按钮,然后编写如下的事件过程:
Private Sub Command1_Click()
Dim dbsnorthwind As Database
Dim docloop As Document
Dim prploop As Property
Set dbsnorthwind = OpenDatabase("e:f.mdb")
With dbsnorthwind.Containers!tables
Debug.Print "documents in " & .Name & "container"
'列出Table容器中的Documents集合
For Each docloop In .Documents
Debug.Print " " & docloop.Name
Next docloop
End with
dbsnorthwind.close
End sub
该过程列出f.mdb数据库Table容器中的Documents集合。程序运行后,单击命令按钮,即可在“立即窗口中列出该集合。