计算机工程
Computer Engineering
1999年　第25卷　第4期　Vol.25　No.4　1999



数据库复制技术的改进
－－－按归属分送的数据分送方法
刘清波
摘　要　根据《厦门市信贷产监测网络》的需要，提出了对数据库复制的层次结构和安全性等要求，然后简要介绍了MS SQL Server6.5的数据库复制机制，最后描述了为该需求而设计的按归属分送的解决方案与算法。
关键词　分布式数据库复制归属出版物横向提取纵向提取
The Improvement of Distribution Database Replication
--A Distributing Methods According to Data Ascription
Liu Qingbo
(People's Band of china,Xiamen Branch Xiamen Branch Xianmen 361004)
Abstract:According to the requirement of 《Credit Registering Network System in Xiamen》,this paper presents the in hierarchical structure and security of database replication,introduces the replication mechanism of MS SQL server 6.5,then describes the plan and algorithms designed for the requirement.
Key words:Distribution;Database;Replication;Ascription;Publication;Horizontal partition;Vertical partition
　　尽管数据库复制技术已经趋于实用，但在厦门市信贷资产监测网络的分布式数据库系统的设计和实现时仍遇到一些技术难题，其中比较突出的有两个，其一、异构型数据库之间的复制；其二，不同数据库之间安全性问题。这里主要讨论第二个问题。由于厦门市信贷资产监测网络是一个由人民银行组织各家金融机构共同组建的网络，其数据是各家金融机构的信贷数据。在这样由多个单位共同建设的系统中，数据库的安全性显得格外重要。在该系统中，数据库的安全性主要体现在各家金融机构在能够共享其客户在其他金融机构的信贷信息的同时，要保证自己的大部分信贷数据和汇总统计数字不会泄漏给其他金融机构。因此我们改进了MS SQL Server 6.5的数据库复制技术，提出了一种能够区分不同数据库服务器的按归属的分送方法。
1　MS SQL Server 6.5数据库复制机制
　　在MS SQL Server 6.5中，数据库服务器按照其在复制中的角色被分为三类：出版服务器、分发服务器和订阅服务器。出版服务器上的数据库可以定义为出版数据库，出版数据库是数据的发源地。订阅服务器的数据库是出版数据库的复制品，订阅服务器是数据分发的目的地。分发服务器完成数据分送，从出版数据库读取改变的数据，并在分送数据库中排队，然后发送给订阅服务器或等待订阅服务器来读取。数据库的复制可以复制整个数据库，或者只复制数据库一部分，用户通过条目和出版物规定复制的范围。
　　条目　条目是数据库复制的基本单位 ,  条目包含的数据产生于单一的需要复制的表。
　　出版物　出版物是一组条目。一个出版物可以包含一个或多个条目，一个数据库可以建立一个或多个出版物。出版物一般也作为订阅单位，但是订阅者也可以订阅多个出版物或者只订阅某一出版物的某些条目。出版物的复制方法有计划表和交易日志两种。

图1　SQL Server复制模型
　　横向提取和纵向提取    条目可以取自某一张表的的部分列，这种方法称为纵向提取。条目可以定义为某一张表的子集，这种条目包含基本表的部分行，这种方法成为横向提取。横向提取可以通过过滤条件表达式加以约束或过滤过程加以过滤。
　　MS SQL Server复制的主要功能部件是：日志阅读进程，同步进程，分发进程和分发数据库。日志阅读进程将出版服务器交易日志中带有复制标志的交易送到分发数据库。同步进程主要负责产生出版表的创建语句，形成初始同步文件，以及在分发数据库中记录同步作业。分发进程将存储在分发数据库的交易和初始同步作业传送到订阅服务器。分发数据库是一种存储转发数据库，它寄存着所有准备发送到订阅服务器的交易。
2 按数据归属分送的数据分送方案
　　MS SQL Server的数据库复制机制能够满足普通应用的要求。但是对于一些大型应用，这些功能就显得有些不够。厦门市信贷资产监测网络对数据库复制的安全性有着特别的需求，这个特别的需求包括两个方面：第一、金融机构所订阅的数据必须是自己的数据；第二、金融机构的上下级层次结构，上级订阅的数据必须包括其下级的数据。
　　MS SQL Server 所提供的分布式数据库的复制功能无法满足这个特殊需求，因此，必须加以改造，进一步扩充。MS SQL Server是以存储过程的形式实现数据库的复制，这种形式为用户提供可以调用的接口，便于扩充和改造。
　　在厦门市信贷资产监测网络的设计时，为了满足上述需要，我们对MS SQL Server所提供的分布式数据库的复制功能加以改进。提出了一种能够区分不同数据库服务器的按数据归属分送的数据分送方案。该方案包括以下措施：
　　1)金融机构的描述：城市级的金融可以分为三个层次：分行级、支行级和办事处级，分别用Bank、Branch、Offices表来描述。每层的机构都可能办理信贷业务，这类机构称为信贷机构，   用Creditor表表示。
　　2)服务器归属：每个订阅服务器有一个唯一的号码区别其他服务器，同时拥有其本身的银行ID、支行号和办事处号。<银行ID，支行号和办事处号>定义了该服务器属主。
　　3)业务数据的归属：每一笔业务数据均属于某一个信贷机构，在数据库中，信贷机构标识Cred_ID作为业务数据的一个要素确定了该笔业务的属主。
　　4)初始同步过滤：根据订阅服务器的属主，过滤掉不属于该机构的数据，形成属于该机构的初始数据。
　　5)按归属分送：根据交易的归属，把交易分送到相应订购服务器作业队列。
　　为了实现初始同步过滤和按归属分送，我们必须对条目加以分类。有些条目不需要按归属分送，不需特殊处理，这类条目称为普通条目，记为A类。这类条目的数据是公共数据，每个订阅者均需要这些数据。另一些条目需要按归属分送。按照数据归属的确定方法，这些条目又可以分为两类，其中，能够通过自身的列确定其归属的条目，记为B类，通过外部键和被引用表的某一列来确定其归属的条目，记为C类。
　　初始同步过程算法
　　参数：条目名称，   订阅者服务器名称
　　(1)判断该条目是否为A类，如果是则转到(9)，否则转到(2)；
　　(2)判断该条目是否为B类，如果是则转到(3)，否则转到(4)；
　　(3)在该条目的来源表和信贷机构表上建立一个视图(view)，该视图的条件为订阅服务器所对应机构的下辖数据；转到(5)；
　　(4)在该条目的来源表，被引用表和信贷机构表上建立一个视图，该视图的条件为订阅服务器所对应的机构的下辖的数据；转到(5)；
　　(5)调用数据库管理系统所提供的拷贝工具(bcp)，把所建视图的数据导出到临时文件中；
　　(6)删除所建的视图；
　　(7)形成该条目的同步命令，并添加到订阅作业队列中；
　　(8)建立订阅者对该条目的订阅任务，并使自动分发失效(去掉该订阅任务的状态），结束返回；
　　(9)调用MS SQL Server的自动同步过程。
　　按归属分送过程
　　按归属分送过程的算法中有一个数据结构，该数据结构是一张存放可分送有效作业号的表，该表用于控制订阅过程，该表的结构如下：
　　<publisher_id，ValidJobId，busy>
　　publisher_id：出版者ID，整数；
　　ValidJobId:有效作业ID，整数；
　　Busy：忙状态，小整数。
　　按归属分送过程算法
　　(1)取出有效作业指针，如果Busy为0，则置Busy为1，转到(2)，否则，退出；
　　(2)从分发数据库的作业队列中取出 ID  大于该指针的全部作业；
　　(3)对于每个作业，执行(4)-(10)；
　　(4)对于作业中的每条命令，执行(5)-(8)；
　　(5)该命令是同步命令，则对临时文件格式转换，并授权；
　　(6)若该命令是Insert命令，取出Value子句的信贷机构ID，把该命令加入到包含该信贷机构ID的机构的订阅者作业队列中；
　　(7)若该命令是Delete命令，取出Where子句信贷机构ID，把该命令加到含该信贷机构ID的机构的订阅者作业队列中；
　　(8)该命令是Update命令，取出Where子句的信贷机构ID，把该命令加入到包含该信贷机构ID的机构的订阅者作业队列中；
　　(9)继续(5)-(8)；
　　(10)修改有效作业号；
　　(11)继续(4)-(10)；
　　(12)置Busy为0；
　　(13)结束。
　　**(6)-(8)是针对B类条目，如果是C类条目，则不能直接取到Cred_ID，而只能通过外部键和引用表查找Cred_ID。如果是A类条目，则跳过这3步。
3　小结
　　以上方案通过在出版、分发和订阅3个阶段改进，形成一个能够按数据归属分送的分布式数据库。该分布式数据库已经成功地应用于厦门市信贷资产监测网络系统，成为该系统的核心。厦门市信贷资产监测网络系统已于1997年3月底正式投入运行，并于1997年年底通过中国人民银行总行组织的鉴定。
　　现实世界中，层次型的组织结构非常普遍，例如政府部门、集团公司，在组织上都是分层次的。在建设这类网络应用时若遇到本文提出的类似问题，可以采用以上方案加以解决。
作者简介:刘清波　男，32岁,工程师,主攻方向:数据库管理
作者单位:中国人民银行厦门市分行厦门　361004
参考文献
　1　Microsoft.Microsoft SQL Server 6.5 管理指南.1997
　2　Microsoft.Microsoft SQL Server Books Online.1996
收稿日期:1998-06-08
