用于管理分布式事务内跨越多个dbms的分布式保存点的方法

文档序号:6357175阅读:433来源:国知局
专利名称:用于管理分布式事务内跨越多个dbms的分布式保存点的方法
技术领域
本发明涉及分布式数据库管理系统以及分布式数据库管理系统内保存点的管理。
背景技术
数据库是收集的、记录的以及相关的数据的仓库,在数据元素的集中、数据的逻辑一致性、数据的内在含义以及数据可以被使用方面具有其内在价值。另外,由于数据库组织、记录和文件的可访问性和数据的可动态更新性,数据库的价值远超过数据库的各个元素之和的价值。例程性、重复性和一致性地将数据加到数据库以及从数据库恢复相关、及时、正确的数据的能力是其数据库管理系统(DBMS)的功能。DBMS是一组计算机应用程序,它们创建数据库组织(模式(schema)和元数据),并且存储、检索和更新数据库中的文件。大型数据库由具有保证数据及时性和有效性的机制的复杂数据库管理系统(DBMS)来管理。DBMS的关键要求是数据正确且最新。
以及时方式收集和报告的正确数据对于多用户数据库是关键的。这就是并发控制的原因。并发控制确保试图访问和更新相同数据的若干用户以受控的方式操作从而使更新结果正确,并且还保证数据读取者看到当前提交数据,而不是过时或未提交数据。典型的例子是分配航线预订数据库中的各航线席位。即使在很多预订分配很多航班的很多席位的情况下,DBMS的并发控制功能也必须确保只有一个乘客分配给一个席位,以及相反,一个席位只分配给一个乘客。
DBMS访问语句对数据库文件的操作包括SELECT(选择)、INSERT(插入)、UPDATE(更新)和DELETE(删除)的“数据操纵”操作等。
1.SELECT操作从数据库检索数据,并且将数据返回给请求者。
2.INSERT操作将数据输入到数据库中。
3.UPDATE操作改变现有记录的值。
4.DELETE操作从数据库中删除记录。
事务处理-事务的读写操作如插入、删除和修改的文件修改操作需要“并发控制”。这些操作典型地跟在读取操作之后,并且是写入操作的一部分。典型地,读取操作例如Read_Item(x)将名称为“x”的数据库项目读入到名称为“x”的终端用户程序的程序值中。Write_Item(x)将终端用户程序变量x的值写入到数据库项目x中。
事务处理-并发控制并发控制保证试图大致同时修改(插入、更新、删除)记录的若干终端用户以受控的方式操作,从而使存储在数据库中的数据正确。它还保证读取者看到当前提交数据,而不是过时数据或未提交数据。
事务处理和事务状态在单数据库中存在多种并发控制方式。作为示例,最常见的是“锁定”,从而当一个用户试图修改、更新或删除一个记录时,没有其它用户可以访问该记录直到事务完成为止。事务可以通过事务所作修改的提交(提交)或事务所作修改的撤销(事务回滚)来完成。回滚事务的决策可以是应用程序决策,或者可以是系统决策(例如,响应阻止提交的情况)。“完成”是非特定术语,并且可以意味着在允许另一用户访问记录之前写入数据或者超出写入数据以“提交”事务。并发控制导致(1)“提交”事务或者(2)中止事务并将数据库“回滚”至先前状态。
在并发控制和事务日志记录的上下文中,将上面1和2项的模型分解成更小粒度级别或事务状态。因此,事务可以分解成如下步骤或事务状态1.BEGIN_TRANSACTION(开始事务),标志事务的开始。
2.SELECT或INSERT,表示作为数据库事务一部分的对数据库项目的读取或写入操作。
3.END_TRANSACTION(结束事务),表示SELECT或INSERT操作结束。因而这些命令标志事务执行的结束。正是在这一点上DBMS判定是否可以“提交”即永久性应用修改。
4.COMMIT_TRANSACTION(提交事务),通知事务成功结束,事务将提交给数据库并且不被撤消。
5.ROLLBACK(回滚)或ABORT(中止),通知事务不成功结束,并且必须回滚,也就是,对数据库的修改必须撤消。
事务处理-系统日志当并发控制失败和出现并行问题时,需要“回滚”失败的事务。事务回滚使用系统日志来完成。系统日志记录事务信息作为事务进度。典型地,该信息包括事务ID以及事务所执行的每一次操作之前和之后的数据映象。通过COMMIT或ROLLBACK阶段的事务进度也记录在日志中。
日志记录停止在“提交点”,这是访问数据库的所有操作已成功执行并且所有事务操作对数据库的影响已记录在日志或日记帐(journal)中的时候。
事务处理-恢复和回滚如果事务不能提交,则数据库必须回滚至失败事务开始之前的先前状态。这通过使用日记帐或日志条目来撤消数据库中的某些修改并且重做数据库中的其它修改来完成。
事务处理-恢复和回滚-保存点保存点如同事务内的书签。它们可以在事务的开始和结束之间由应用创建。
保存点允许通过应用请求撤消自从设置保存点以来对数据和模式所作的修改以“回滚至保存点”。保存点使一组非原子数据库请求或原子事务的子事务表现得具有原子性,因为它们可以作为一个单元来撤消。如果在执行期间发生应用错误,或者如果应用检测到错误,则可以使用保存点撤消在开始保存点的时间与请求保存点回滚的时间之间的事务所作修改,并且返回到事务的先前点。
保存点类似于复合SQL语句,因为它允许将若干SQL语句分组成单个可执行块。在执行块的第一条语句之前,需要开始保存点块的保存点请求。如果任何随后语句以应用错误结束,则DBMS将只回滚该语句。这就提供比复合SQL语句更细的粒度,在复合SQL语句中,块中任何处的单个错误使整块以错误结束,并且回滚整个复合SQL语句。在语句保存点块的结束,可以释放保存点或回滚至保存点。
应用保存点对事务或工作单元中的SQL语句子集所执行的工作提供控制。在应用内,可以设置保存点,然后释放保存点或者回滚自从保存点以来所执行的工作。也可以在单个事务内使用多个保存点和嵌套保存点。下面代码段演示在单个事务内使用两个保存点以控制应用的行为。
<pre listing-type="program-listing">INSERT INTO order..INSERT INTO order_item..lamp---设置事务中的第一保存点SAVEPOINT before_radio ON ROLLBACK RETAIN CURSORSINSERT INTO order_item..RadioINSERT INTO order_item..Power CordPseudo-SQLIF SQLSTATE=“No Power Cord”ROLLBACK TO SAVEPOINT before_radioRELEASE SAVEPOINT before_radio--设置事务中的第二保存点SAVEPOINT before_checkout ON ROLLBACK RETAINCURSORSINSERT INTO order..ApprovalPseudo-SQL&lt;!-- SIPO &lt;DP n="4"&gt; --&gt;&lt;dp n="d4"/&gt;IF SQLSTATE=“No approvarROLLBACK TO SAVEPOINT before checkout--提交事务,这将释放保存点COMMIT</pre>在该代码段中,第一保存点强制两个数据对象之间的相关性,而本质上,这两个对象本身之间并没有相关性。不能使用引用完整性来描述上面收音机和电源线之间的关系,因为一个可以在不存在另一个的情况下存在。然而,销售商不想在不带电源线的情况下将收音机发货给顾客。但是,销售商也不想由于收音机没有电源线而通过回滚整个事务来取消灯的订单。应用保存点提供完成该订单所需的粒度控制。
保存点比使用多个COMMIT和ROLLBACK语句提供更好的性能和更清晰的应用设计。当发出COMMIT命令时,DBMS必须做一些额外工作来提交当前事务并且开始新事务。保存点允许在不增加多个COMMIT语句的开销的情况下将事务分解成较小的单元或步骤。下面代码段演示通过使用多个事务而不是保存点所引起的性能恶化<pre listing-type="program-listing">INSERT INTO order..INSERT INTO order_item..lamp--提交当前事务,开始新事务COMMITINSERT INTO order_item..RadioINSERT INTO order_item..Power CordPseudo-SQLIF SQLSTATE=“No Power Cord”--回滚当前事务,开始新事务ROLLBACKELSE--提交当前事务,开始新事务COMMIT&lt;!-- SIPO &lt;DP n="5"&gt; --&gt;&lt;dp n="d5"/&gt;INSERTINTO order..ApprovalPseudo-SQLIF SQLSTATE=“No approval”--回滚当前事务,开始新事务ROLLBACKELSE--提交当前事务,开始新事务COMMIT</pre>多个提交点的另一个缺点是对象可能已被提交因此在它被完全完成之前可见于其它应用。在例子2中,在增加完所有项目之前,并且更糟的是在它被认可之前,订单可被其它用户获得。使用应用保存点将避免这种‘脏(dirty)数据’暴露,同时对操作提供粒度控制。
比较应用保存点与复合SQL块,保存点比复合SQL块提供如下优点事务控制增强;锁定竞争较少;以及与应用逻辑的集成改善。
复合SQL块可以是原子的(ATOMIC)或非原子的。如果原子复合SQL块内的语句失败,则回滚整个复合SQL块。如果非原子复合SQL块内的语句失败,则包括整个复合SQL块的事务提交或回滚由应用控制。比较起来,如果保存点范围内的语句失败,则应用可以回滚保存点范围内的所有语句,但是提交保存点范围外的语句所执行的工作。该选项在第一代码段中示出,如果回滚保存点工作,则提交保存点之前的两条INSERT语句的工作。可选地,应用可以提交事务中的所有语句包括保存点范围内的语句所执行的工作。
当用户发出复合SQL块时,DBMS如IBM DB2关系数据库管理系统同时获取整个复合SQL块语句所需的锁定。当用户设置应用保存点时,DBMS在发出保存点范围内的各语句时获取锁定。保存点的锁定行为可以导致比复合SQL块显著少的锁定竞争,从而除非应用要求由复合SQL语句执行的锁定,否则最好使用保存点。
复合SQL块作为单条语句执行完整的一组语句。应用不能使用控制结构或函数来将语句加到复合SQL块。比较起来,当设置应用保存点时,应用可以通过控制结构如while循环或使用动态SQL语句调用其它应用函数或方法来发出保存点范围内的SQL语句。应用保存点允许用户自由地以直观方式将SQL语句与应用逻辑进行集成。例如,在下面代码段中,应用设置保存点并且在保存点范围内发出两条INSERT语句。该应用使用当真时调用add_batteries()函数的IF语句。add_batteries()发出在本上下文中包括在保存点范围内的一条SQL语句。最后,应用回滚在保存点内所执行的工作(包括由add_batteries()函数发出的SQL语句)或者提交在整个事务中所执行的工作<pre listing-type="program-listing">Void add_batteries(){--由下面语句执行的工作由main()中设置的保存点控制INSERT INTO order_item..Batteries}Void main(int argc,char[]*argV){INSERT INTO order..INSERT INTO order_item..lamp--设置事务中的第一保存点SAVEPOINT before_radio ON ROLLBACK RETAIN CURSORSINSERT INTO order_item..RadioINSERT INTO order_item..Power CordIf(strcmp(Radio.power_source(),“AC/DC”)){add_batteries();}Pseudo-SQLIF SQLSTATE=“No Power Cord”ROLLBACK TO SAVEPOINT before_radio&lt;!-- SIPO &lt;DP n="7"&gt; --&gt;&lt;dp n="d7"/&gt;COMMIT}</pre>因此,即使在原子过程(atomic process)内,保存点也提供较细的粒度(granularity)。
分布式数据库分布式数据库日益变得重要。这是受到如现代企业的分布式特性、多个服务器的增大可靠性和可维护性、跨全球或分布式企业的数据共享以及当大型数据库分布在具有局部处理本地事务的能力的多个场地上时性能改善的诸多因素的激励。然而,支持多个交互DBMS和分布式数据库的多个服务器的分散要求数据网络化、数据分布和复制管理功能、跨越多个服务器的查询执行策略以及事务和查询、跨越多个服务器的一致性策略以及从局部扰乱和通信故障恢复的能力。
“分布式事务”是影响分布式数据库DBMS的多个DBMS中的记录和/或文件的事务。
分布式数据库-数据分片分布式数据库的另一方面是数据分片。数据分片存在三种策略将一些元组存储在一些服务器中,并且将其它元组存储在其它服务器中(水平分片);将一些属性存储在一些服务器中,并且将其它属性存储在其它服务器中(垂直分片);以及将一些元组的一些属性存储在一个服务器中,将相同元组的其它属性存储在另一个服务器中,将其它元组的一些属性存储在与前面服务器均不同的另一个服务器中,并且将所述其它元组的其它属性存储在与前面服务器均不同的另一个服务器中(混合型分片)。片断在定义所有片断的所有属性的分片模式和将片断映射到场地的分配模式中进行映射。
分布式数据库-分布式数据库中的并发控制和恢复可以预料到,不管节点之间的复制度,单个平台上的多个数据库和具有多个服务器的分布式数据库具有复杂的并发问题。DBMS的并发控制系统必须保持多个数据库条目之间的并发性。它必须处理各个场地故障以及通信网络故障。并且,它必须处理访问存储在多个场地上的数据库片断和复制品的提交过程,其中,一些场地或通信链接在提交过程期间可能失败。各种策略用来克服分布式多个数据库系统中的提交失败,包括主场地法、主副本法和投票表决法。
分布式数据库-分布式数据库中的保存点和恢复Coyle等人的美国专利5,630,124,“System and Method ForAssuring Atomicity Of Distributed Update Requests In A ParallelDatabase(用于在并行数据库中保证分布式更新请求的原子性的系统和方法)”描述一种在并行多个数据库管理系统中管理分布式请求的方法。如Coyle等人所述,在正常情况下仅对于一个DBMS可见的保存点扩展到参与事务的所有并行DBMS。这就允许应用在一个DBMS上设置一个保存点,并且在另一DBMS上回滚至同一保存点。保存点使用从协调服务器到参与服务器的消息跨越网络连接来标识。该消息在参与者上创建本地保存点。参与者将表示底层事务执行的成功或失败以及本地服务器失败情况下的本地服务器和其它服务器上的事务回滚的消息回送到协调服务器。
Coyle等人描述如何响应事务的发起初始化协调进程的请求计数器。每当协调进程接收到分布式请求时,请求计数器增1。为每个请求生成包括保存点数据的请求实例,并且分布到不同数据库分区节点上的所选从属进程。当接收到所选从属进程上的请求实例时,为每个所选从属进程存储带请求保存点数据的本地保存点以及局部生成的保存点数据。当试图执行请求实例时,将执行试图的成功或失败返回给协调进程。这是针对各请求实例完成的。当表示任何请求实例的执行失败时,对本地保存点表示执行请求的请求实例的各从属进程执行回滚。
由于多个服务器场地、通信网络、分片和复制导致复杂度增大,因此需要提供比“提交-回滚”方法粒度更细的控制级别。需要一种可用于通过电信网络连在一起的多个服务器上的分片和复制数据库的保存点方法。

发明内容
在分布式数据库系统中实现保存点的问题通过在此所述的方法、系统和程序产品来排除,它提供跨越分布在多个服务器上且通过一个或多个通信网络连接在一起的分片和复制数据库元素的保存点功能。
本发明的方法、系统和程序产品为标识分布式保存点在参与事务的服务器与协调服务器之间提供包含保存点数据(保存点名称、创建保存点的服务器的名称以及服务器的保存点顺序号)的消息。一条消息从协调服务器传到参与服务器来标识自从最后一次联系服务器以来所回滚的保存点标识符,与各回滚一起标识的游标处置(打开或关闭);自从最后一次联系服务器以来仍生效的任何新保存点的保存点标识符,以及自从最后一次联系该特定服务器以来所释放的任何保存点的保存点标识符。
各参与DBMS发送一条消息到协调DBMS来标识自从最后一条消息以来所回滚的任何保存点标识符(随同游标处置一起)、自从最后一条消息以来所建立且仍生效的任何保存点的保存点标识符、以及自从最后一条消息以来所释放的任何保存点的保存点标识符。
另外,每次将SQL结果集返回给请求者时,服务器将与游标相关联的顺序号发送到请求者。这样,可以在任务、事务或其它工作单元的保存点内正确定位结果集。
并发性、一致性、准确性和及时性通过在此所述的方法、系统和程序产品获得。本发明的一个实施例是管理驻留于分离参与服务器和协调服务器的多个DBMS上的事务的方法,其中,单个事务包括跨越多个DBMS中的若干参与者的多个步骤。
根据本发明的方法,跨越DBMS网络将保存点分配给参与者,其中,在多步骤事务即具有多个子事务的事务内设置至少一个保存点。如果当事务进行时接收到回滚至保存点的请求,则本发明方法跨越DBMS参与者调用回滚自从保存点以来所执行的操作。当事务被应用接受(甚至不顾拒绝事务的原因)时,跨越多个DBMS参与者接受事务。
建立和管理保存点通过如下步骤来完成将保存点标识符分配给保存点;将标识保存点并且提供保存点信息的消息从协调服务器发送到参与事务的多个数据库管理系统参与者;将关于处理SQL请求时候的保存点并且提供保存点信息的消息从事务的多个数据库管理系统参与者发送到协调服务器;以及将事务结果集返回给请求者。
将标识保存点并且提供保存点信息的消息从协调服务器发送到多个数据库管理系统参与者包括将标识自从最后一次通知数据库服务器以来所回滚的保存点、仍生效的保存点以及所释放的保存点的消息从协调服务器发送到实际参与事务的多个数据库服务器参与者。将关于保存点并且提供保存点信息的消息从多个数据库管理系统参与者发送到协调服务器,包括将标识自从建立保存点以来的保存点信息即在该请求期间所回滚的保存点、仍生效的保存点以及所释放的保存点的消息从多个数据库服务器参与者发送到协调服务器。
在此所用的顺序号建立并显示结果集生成和保存点活动的时间,从而关联结果集和保存点。将SQL结果集返回给请求者包括将与结果集的游标相关联的顺序号传输到请求者,从而使结果集可以与保存点相关联,并且在保存点内正确定位。
本发明的另一个实施例是一种分布式DBMS,包括作为事务参与者的驻留在分离服务器上的多个单独DBMS,并且包括协调服务器。分布式DBMS被配置并控制为跨越多个DBMS中的若干参与者处理包括多个步骤即子事务的事务。这通过包括如下步骤的方法来完成在多步骤事务内跨越DBMS参与者分配至少一个保存点;以及响应应用请求以通过撤消自从跨越DBMS参与者的保存点以来的事务所执行操作来回滚至保存点。
分布式数据库管理系统还被配置并控制为通过包括如下步骤的方法来建立和管理保存点将保存点标识符分配给保存点;将标识保存点并且提供保存点信息的消息从协调服务器发送到多个数据库管理系统参与者;将关于保存点并且提供保存点信息的消息从多个数据库管理系统参与者发送到协调服务器;以及将事务结果集返回给请求者。
本发明的另一个实施例是一种程序产品。该程序产品可以是安装磁带、盘、软盘、安装服务器上的盘、或者作为盘驱动器、磁带驱动器、存储器阵列或其组合的各个服务器上的存储介质,它的形式为其上有计算机可读程序代码的存储介质。写入在介质上或者装载在RAM中或者两者的该代码控制分布式数据库管理系统的操作,该系统包含驻留在分离服务器上的多个单独DBMS即参与者,并且包括协调服务器。程序代码配置并控制数据库管理系统以跨越所述多个DBMS中的若干参与者处理包括多个步骤即子事务的事务。这通过包括如下步骤的方法来完成在具有多个子事务(步骤)的事务内跨越DBMS参与者分配至少一个保存点。如果发现拒绝原因,则跨越DBMS参与者回滚事务至保存点。
程序产品的程序代码通过包括如下步骤的方法配置并控制各个DBMS建立和管理保存点将保存点标识符分配给保存点;将标识保存点并且提供保存点信息的消息从协调服务器发送到多个数据库管理系统参与者;将关于保存点并且提供保存点信息的消息从多个数据库管理系统参与者发送到协调服务器;以及将事务结果集返回给请求者。
本发明的方法可用于任何使用SQL的DBMS,尤其是关系数据库管理系统(RDBMS),但是它也可以用于例如集成数据库管理系统(“CODASYL”)、各种网络数据库范例等。
从另一方面来看,本发明提供一种在驻留于分离服务器上并且包括协调服务器的多个关系数据库管理系统上管理事务的方法,其中,单个事务包括跨越所述多个关系数据库管理系统中的若干参与者的多个子事务,所述方法包括在具有多个步骤的事务内跨越关系数据库管理系统参与者分配至少一个保存点;跨越关系数据库管理系统参与者测试子事务,以进行接受或拒绝步骤的应用决策;以及如果发现拒绝步骤的应用决策,则跨越关系数据库管理系统参与者回滚步骤至保存点。
最好,该方法提供提交事务将释放所有保存点。
从另一方面来看,该方法还提供,通过如下方法建立和管理保存点将保存点标识符分配给保存点;将标识保存点并且提供保存点信息的消息从协调服务器发送到步骤的多个关系数据库管理系统参与者;关系数据库管理系统参与者将关于执行保存点或完成步骤并且提供保存点信息的消息发送到协调服务器;以及将步骤结果集返回给请求者。
最好,该方法提供,将标识保存点并且提供保存点信息的消息从协调服务器发送到事务的多个关系数据库管理系统参与者的步骤包括在事务的开始将标识自从最后一次通知数据库服务器以来所回滚的保存点、仍生效的保存点以及所释放的保存点的消息从协调服务器发送到多个数据库系统参与者。
最好,该方法还提供,将关于保存点并且提供保存点信息的消息从回复多个关系数据库管理系统参与者发送到协调服务器的步骤包括在回滚事务至保存点、释放保存点、完成请求或回复请求的时候将一条消息从多个数据库服务器参与者发送到协调服务器,所述方法包括标识该请求期间所回滚的保存点、仍生效的保存点以及所释放的保存点。
最好,该方法提供,将SQL结果集返回给请求者的步骤还包括将与结果集的游标相关联的顺序号传输到请求者,从而可以在保存点内正确定位结果集。


现在参照附图仅作为示例对本发明进行描述,其中图1示出多数据库、多服务器DBMS;图2示出例子1,它示出协调者发出所有保存点命令并且参与者仅通过网络接收保存点请求的方式;图3示出例子2,它示出协调者和参与者都发出保存点命令的方式;图4示出例子3,它示出三个DBMS服务器之间的更复杂交互。
具体实施例方式
本发明是一种在跨越多个DBMS的分布式事务内设置、回滚和释放跨越多个数据库管理系统(DBMS)的保存点的方法、系统和程序产品。典型地,本发明的方法、系统和程序产品结合关系数据库管理系统(RDBMS)使用,但是本发明的方法、系统和程序产品也可以与任何使用SQL(Structured Query Language,结构查询语言)的DBMS一起使用。使用SAVEPOINT SQL语句,可以区分事务内的里程标(milestone)。然后,可以根据应用逻辑需要撤消自从保存点以来所作的数据和模式修改,而不影响事务的总体结果。回滚至保存点还可以用来可选地关闭自从建立保存点以来所打开的SQL游标。
本发明提供一种方法来在分布式事务内唯一建立和标识全局保存点。本发明还提供一种方法来让事务协调者(DBMS A)向分布式事务的所有参与者(DBMS B)标识自从最后一次请求以来在事务内所设置或回滚的保存点列表。最后,提供一种方法来让参与者在将请求返回给协调者时向协调者标识所设置、释放或回滚的所有保存点。
本发明是在网络环境中实施的。图1示出具有多个服务器531、533、535和537以及协调服务器521的网络。服务器通过网络530连接。协调服务器521向客户应用511提供连接性。客户应用通过试图做搜索数据库、插入数据、更新数据或删除数据之一来发起数据库访问。事务涉及协调者521和服务器531、533、535和537中的若干服务器上的数据和数据库管理系统。
本发明使用下面四项来管理跨越参与分布式事务的多个DBMS服务器的保存点。
第一,当使用网络连接时,创建、标识并管理DBMS服务器的保存点。这是采用包含保存点名称、创建保存点的服务器的名称以及用来唯一标识保存点的服务器保存点创建顺序号的SQL请求通过来自协调者的消息来完成的。在此所用的术语“保存点标识符”描述这三个值。
第二,典型地使用包括游标和锁定的SQL请求或查询将随后的消息从协调服务器传输到参与DBMS服务器,从而标识1.自从最后一次联系该服务器以来所回滚的保存点标识符(若有的话)。该消息还包括与回滚相关联的游标处置(打开或关闭)。
2.自从最后一次联系该服务器以来仍生效的任何新保存点的保存点标识符(若有的话)。
3.自从最后一次联系该服务器以来所释放的任何保存点的保存点标识符(若有的话)。
第三,将典型是来自应用程序的请求回复的消息从参与DBMS服务器回传到协调DBMS服务器,其中,典型是对SQL请求的回复,从而标识1.在该请求期间所回滚的保存点标识符(若有的话)以及在各回滚请求上指定的游标处置。
2.在该请求期间所建立的仍生效的任何新保存点的保存点标识符(若有的话)。
3.在该请求期间所释放的任何保存点的保存点标识符(若有的话)。
第四,每次将SQL结果集返回给请求者时,服务器将与游标相关联的顺序号传输到请求者,从而可以在该工作单元的保存点内正确定位结果集。
使用上述几项,涉及分布式事务的DBMS服务器可以采用最小附加网络消息来跨越涉及分布式事务的服务器对任何保存点活动进行通信,并且获得各SQL游标的正确游标状态。
SQL3标准已提出单个DBMS内的保存点的标准。若干商业DBMS产品(例如,Oracle和Sybase)目前支持这些非分布式保存点。然而,没有商业DBMS销售商将保存点操作扩展到涉及多个DBMS系统和/或服务器的分布式事务。
本发明将SQL3保存点概念扩展到跨越多个DBMS和服务器进行分布,从而在最小附加网络开销的情况下允许分布式事务的数据库互操作性。分布式保存点表示跨越涉及分布式事务的所有DBMS的事务在某特定时间点的数据和模式状态。保存点具有唯一名称,并且以下说作设置(名称为&lt;savepoint_name&gt;的)保存点。然后,可以通过恢复(回滚)至保存点来将数据和模式返回到它们在设置保存点的时候所存在的状态。
分布式保存点在设置之后可见于涉及事务的所有数据库管理系统。保存点的范围可以与事务内SQL语句的执行成线性关系。当保存点范围是线性的时,较新保存点可以替代相同名称的较旧保存点。例如,如果在DBMS A执行的事务设置保存点S然后调用回滚保存点S的DBMS B的存储过程,则必须将自从设置保存点S以来DBMS A和DBMS B上的所有返回数据和模式回滚至保存点S之前的状态。
当分布式事务中的一个服务器OPEN(打开)一个新游标时,该服务器产生新顺序号M来标识游标如何在分布式事务中的保存点序列内适配。M值通过下面公式来计算M=1+MAX其中,MAX是前一保存点号和前一打开顺序号的最大值,并且N是前一打开顺序号。M值必须传输到发出打开请求或接收存储过程结果集的任何SQL请求者。M值用来确定回滚至保存点请求应关闭哪些游标。例如,一个存储过程可能发出如下SQL语句序列OPEN C1(顺序号M=5)OPEN C2(顺序号M=6)SAVEPOINT XYZ(顺序号M=7)OPEN C3(顺序号M=8)在该SQL语句序列的情况下,ROLLBACK TO XYZ(顺序号7)将影响游标C3的状态(顺序号8),但不影响其它两个游标(因为它们的顺序号在7之前)。
当分布式事务中的一个服务器创建一个新保存点时,它必须将新保存点标识符加到活动保存点列表。保存点顺序号是其值为M+1的整数,其中,M等于MAX(前一保存点号、前一打开顺序号)。
在创建仍生效的新保存点之后,服务器在第一次访问时将新保存点标识符传输到创建保存点之后所访问的任何协调或参与服务器。
当分布式事务中的一个服务器回滚至保存点时,它将包含保存点标识符和游标处置的消息传送到自从创建保存点以来所访问的各协调或参与服务器。该消息可以紧接在回滚至保存点之后传送或者延迟到将下一SQL消息传输到服务器。立即发送消息还是延迟它可以由DBMS、操作系统或两者进行决策,并且典型地基于数据库并发性与网络性能之间的平衡。
服务器还关闭其顺序号大于保存点顺序号的各SQL游标(如果游标处置是关闭)。
当分布式事务中的一个服务器接收到表示已建立新保存点的消息时,服务器必须将新保存点标识符加到活动保存点列表。从在保存点标识符中提供的值获得保存点顺序号。然后,除将保存点标识符传送到该特定服务器的协调服务器之外,服务器将保存点标识符传输到创建保存点之后所访问的所有协调和参与服务器。该消息提供创建新游标和锁定及相关保存点所影响的所有保存点枚举。当回复时,将保存点标识符列表返回给协调者。
当分布式事务中的一个服务器接收到表示已发出回滚至保存点的消息时,服务器首先检查活动保存点列表,以验证该保存点存在。如果保存点有效,则服务器回滚至指定保存点。如果游标处置是关闭,则服务器关闭其顺序号大于保存点顺序号的各SQL游标和锁定。
除了将保存点标识符发送到该服务器的服务器之外,该服务器还必须将保存点标识符和游标处置传输到创建保存点之后所访问的各协调或参与服务器。这些消息可以立即发送,或者延迟到将下一消息传送到服务器。这是平衡网络负载和数据库并发性的问题。
当分布式事务中的一个服务器释放一个保存点时,该服务器首先验证该保存点列为活动保存点。如果该保存点存在,则服务器将包含保存点标识符的消息传送到自从创建保存点以来所访问的各参与或协调服务器。最后,服务器从活动保存点列表中删除该保存点。这些消息可以立即发送,或者延迟到将下一消息传送到服务器。
当分布式事务中的一个服务器接收到表示已释放保存点的消息时,服务器首先验证该保存点存在于活动保存点列表中。如果该保存点存在,则除了将保存点标识符发送到该服务器的服务器之外,该服务器将包含保存点标识符的消息传送到自从创建保存点以来所访问的各参与或协调服务器。这些消息可以立即发送,或者延迟到将下一消息传送到服务器。最后,该服务器从活动保存点列表中删除该保存点。
虽然本发明是关于关系数据库管理系统(RDBMS)来描述的,但是本发明的方法、系统和程序产品也适用于其它DBMS范例。
例子图2、3和4所示的例子1至3示出本发明的保存点方法、系统和程序产品的实际应用。
下面例子演示分布式保存点方法、系统和程序产品如何用来协调跨越DBMS服务器分布式网络的保存点操作。在这些例子中,存在三个DBMS服务器。
1.DBMS_A是分布式事务的“根”。它担当分布式事务的协调者。
2.DBMS_B从属于DBMS_A。DBMS_B是分布式事务的参与者,并且又调用一个参与DBMS服务器(DBMS_C)。DBMS_B是该参与服务器的协调者。
3.DBMS_C从属于DBMS_B。DBMS_C仅担当参与者,因为DBMS_C之下没有任何参与服务器。
在图2所示的例子1中,协调者发出所有保存点命令,并且参与者仅通过网络接收保存点请求。参与者响应协调者请求,但是不发出其自己的任何保存点请求。
在本例中,包含保存点ABC标识符的消息发出INSERT请求。DBMS_A将一行插入到本地表1。一条INSERT发向远端服务器DBMS_B2。该远端服务器执行INSERT并且响应3。DBMS_A设置SAVEPOINT ABC 4,并且将ABC加到活动保存点列表,但是不发送消息到DBMS_B(以避免网络开销)。当检测到DBMS_B的INSERT时,DBMS_A使用这一机会将带有保存点标识符的保存点请求传输到远端服务器。在该点,DBMS_B执行保存点操作,并且还执行INSERT操作6。返回表示操作成功的回复。
DBMS_A设置另一保存点DEF 7。将该信息加到活动保存点列表,但是不传输任何消息(以节省网络流量)。DBMS_A回滚至保存点ABC 8。这将取消保存点DEF。在本例中,在回滚时不发送网络消息,但是如果考虑锁定竞争,则一种实现可以在每次回滚时传输消息。
在下一次引用DBMS_B9时,随同INSERT语句一起传输回滚保存点的名称和创建者。注意,保存点DEF不传输到DBMS_B,因为回滚至ABC将从“新活动保存点”列表中删除DEF。DBMS_B执行所请求的回滚10(这将取消步骤5/6的INSERT操作),并且执行下一请求INSERT。返回表示成功完成的回复消息。
图3示出例子2。在该第二例子中,协调者和参与者都发出保存点命令。在本例中,DBMS_A将一行插入到本地表1。下一步,一条INSERT发向远端服务器DBMS_B2。该远端服务器执行INSERT并且响应3。DBMS_A设置SAVEPOINT ABC,并且将ABC加到活动保存点列表4,但是不发送消息到DBMS_B(以避免网络开销)。
当检测到调用DBMS_B的过程时,DBMS_A使用这一机会将保存点标识符传输到远端服务器5。DBMS_B执行保存点操作,并且还调用存储过程。存储过程插入一行,并且创建新保存点EEE。返回一条回复来表示操作成功,并且将保存点的创建报告给DBMS_A6。DBMS_A设置由DBMS B标识的保存点。DBMS_A回滚至保存点ABC。这将取消保存点EEE,但是尚不发送网络消息8。DBMS_A设置新保存点RRR9。这记录在活动保存点列表中以作以后使用。INSERT to DBMS_B使回滚和新保存点传输到DBMS_B10。DBMS_B执行所请求的保存点和插入操作11。
图4示出例子3。在该最后例子中,示出三个DBMS服务器之间的更复杂交互。在本例中,DBMS_A请求插入1。下一步,DBMS_A请求DBMS_B插入2,DBMS_B执行插入并且通知DBMS_A。下一步,DBMS_A发出SAVEPOINT ABC 4,以包含ABC保存点标识符和CALL请求的消息来调用DBMS_B 5。DBMS_B接收带ABC标识符的保存点标识符以及调用请求,并且将包含ABC保存点标识符、新保存点标识符XYZ和INSERT的消息发送到DBMS_C 7。DBMS_C设置保存点ABC和XYZ,执行INSERT,并且广播消息至DBMS_A 8。DBMS_A设置保存点XYZ8,并且回滚保存点ABC 9。然后,DBMS_A插入一个文件10,创建保存点QRS,并且以包含ABC回滚标识符、QRS保存点标识符和调用请求的消息调用DBMS_C。回滚保存点ABC、设置保存点QRS、调用并且在DBMS_C中插入的消息经过DBMS_B,并且将带有DBMS_A ABC回滚、DBMS_A QRS保存点和INSERT请求的新消息发送到DBMS_C。DBMS_C回滚ABC,设置保存点QRS,并且插入DBMS_C 14,并且发送消息到DBMS_A和DBMS_B。
虽然本发明是关于特定优选实施例和示例来描述的,但是本发明不限于此,而只由所附权利要求限定。
权利要求
1.一种在驻留于分离服务器上并且包括协调服务器的多个数据库管理系统上管理事务的方法,其中,单个事务包括跨越所述多个数据库管理系统中的若干参与者的多个步骤,所述方法包括a)在多步骤事务内跨越数据库管理系统参与者分配至少一个保存点;b)如果发现拒绝事务步骤的应用决策,则跨越数据库管理系统参与者回滚事务至保存点;以及c)当没有发现拒绝事务的应用决策时,跨越多个数据库管理系统参与者提交事务。
2.如权利要求1所述的方法,其中,提交事务将释放所有保存点。
3.如权利要求1所述的方法,还包括通过如下方法建立和管理保存点a)将保存点标识符分配给保存点;b)将标识保存点并且提供保存点信息的消息从协调服务器发送到事务的多个数据库管理系统参与者;c)数据库管理系统参与者将关于执行保存点并且提供保存点信息的消息发送到协调服务器;以及d)将结果集返回给请求者。
4.如权利要求3所述的方法,其中,将标识保存点并且提供保存点信息的消息从协调服务器发送到事务的多个数据库管理系统参与者的步骤包括在事务的开始将标识下列内容的消息从协调服务器发送到多个数据库系统参与者1)自从最后一次通知数据库服务器以来所回滚的保存点;2)仍生效的保存点;以及3)所释放的保存点。
5.如权利要求3所述的方法,其中,将关于保存点并且提供保存点信息的消息从回复多个数据库管理系统参与者发送到协调服务器的步骤包括在步骤回滚事务至保存点、释放保存点、完成请求或回复请求的时候将一条消息从多个数据库服务器参与者发送到协调服务器,所述方法包括标识1)该请求期间所回滚的保存点;2)仍生效的保存点;以及3)所释放的保存点。
6.如权利要求3所述的方法,其中,将SQL结果集返回给请求者的步骤还包括将与结果集的游标相关联的顺序号传输到请求者,从而可以在保存点内正确定位结果集。
7.一种分布式数据库管理系统,包括驻留在分离服务器上的多个分离数据库管理系统,并且包括协调服务器,所述分布式数据库管理系统被配置并控制为通过包括如下步骤的方法跨越所述多个数据库管理系统中的若干参与者来处理包括多个步骤的事务a)在多步骤事务内跨越数据库管理系统参与者分配至少一个保存点;以及b)如果发现拒绝多步骤事务的步骤的应用决策,则跨越数据库管理系统参与者回滚事务至保存点。
8.如权利要求7所述的分布式数据库管理系统,还被配置并控制为通过包括如下方法来建立和管理保存点a)将保存点标识符分配给保存点;b)将标识保存点并且提供保存点信息的消息从协调服务器发送到事务的多个数据库管理系统参与者;c)将关于执行保存点或完成事务步骤并且提供保存点信息的消息从多个数据库管理系统参与者发送到协调服务器;以及d)将事务结果集返回给请求者。
9.如权利要求8所述的分布式数据库管理系统,还被配置并控制为将标识保存点并且提供保存点信息的消息从协调服务器发送到多个数据库管理系统参与者的步骤、包括将标识下列内容的消息从协调服务器发送到多个数据库服务器参与者1)自从最后一次通知数据库服务器以来所回滚的保存点;2)仍生效的保存点;以及3)所释放的保存点。
10.如权利要求7所述的分布式数据库管理系统,其中,系统被配置并控制为通过在步骤回滚多步骤事务至保存点、释放保存点、或回复请求的时候将标识下列内容的消息从多个数据库服务器参与者发送到协调服务器来执行将关于保存点并且提供保存点信息的消息从多个数据库管理系统参与者发送到协调服务器的步骤1)该请求期间所回滚的保存点;2)仍生效的保存点;以及3)所释放的保存点。
11.如权利要求7所述的分布式数据库管理系统,其中,系统被配置并控制为通过将与结果集的游标相关联的顺序号传输到请求者来执行将SQL结果集返回给请求者的步骤,从而使结果集可以与保存点相关联,并且在保存点内正确定位。
12.一种程序产品,包括其上有计算机可读程序代码的存储介质,所述程序代码用于控制分布式数据库管理系统的操作以执行如权利要求1至6所述的方法的步骤,其中,分布式数据库管理系统包括驻留在分离服务器上的多个单独数据库管理系统,并且包括协调服务器。
全文摘要
在驻留于分离的参与服务器和协调服务器的多个数据库管理系统上管理事务的系统、方法和程序产品。单个事务跨越多个数据库管理系统中的若干参与者通过多个步骤进行。跨越数据库管理系统将保存点分配给参与者,其中,多步骤事务内至少有一个保存点。DBMS通过跨越数据库管理系统参与者回滚事务至保存点来响应回滚至保存点的应用请求。另外,还公开一种包含代码的程序产品,写入在介质上或者装载在RAM中或者两者中的所述代码控制分布式数据库管理系统的操作。
文档编号G06F11/14GK1507597SQ02809763
公开日2004年6月23日 申请日期2002年5月9日 优先权日2001年5月15日
发明者柯蒂斯·库特纳, 柯蒂斯 库特纳, 皮克尔, 詹姆斯·皮克尔, 瓦茨, 朱利恩·瓦茨 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1