摘 要:提出了如何充分利用 MS SQL Server 2000 的数据库管理特性,采用链接服务器、分布式分区视图和存储过程构建分布式数据库,以及基于数据库复制技术实现混合式的数据分布。实验实现了分布式数据库的水平分片、垂直分片和混合式数据分布。 关键词: 分布式数据库;分布式分区视图;链接服务器;存储过程
一. 引言随着网络与数字通信技术的飞速发展,应用的数据再也不是存储在一个单一的场地,而是可能分布在全球的任何位置。对这样由多个分散数据库组成的管理信息系统,如何以最小代价将其整合成分布式数据库系统也就成为了迫切需要解决的问题 [1] 。MS SQL Server 2000 分布式数据库功能 [2] 允许用户把多个不同场地的数据库当作一个完整的数据库看待,允许用户透明地查询和操作远程数据库实例的数据,并使应用程序看起来只有一个大型的集中式数据库,用户可以在任何一个场地执行全局应用,具有数据分布透明性和逻辑整体性等特点。 二. 分布式数据库系统的设计1.创建和使用数据库链接(链接服务器)数据库链接是定义一个从某一数据库服务器到另一数据库服务器的单向通信路径指示器。可以使用企业管理器或者 T-SQL 代码来建立链接服务器。链接服务器可以是 SQL Server或者任何其他的 OLE DB 和 ODBC 数据源,只要相应的驱动程序支持,分布式查询就可以检索和修改相应数据源中的数据。使用创建好的链接服务器,对用户来说,数据分布就是透明的,用户就好像使用本地集中式数据库一样,同时使用链接服务器的查询代码具有更好的移植性,也更加易于维护。 将表分区就是将表按照分区键划分为两个或两个以上更小的分段。分区键通常选择一个经常被用来选取特定范围的数据字段,这样分区的效率最高。通过创建分区视图合并所有分区表,实现对整个数据集的访问。SQL Server 支持两种类型的分区视图 [2] :本地的和分布的。分布式分区视图,也称为联合数据库,将分区表分布在多个场地的服务器上。使用链接服务器和分布式分区视图方法可以构建以水平分片的分布式数据库系统。 SQL Server 没有提供现成的技术实现垂直分片的分布式数据库系统,但可以使用链接服务器和存储过程相结合的方法,将用户提交的全局操作转变为对多个场地的垂直分片表的局部操作,使用存储过程可以保证分布式事务的 ACID 特性。存储过程是存储在服务器上的预编译好的 SQL 语句集。使用存储过程将对多个场地的垂直分片表的操作放在一个分布式事务内,要么全部提交,要么全部回退,保证了分布式数据库系统数据的一致性。 分布式数据库系统必须以最小的代价保持各冗余副本的一致性,即对一个数据库的逻辑对象的修改,必须传播到该对象的所有副本,同时做相同的修改。SQL Server 使用数据库复制技术来解决这一复杂问题。SQL Server 复制是按照出版业的运作模式来工作的,它包括 3 个代理——分发者、发布者和订阅者。本文采用事务复制保持各冗余副本的数据一致性。 三. 使用 SQL Server 2000 构建分布式数据库以学校计算机系(CS),外语系(FD),数理系(MP),教务处(JW)为例,具体构建水平和垂直分片的混合分布的分布式数据库系统。四个 SQL Server 数据库实例位于各个系处,前三个系各自保存本系的学生信息表,如计算机系 info_student_cs,教务处保存三个系的学生信息副本。 1. 创建数据库和表(1)计算机系数据库 dbcs,学生信息表 info_student_cs,分区键 sdept,分区键必须是主键的一部分。create database dbcs (2)在外语系、数理系数据库实例上分别创建数据库 dbfd,dbmp,学生信息表info_student_fd,info_student_mp,分区键仍是 sdept,检查约束分别改为 check(sdept='FD')和 check(sdept='MP')。在教务处数据库实例上创建 dbjw。 2.创建链接服务器分别在四台服务器上建立双向的数据库链接,以创建计算机系到外语系的链接服务器(CS_FD)为例。 exec sp_addlinkedserver 'FD', ' ', 'SQLOLEDB ', '192.168.5.9' 3. 采用分布式分区视图实现水平分片分别在三个系服务器上创建分布式分区视图,以计算机系为例。 create view info_student 到这里,整个水平分片的分布式数据库系统已经建立完毕。 现在可以在三个系的任何位置,只要访问本地 info_student 分布式分区视图,就实现了所有分布式数据库的操作。 此时,对数据库的全局操作和局部操作就如同操作本地集中式数据库一样。
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 5. 采用复制技术实现混合式数据分布教务处需要保存三个系的学生信息表副本,为了将事务一致性保持在令人满意的范围内,本文采用事务复制方式。将三个系(发布服务器)的初始快照传播到教务处(订阅服务器),当三个系服务器上发生数据修改时,捕获个别事务并传播到教务处,从而得以在订阅服务器间维护事务的一致性。 四. 结论本文论述了在 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 |
|