四、 利用分布式技术实现事务处理和查询
4.1 分布式事务处理
分布式数据库系统中数据的分布导致事务具有了分布性。一个全局事务的执行被划分为在许多场地上子事务的执行。
分布式事务要能够在多个服务器上执行,我们使用MS DTC作为事务管理器来协调各个服务器对事务的处理操作,为了减少网络故障对分布式事务处理的影响,避免分布式事务造成不同服务器间数据的不一致,X/Open XA规范将分布式事务的处理过程规定为两个阶段,即准备阶段和提交阶段,就是常说的两阶段提交。
在进行分布式事务处理时,我们首先在服务器端用Transact SQL脚本程序BEGIN DISTRIBUTED TRANSACTION语句启动一个分布式事务,将该服务器作为分布式事务管理服务器,然后脚本程序对连接服务器执行分布式查询或远程服务器上的存储过程,分布式事务管理服务器会自动调用MS DTC,使远程服务器参加分布式事务处理。当脚本程序执行COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION或ROLLBACK WORK语句时,分布式事务管理服务器将再次调用MS DTC,用它来管理两阶段提交进程,使连接服务器和远程服务器提交或回滚事务。例如在业务系统中,如果总公司数据库管理系统发现该客户是交叉投保,则需将该保单插入拒保记录表中,同时在对应的营业分支机构的数据库中将该保单的状态设为无效。我们在营业分支机构的数据库(DBServer1)中建立存储过程update_policy更新保单状态,在总公司数据库服务器(DBServer)上执行以下脚本程序,启动一个分布式事务insert_reject:
USE business
GO
BEGIN DISTRIBUTED TRANSACTION
INSERT reject
VALUES(policy_id, insurance_no,business_date,customer_id,customer_name…)
EXECUTE DBServer1.business.dbo.update_policy
COMMIT TRANSACTION
GO
系统执行insert_reject事务向DBServer中的reject表插入一条记录,同时更新对应的分支机构数据库中的保单表status字段,该事务使系统数据的完整性得到了保证。
4.2 分布式查询
分布式数据库系统中数据的分布导致查询也具有了分布性,分布式查询可能针对异类的OLE DB 或 ODBC 数据源。SQL Server 支持分布式查询,即包括来自两个或更多服务器数据的查询,支持服务器间的检索、更新和游标,并使用 Microsoft Distributed Transaction Coordinator (MS DTC) 保证节点间事务语义,维护服务器间的安全。
在系统设计的过程中,为了减少网络通讯量,我们根据应用的功能已将数据关系进行分片存放在各数据库中,因此大部分的应用是面向局部数据库的操作,但全局性的查询仍需要多个数据库的数据支持。在业务人员的管理模块中,由于各分支机构对其业务人员进行直接管理,且管理制度都有差异,我们将业务人员信息存放在分支机构的数据库中,通过联合分布式查询对公司所属的所有业务员进行登记;在客户管理模块中,我们根据来源将客户信息分别存放在业务数据库服务器的传统客户表和Web数据库服务器的网络客户表中,通过联合分布式查询才能对公司所属的所有业务员和客户进行登记,下面以年度的业务员查询为例介绍联合分布式查询的方法:
SELECT emp.emp_name, emp.emp_id,emp.emp_gender…
FROM DBServer1.business.dbo.employee AS emp
WHERE date between '01/01/2000' and '12/31/2000'
UNION
SELECT emp.emp_name, emp.emp_id,emp.emp_gender…
FROM DBServer2.business.dbo.employee AS emp
WHERE date between '01/01/2000' and '12/31/2000'
五、结论
分布式数据库技术引入保险信息管理后,有效的解决了数据分散和集中管理的矛盾,实现了数据的共享和交换。事实证明,分布式技术在远程数据管理中具有不可替代的作用。