-1-
基于 SQL SERVER的分布式数据库设计与实现
刘竞,初文科
青岛农业大学信息科学与工程学院,山东青岛(266109)
摘 要:提出了如何充分利用MS SQL Server 2000的数据库管理特性,采用链接服务器、
分布式分区视图和存储过程构建分布式数据库,以及基于数据库复制技术实现混合式的数据
分布。实验实现了分布式数据库的水平分片、垂直分片和混合式数据分布。
关键词: 分布式数据库;分布式分区视图;链接服务器;存储过程
中图分类号: TP392
1. 引言
随着网络与数字通信技术的飞速发展,应用的数据再也不是存储在一个单一的场地,而
是可能分布在全球的任何位置。对这样由多个分散数据库组成的管理信息系统,如何以最小
代价将其整合成分布式数据库系统也就成为了迫切需要解决的问题[1]。
MS SQL Server 2000分布式数据库功能[2]允许用户把多个不同场地的数据库当作一个
完整的数据库看待,允许用户透明地查询和操作远程数据库实例的数据,并使应用程序看起
来只有一个大型的集中式数据库,用户可以在任何一个场地执行全局应用,具有数据分布透
明性和逻辑整体性等特点。
2. 分布式数据库系统的设计
1.创建和使用数据库链接(链接服务器)
数据库链接是定义一个从某一数据库服务器到另一数据库服务器的单向通信路径指示
器。可以使用企业管理器或者 T-SQL代码来建立链接服务器。链接服务器可以是 SQL Server
或者任何其他的 OLE DB和 ODBC数据源,只要相应的驱动程序支持,分布式查询就可以
检索和修改相应数据源中的数据。使用创建好的链接服务器,对用户来说,数据分布就是透
明的,用户就好像使用本地集中式数据库一样,同时使用链接服务器的查询代码具有更好的
移植性,也更加易于维护。
2.采用分布式分区视图实现水平分片[3]
将表分区就是将表按照分区键划分为两个或两个以上更小的分段。分区键通常选择一个
经常被用来选取特定范围的数据字段,这样分区的效率最高。通过创建分区视图合并所有分
区表,实现对整个数据集的访问。
SQL Server支持两种类型的分区视图[2]:本地的和分布的。分布式分区视图,也称为联
合数据库,将分区表分布在多个场地的服务器上。使用链接服务器和分布式分区视图方法可
以构建以水平分片的分布式数据库系统。
3.采用存储过程实现垂直分片
SQL Server 没有提供现成的技术实现垂直分片的分布式数据库系统,但可以使用链接
服务器和存储过程相结合的方法,将用户提交的全局操作转变为对多个场地的垂直分片表的
局部操作,使用存储过程可以保证分布式事务的 ACID特性。
存储过程是存储在服务器上的预编译好的 SQL语句集。使用存储过程将对多个场地的
垂直分片表的操作放在一个分布式事务内,要么全部提交,要么全部回退,保证了分布式数
据库系统数据的一致性。
-2-
4.采用数据库复制技术实现混合式数据分布[2,4]
分布式数据库系统必须以最小的代价保持各冗余副本的一致性,即对一个数据库的逻
辑对象的修改,必须传播到该对象的所有副本,同时做相同的修改。SQL Server使用数据库
复制技术来解决这一复杂问题。
SQL Server 复制是按照出版业的运作模式来工作的,它包括 3 个代理——分发者、发
布者和订阅者。本文采用事务复制保持各冗余副本的数据一致性。
3. 使用 SQL Server 2000构建分布式数据库
以学校计算机系(CS),外语系(FD),数理系(MP),教务处(JW)为例,具体构建
水平和垂直分片的混合分布的分布式数据库系统。四个 SQL Server数据库实例位于各个系
处,前三个系各自保存本系的学生信息表,如计算机系 info_student_cs,教务处保存三个系
的学生信息副本。
1. 创建数据库和表
(1)计算机系数据库 dbcs,学生信息表 info_student_cs,分区键 sdept,分区键必须是主
键的一部分。
create database dbcs
go
use dbcs
create table info_student_cs
(
sno nvarchar(10) not null,
sname nvarchar(40) not null,
sdept nvarchar(2) not null,
sex nvarchar(2) not null,
age int not null,
constraint pk_info_student_cs
primary key(sno,sdept),
constraint uq_info_student_cs_sno
unique(sno),
constraint chk_info_student_cs_sdept
check(sdept='CS')
)
(2)在外语系、数理系数据库实例上分别创建数据库 dbfd,dbmp,学生信息表
info_student_fd,info_student_mp,分区键仍是 sdept,检查约束分别改为 check(sdept='FD')
和 check(sdept='MP')。在教务处数据库实例上创建 dbjw。
2.创建链接服务器
分别在四台服务器上建立双向的数据库链接,以创建计算机系到外语系的链接服务器
(CS_FD)为例。
EXEC sp_addlinkedserver
@server='CS_FD',
@datasrc='tred',
@srvproduct='',
@provider='SQLOLEDB';
-3-
EXEC sp_addlinkedsrvlogin
@rmtsrvname='CS_FD',
@useself='false',
@locallogin='cupliuj\administrator',
@rmtuser='sa',
@rmtpassword='***';
3. 采用分布式分区视图实现水平分片
分别在三个系服务器上创建分布式分区视图,以计算机系为例。
create view info_student
as
select * from info_student_cs
union all
select * from _student_fd
union all
select * from _student_mp;
到这里,整个水平分片的分布式数据库系统已经建立完毕。现在可以在三个系的任何位
置,只要访问本地 info_student分布式分区视图,就实现了所有分布式数据库的操作。此时,
对数据库的全局操作和局部操作就如同操作本地集中式数据库一样。
①插入数据。若当前客户端连接在外语系服务器上,执行 insert into info_student
values('S006128','LIUJ','CS','F','20'),由于 sdept=’CS’,所以系统会自动将这条记录插入到计
算机系的学生信息表 info_student_cs中。
②修改数据。若客户端连接在数理系服务器上,执行 update info_student set sdept='FD'
where sno='S006128',由于执行前 sdept=’CS’,执行后 sdept=’FD’,所以系统会自动将这条
记录从计算机系移动到外语系的学生信息表 info_student_fd中,实现了学生改专业、换院系
的功能。
③删除数据。若客户端连接在计算机系服务器上,执行 delete from info_student where
sno=’S006128’,由于这条记录 sdept=’FD’,所以系统会自动将这条记录从外语系服务器上删
除。
4. 采用存储过程实现垂直分片
设表 info_student 存储学校所有学生信息,进行垂直分片后生成两张表 info_student1
(sno,sname,sdept)保存在 A服务器的数据库 DB1上,info_student2(sno,sex,age)保存在 B
服务器的数据库 DB2上,在 A与 B上建立存储过程 add_student,并相互建立数据库链接。
下面仅以插入数据为例,介绍如何保持分布式事务的一致性。在 A 上建立存储过程
add_student,执行
create proc add_student
(
@sno char(10),
@sname char(40),
@sdept char(2),
@sex char(2),
@age int
)
as
-4-
set XACT_ABORT on
BEGIN DISTRIBUTED TRANSACTION
insert into info_student1
values(@sno,@sname,@sdept);
insert into _student2
values(@sno,@sex,@age);
COMMIT TRANSACTION
接着执行存储过程 EXEC ADD_STUDENT 'S005129','CWK','MP','M',24,这样系统就会
分别在 A和 B服务器上的垂直分片后的学生信息表内插入对应的数据。类似可解决修改和
删除操作,本文不再具体阐述。
5. 采用复制技术实现混合式数据分布
教务处需要保存三个系的学生信息表副本,为了将事务一致性保持在令人满意的范围
内,本文采用事务复制方式。将三个系(发布服务器)的初始快照传播到教务处(订阅服务
器),当三个系服务器上发生数据修改时,捕获个别事务并传播到教务处,从而得以在订阅
服务器间维护事务的一致性。
4. 结论
本文论述了在 SQL Server 2000的数据库系统中,采用链接服务器、分布式分区视图和
存储过程相结合的方法来架构分布式数据库系统,并基于数据库复制技术实现混合式的数据
分布。同时也深入探讨了设计和实现方法,取得了令人满意的实验效果。提出的架构分布式
数据库方法实现了数据分布的透明性,简化了数据访问、降低了维护复杂度,在应用中具有
一定的优势。
参考文献
[1] 邵佩英. 分布式数据库系统及其应用(第二版). 北京:科学出版社,2005
[2] Paul Nielsen,刘瑞等译. Microsoft SQL Server 2000宝典[M]. 北京:中国铁道出版社,2004
[3] 曾文全. 基于 SQL Server 2000的分布式数据库的架构[J]. 教育信息化,2006-1,24~25
[4] 杜杏菁. 分布式数据库中复制技术的研究[J]. 华北科技学院学报,2004,1(3),88~91
-5-
The Implementation and Design of the Distributed Database
Based on the SQL SERVER
Liu Jing,Chu Wenke
College of Information Science and Engineering,Qingdao University of Agriculture,Qingdao,
Shandong (266109)
Abstract
How to make the most of MS SQL Server 2000's administrative character to build the distributed
database with the linked server, distributed segment view and stored procedure and achieve the hybrid
data distribution based on database replica technique is proposed. The horizontal fragmentation,
vertical fragmentation and composite data distribution of the distributed database is achieved through
experiment.
Keywords:distributed database,distributed segment view,linked server,stored procedure
作者简介:
刘竞(1978-),女(汉族),吉林永吉人,助教,主要研究方向为计算机网络及应用、信息
检索技术;
初文科(1971-),男(汉族),山东莱阳人,讲师,主要研究方向为数据库、软件工程。