一种实现分布式事务的方法、装置及数据库服务器制造方法及图纸

技术编号:14894996 阅读:229 留言:0更新日期:2017-03-29 10:17
本申请公开了一种实现分布式事务的方法、装置及数据库服务器,包括:分解来自客户端的请求消息中包含的事务SQL语句,获得可在单个数据库服务器上执行的分解SQL语句;将获得的各个分解SQL语句根据涉及表的数据所在的数据库服务器分发到相应的数据库服务器。各数据库服务器执行接收到的分解SQL语句,并反馈执行结果至客户端。本发明专利技术通过将事务SQL语句分解为可在单个数据库服务器上执行的分解SQL语句,通过各数据库服务器执行并反馈分解SQL语句的执行结果,实现了对分布式事务的SQL语句在各个数据库服务器执行的数据更新的确定,进而确定了分布式事务是否完成。

【技术实现步骤摘要】

本申请涉及数据库处理技术,尤指一种实现分布式事务的方法、装置及数据库服务器。
技术介绍
目前,当分布式数据库系统涉及到多个数据库服务器时,针对多个数据库服务器的数据处理一般通过分布式事务实现。分布式事务处理过程一般包括:向事务涉及到的全部资源管理器发送预处理信息,确定能被定位和控制的资源管理器,对能够定位和控制的资源管理器下发事务进行数据更新。发送预处理信息可以确定能被定位和控制的资源管理器,但资源管理器在执行数据更新时,需要将事务提交到事务涉及多个数据库服务器,当部分数据库服务器出现网络故障、或宕机等情况时,提交到该部分数据库服务器的事务会提交失败;即事务中涉及该部分数据库服务器的数据更新将无法完成;目前,事务涉及多个数据库服务器,事务提交是将整个事务分发到涉及到的所有数据库服务器,对于事务提交失败的情况并未考虑,因此,并未进行事务是否提交成功和事务是否完成的分析,导致事务涉及的数据更新存在更新不完全的问题。
技术实现思路
为了解决上述问题,本专利技术提供一种实现分布式事务的方法、装置及数据库服务器,能够避免由于事务提交失败造成的事务更新不完全的问题。为了达到本专利技术的目的,本申请提供一种实现分布式事务的方法,包括:此部分待权利要求确定后补充与现有技术相比,本专利技术提供的技术方案,包括:分解来自客户端的请求消息中包含的事务结构化查询语言(SQL)语句,获得一条或一条以上可在单个数据库服务器上执行的分解SQL语句;将获得的各个分解SQL语句根据涉及表的数据所在的数据库服务器分发到相应的数据库服务器。各数据库服务器执行接收到的分解SQL语句,并反馈执行结果至客户端。本专利技术通过将事务SQL语句分解为可在单个数据库服务器上执行的分解SQL语句,通过各数据库服务器执行并反馈分解SQL语句的执行结果,实现了对分布式事务的SQL语句在各个数据库服务器执行的数据更新的确定,进而确定了分布式事务是否完成。附图说明附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。图1为本专利技术实现分布式事务的方法的流程图;图2为本专利技术实现分布式事务的方法的流程图;图3为本专利技术实现分布式事务的装置的结构框图;图4为本专利技术实现分布式事务的数据库服务器的结构框图;图5为本专利技术第一实施例的系统的结构框图;图6为本专利技术第二实施例的方法流程图;图7为本专利技术第三实施例的方法的流程示意图;图8为本专利技术第四实施例的方法的流程示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。图1为本专利技术实现分布式事务的方法的流程图,如图1所示,包括:步骤100、分解来自客户端的请求消息中包含的事务结构化查询语言(SQL)语句,获得一条或一条以上可在单个数据库服务器上执行的分解SQL语句;需要说明的是,事务SQL语句是指分布式事务中事务涉及的数据更新或操作的数据库执行指令;一条或一条以上可在单个数据库服务器上执行的分解SQL语句是指,分解获得的SQL语句在一个数据库服务器上可以完全执行。例如,如果将数据1和数据2插入到数据库的SQL语句需要在两个数据库上做插入操作,则该SQL语句不是可在单个数据库服务器上执行的SQL语句;将该SQL语句分解为将数据1插入到数据库和将数据2插入到数据库的两个分解SQL语句,则两个分解的SQL语句都可以在单个数据库服务器上执行。本步骤中,分解分布式事务包含的事务SQL语句具体包括:确定事务SQL语句的类型后,基于数据操纵语言(DML)对各类型的事务SQL语句通过所涉及表的数据的分发策略进行分析,根据分析结果分解事务SQL语句为一条或一条以上可在单个数据库服务器执行的分解SQL语句。这里,确定事务SQL语句的类型为本领域技术人员的惯用技术手段,在此不再赘述。本专利技术方法中,事务SQL语句的类型包括:提取(SELECT)、和/或插入(INSERT)、和/或更新(UPDATE)、和/或删除(DELETE)、和/或模式数据定义语言(DDL)语句。步骤101、将获得的各个分解SQL语句根据涉及表的数据所在的数据库服务器分发到相应的数据库服务器。本专利技术方法还包括:根据事务SQL语句分解的所有分解SQL语句均执行完成确定分布式事务完成。本专利技术通过将事务SQL语句分解为可在单个数据库服务器上执行的分解SQL语句,通过各数据库服务器执行并反馈分解SQL语句的执行结果,实现了对分布式事务的SQL语句在各个数据库服务器执行的数据更新的确定,进而确定了分布式事务是否完成。图2为本专利技术实现分布式事务的方法的流程图,如图2所示,包括:步骤200、各数据库服务器分别接收可在数据库服务器自身执行的分解SQL语句;这里,分解SQL语句为事务SQL语句分解的可在单个数据库服务器上执行的语句。步骤201、各数据库服务器执行接收到的分解SQL语句,并反馈执行结果至客户端。这里,根据各个分解SQL语句的执行结果,可以确定是否完成分布式事务。本专利技术方法还包括:事务SQL语句为插入和/或更新时,在分解SQL语句涉及表的表项中预先设置事务标识表项,数据库服务器接收到分解SQL语句时,在预先设置的事务标识项中分配基于编号策略生成的全局事务身份证(ID);数据库服务器执行完分解SQL语句时,释放分配给分解SQL语句的全局事务ID,并根据全局事务ID的释放确定分解SQL语句执行完成。事务SQL语句为提取时,数据库服务器接收到所述分解SQL语句时,执行分解SQL语句返回数据,如果返回的数据不包含分配的所述全局事务ID,确定所述分解SQL语句执行完成;如果返回的数据包含分配的所述全局事务ID时,重新执行所述分解SQL语句直至返回的数据中不包含分配的所述全局事务ID时,确定所述分解SQL语句执行完成。图3为本专利技术实现分布式事务的装置的结构框图,如图3所示,包括:分解单元和分发单元;其中,分解单元,用于分解来自客户端的请求消息中包含的事务SQL语句,获得一条或一条以上可在单个数据库服务器上执行的分解SQL语句;分发单元,用于将获得的各个分解SQL语句,根据SQL语句涉及表的数据所在的数据库服务器,将分解SQL语句分发到相应的数据库服务器;分解单元具体用于,对来自客户端的请求消息中包含的事务SQL语句确定事务SQL语句的类型后,基于DML对各类型的事务SQL语句通过所涉及表的数据的分发策略进行分析,根据分析结果分解事务SQL语句为一条或一条以上可在单个数据库服务器执行的分解SQL语句。事务SQL语句的类型包括:SELECT、和/或INSERT、和/或UPDATE、和/或DELETE、和/或DDL语句。本专利技术装置该包括确定单元,用于根据事务SQL语句分解的所有分解SQL语句均执行完成确定分布式事务完成。图4为本专利技术实现分布式事务的数据库服务器的结构框图,如图4所示,包括接收单元和执行反馈单元;其中,接收单元,用于接收分解事务SQL语句获得的可在自身执行的分解SQL语句;执行反馈单元,执行接收到的分解SQL语句,并反馈执行结果本文档来自技高网...

【技术保护点】
一种实现分布式事务的方法,其特征在于,包括:分解来自客户端的请求消息中包含的事务结构化查询语言SQL语句,获得一条或一条以上可在单个数据库服务器上执行的分解SQL语句;将获得的各个分解SQL语句根据涉及表的数据所在的数据库服务器分发到相应的数据库服务器。

【技术特征摘要】
1.一种实现分布式事务的方法,其特征在于,包括:分解来自客户端的请求消息中包含的事务结构化查询语言SQL语句,获得一条或一条以上可在单个数据库服务器上执行的分解SQL语句;将获得的各个分解SQL语句根据涉及表的数据所在的数据库服务器分发到相应的数据库服务器。2.根据权利要求1所述的方法,其特征在于,分解分布式事务包含的事务SQL语句具体包括:确定事务SQL语句的类型后,基于数据操纵语言DML对各类型的所述事务SQL语句通过所涉及表的数据的分发策略进行分析,根据分析结果分解所述事务SQL语句为一条或一条以上可在单个数据库服务器执行的分解SQL语句。3.根据权利要求1或2所述的方法,其特征在于,所述事务SQL语句的类型包括:提取SELECT、和/或插入INSERT、和/或更新UPDATE、和/或删除DELETE、和/或模式数据定义语言DDL语句。4.根据权利要求1所述的方法,其特征在于,该方法还包括:根据事务SQL语句分解的所有所述分解SQL语句均执行完成确定分布式事务完成。5.一种实现分布式事务的方法,其特征在于,包括:各数据库服务器分别接收可在数据库服务器自身执行的分解SQL语句;各数据库服务器执行接收到的分解SQL语句,并反馈执行结果至客户端;所述分解SQL语句为事务SQL语句分解的可在单个数据库服务器上执行的语句。6.根据权利要求5所述的方法,其特征在于,该方法还包括:所述事务SQL语句为插入和/或更新时,在所述分解SQL语句涉及表的表项中预先设置事务标识表项,数据库服务器接收到所述分解SQL语句时,在预先设置的事务标识项中分配基于编号策略生成的全局事务ID;数据库服务器执行完所述分解SQL语句时,释放分配给分解SQL语句的全局事务ID,并根据全局事务ID的释放确定所述分解SQL语句执行完成;分解SQL语句为提取时,数据库服务器接收到所述分解SQL语句时,执行分解SQL语句返回数据,如果返回的数据不包含分配的所述全局事务ID,确定所述分解SQL语句执行完成;如果返回的数据包含分配的所述全局事务ID时,重新执行所述分解SQL语句直至返回的数据中...

【专利技术属性】
技术研发人员:丁岩刘志文
申请(专利权)人:南京中兴新软件有限责任公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1