数据处理系统内从失败的恢复的制作方法

文档序号:6375122阅读:139来源:国知局
专利名称:数据处理系统内从失败的恢复的制作方法
技术领域
本发明涉及数据处理系统中从失败的恢复,并且特别涉及计算机程序和数据处理系统内实现的恢复组件和方法。
背景技术
即使非常可靠的数据处理系统也可能易受存储失败的影响,如盘失败和故障或软件故障,它们导致主存储中数据的丢失或者损坏。为避免这样的失败导致数据的永久丢失,已知的是提供恢复能力,包括做存储的数据的备份拷贝并且做日志记录,该日志记录描述自最近的备份以来对存储的数据的更新。
若干通信管理器软件产品,包括IBM公司的MQSeriesTM和WebSphereTMMQ消息传递产品系列,提供工具用于在发送者和接收者之间传递消息期间,在数据仓库如消息队列或数据库表中存储消息。使用其它数据处理系统和计算机程序时,需要方案用于从潜在的系统或程序失败恢复,以避免关键消息的丢失,并且确保可以成功完成应用程序任务。
在队列管理器程序处理队列间的消息传递的消息排队系统中,已知队列管理器程序内的恢复工具在用于保存队列的消息的主存储失败时恢复队列和它的消息内容。恢复工具恢复消息到队列,使得队列的最终状态与存储失败时相同。恢复工具从队列的备份拷贝重新创建消息队列和它的内容的快照,然后参考队列管理器的日志记录重新应用变化到队列。在这样的已知方案中,在从队列恢复任何消息之前以及增加任何新消息到队列之前,队列管理器必须完成恢复处理。这确保恢复之后队列的状态与队列在失败时的状态相同,并且确保消息排序(sequencing)不因为失败丢失。
但是,使用这样的方案残留的问题是当恢复处理在进行中时,消息功能和消息仓库不可用。很多应用要求最佳的消息可用性,但是对消息传递系统具有竞争性的要求,以保证提供仅一次消息传递。如果允许应用在恢复处理期间访问队列,存在单个消息可能被应用处理两次的危险。使资金从他的账户计入借方两次以响应单个资金传递指令的银行客户将会很不满意。
2002年4月23日发给Carlson的美国专利No.6,377,959描述了交易处理系统,在两个完全相同的数据库中的任何一个失败或恢复期间,该系统继续处理进入交易。分配“活跃”状态给两个相同的数据库中的一个,以及另一个保持在“冗余”状态。所有进入查询只发送到活跃的数据库并且所有进入更新发送到活跃和冗余的数据库。当一个数据库失败时,分配活跃状态给另一个(如果还未激活),并且在失败的数据库修复和重启期间继续处理进入查询和更新。失败的数据库的修复和重启涉及使用通过活跃数据库的单一通过中的交织拷贝和更新操作。根据队列阈值方法执行进入更新的交织和复制操作,该队列阈值方法控制复制操作以响应进入交易更新的数目。交易处理系统在失败和恢复活动期间都保持可操作。因为维护完整的复制品,当数据库之一失败时只写日志记录,而当失败的数据库在修复中时,不需要访问那个数据库。虽然非常希望连续的可用性,但这个方案具有保持两个完整的数据库复制品的显著处理和存储开销,该数据库复制品具有两个数据库系统中的每个的操作状态(活跃或冗余)的可交换性。此外,复制一般不保护软件免于损坏,所以除了在某些情况的复制,将要求恢复操作。
美国专利申请公布No.2002/0049776(2002年4月25日为Aronoff等人出版)也涉及用于高可用性的复制的数据库。文档描述了如下方法通过在恢复目标数据库之后重启复制品并清除恢复期间已经应用到目标数据库的过时的交易,在失败后重新同步源和目标数据库。
2002年3月5日发给Wong.等人的美国专利No.6,353,834描述了一种替代方法,在该方法中,消息排队系统存储消息和关于消息的状态信息,它们在单个盘上的单个文件中聚集在一起。这个系统旨在通过避免写更新到三个不同的盘(数据盘、索引结构盘和日志盘)实现数据的高效写。队列入口映射表用于输入控制信息、消息块和日志记录。US 6,353,834涉及使用现有RAID技术和重复写数据,没有它们描述的系统不提供免于存储失败的保护,该存储失败导致保存在单个盘上的数据的丢失。

发明内容
本发明的各方面提供了方法、数据处理系统、恢复组件和计算机程序,用于从影响数据仓库的失败恢复,其中当数据仓库能够接收新的数据并允许这样的新数据的恢复时,至少执行恢复处理的一部分。失败可能是硬件失败或故障、或软件故障,它们导致主存储媒体上数据仓库中数据的丢失或损坏。
虽然新的数据项(即,失败后接收的那些)可以被接收到仓库中并在恢复处理期间从那里恢复,使对数据仓库的更新直到恢复处理完成才可访问,该更新在失败之前执行然后通过恢复处理恢复到仓库。恢复处理可以实现数据仓库的快速可用性,同时还确保恢复的仓库与仓库在失败时的状态一致。
在第一方面,本发明提供一种方法,用于从影响数据仓库的主拷贝的失败恢复数据仓库,该方法包括以下步骤维护数据的次拷贝,该次拷贝足以重新创建数据仓库的主拷贝和其上保存的数据项;从次拷贝重新创建数据仓库的主拷贝,以响应影响数据仓库的主拷贝的失败;以及使用恢复过程以在恢复的工作的单元内从次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
根据本发明的优选实施例,消息系统的正常转发处理期间对消息仓库的更新包括消息发送操作,它增加消息到仓库;以及消息检索操作,它删除消息。在这个环境中‘消息仓库’可以是消息队列、数据库表或任何其它保存消息或消息队列的数据结构。影响消息仓库的失败之后,重新创建空状态的消息仓库,然后最好通过参考仓库的备份拷贝和日志记录,重新应用发送和检索操作到仓库。作为预备的恢复步骤重新创建消息仓库,并且消息传递功能能够在恢复完成之前传递新消息到消息仓库和从消息仓库传递新消息。作为恢复的工作的单元的未提交操作,处理对消息仓库的更新,并且只有在恢复的工作的单元完成时提交(即,执行一致性检查,并且使更新为最终的并且对其它程序是可以访问的),该更新涉及从备份存储和日志记录的重新应用操作。恢复的工作的单元包括要求的操作的集合(跟随消息仓库的重新创建)以恢复消息仓库的内容到与仓库在失败时的状态一致的状态。消息仓库一重新创建就对新消息的接收可用,而在恢复的工作的单元内恢复到队列的任何消息可以从仓库由目标应用程序检索,直到恢复的工作的单元完成。
本发明对这样的应用有用其中以与增加数据项到数据仓库相同的顺序处理数据项不是必需的。在第一个例子应用中,每个数据项或消息是对特定任务的性能的请求。如果执行任务的顺序无关紧要,那么新的请求可以在仓库上接收并处理,而不等待所有先前的请求被恢复。
本发明的一个实施例提供一种数据通信系统,用于在发送者和接收者之间传递消息,其中消息在消息发送操作之后保存在消息仓库中,随后从仓库检索用于传递给接收者。仓库的备份拷贝被创建,并且周期性地或响应预先定义的事件来更新更新以,并写日志记录以记录消息发送和消息检索事件,包括对消息的事务处理状态的更新的消息发送和消息恢复事件,包括从最近的备份操作以来发生的事件。该系统包括恢复组件,其适合控制数据通信系统以执行下面的步骤作为对影响消息仓库的主拷贝的存储失败的响应,重新创建数据仓库的主拷贝,并通过参考仓库的备份拷贝和日志记录恢复数据项到主拷贝。在失败之前,备份拷贝和日志记录在正常的转发处理期间创建。配置系统使新的消息能够增加到仓库并从其检索而不等待恢复处理的完成。使通过参考备份拷贝和日志记录恢复到仓库的消息和应用到仓库的更新对检索者不可访问,直到对应于失败前执行的发送和检索操作的所有消息仓库更新已经重新应用到消息仓库。‘新消息’在这个环境中是失败后第一次增加到仓库中的消息。失败前增加到队列然后失败后恢复到队列的消息在下面称为‘旧消息’。
很多已知的通信方案的更进一步的问题是当正在执行恢复处理时,数据在仓库中累积的倾向-可能导致仓库中(或仓库内的结构)达到‘满’状态。结果可能是一些数据通信返回到发送者或在中间的网络位置累积,除非执行有效的额外处理来阻止。由上述方案产生的改善的可用性有助于解决这个问题,但是可以实现额外的改善。
本发明的进一步实施例提供方法、数据处理系统、计算机程序和恢复组件,用于执行从影响数据仓库的存储失败恢复的方法,用于这样的系统中在正常的转发处理中应用到仓库的数据更新在事务处理的工作的单元内应用。影响数据仓库的主拷贝的存储失败之后,恢复数据项到数据仓库的主拷贝要求的操作参考次存储识别,但是被推迟到对每个识别的操作已经确定相应的最初的工作的单元失败时的状态。然后适当地根据最初的工作的单元的确定的状态执行或放弃恢复操作。
此外,如果对消息仓库的一对更新对应于消息的增加和相同消息的检索,并且在失败前完成消息对的更新,可以在恢复处理内一起执行操作对,而没有使仓库处于不一致状态的危险。在本发明的优选实施例中,当重放日志记录时识别这样的‘增加-检索’操作对。操作对不是从恢复处理省略(即,认为已经作为对被执行,因为它们对队列的影响互相抵消),就是执行操作对并在恢复的工作的单元范围之外提交。这些选择中的每个避免不必要的处理并减少消息的潜在的累积。
本发明的优选实施例使能够从共享队列消息传递系统中的主存储失败恢复,包括从队列的备份拷贝和日志记录恢复旧消息(来自队列失败前的消息)到共享队列。共享队列可以由一个或更多处理新消息(失败后发送到队列的消息)的应用程序使用,同时旧消息仓库更新从日志记录恢复。可以执行这个消息恢复,同时也通过作为单个工作的单元处理整个恢复处理,保证提供消息的只一次传递。
通过在恢复消息到队列期间使消息能够增加到队列或从队列检索,本发明可以实现存储失败之后消息传递功能的改善的可用性。
本发明的更进一步的方面提供一种数据通信系统,包括数据存储,用于存储数据仓库的主拷贝;第二数据存储,用于存储表示数据仓库的数据的次拷贝,该次数据足以重新创建数据仓库的主拷贝和其上保存的数据;恢复组件,用于控制数据通信系统的操作,以从影响数据仓库的主拷贝的存储失败恢复,其中恢复组件能操作于控制数据通信系统以执行以下步骤从次数据拷贝重新创建数据仓库的主拷贝;以及使用恢复过程以恢复数据项到主拷贝,其中在恢复的工作的单元内执行恢复步骤,并且其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项,并且使除了恢复组件的组件能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
如上所述的方法和恢复组件可以在计算机程序内实现,用于控制程序代码在其上执行的数据处理装置的性能。可以使程序代码作为包含记录在记录媒体上的程序代码的程序产品商用,或者可以使之通过如因特网的网络下载而可用。


下面通过例子,参考附图详细描述本发明的实施例,在附图中图1显示消息通信网络,在该网络中在到目标应用程序的路由上消息在队列间传递。
图2是具有对耦合工具列表结构内队列的共享访问的队列管理器的集合的表示;图3显示根据本发明的实施例的恢复方法的步骤的序列;以及图4显示根据本发明的实施例的恢复的工作的单元的步骤的序列。
具体实施例方式
下面在异步消息通信系统的环境中描述本发明的第一个实施例,在该系统中,在发送消息的发送者程序和检索(retrieve)消息的检索程序的步骤之间,消息在消息仓库(message repository)中排队。主存储的失败可能引起消息数据的丢失或损坏,除非恢复特征可用以重新创建队列并恢复消息到队列。虽然可应用到其它数据仓库,但本发明特别可应用到消息队列,因为这样的队列通常包含分离的、独立的项目(消息),其被增加,然后被删除,而非消息被增加,更新其内容,然后最终被删除。
如本领域的技术人员将会清楚的,某些本发明的实施例同样可应用在数据库环境中,在该环境中,失败可能引起数据库表内数据的丢失或损坏,因此有必要重新创建数据库表并恢复数据项到表中。本发明的各实施例也可应用在其它数据处理环境中,在该环境中,硬件或软件失败使数据仓库例如从备份存储和日志记录恢复成为必要,并且当执行恢复处理时,需要最小化数据仓库的可用性的损失。
主存储媒体上数据的丢失或者损坏可产生于硬件失败或故障、软件故障或者甚至人为错误(如意外删除队列和所有它的消息)。为易于参考,以下所有这些影响数据仓库的不同类型的失败将被称为‘存储失败’。丢失或损坏可能只影响单个队列,或数据库表,或文件,或者失败可能影响多于一个队列(或表等),如单个耦合工具列表结构(见下面CF列表结构的说明)内保存的多个队列。在典型的情况下,影响CF列表结构的失败将影响CF列表结构上的所有队列,而不是单个队列。
消息环境
IBM公司的MQSeriesTM和WebSphereTMMQ消息产品系列是使用消息排队以支持应用程序间的互操作的已知产品的例子,其可以在分布的异类环境中的不同系统上运行。
消息排队和商用消息排队产品在B.Blakeley,H.Harris&R.Lewis,“Messaging and Queuing Using the MQI”,McGraw-Hill,1994,以及下面的可以从IBM公司得到的出版物“An Introduction to Messaging and Queuing”(IBM Document number GC33-0805-00)和“MQSeries-Message QueueInterface Technical Reference”(IBM Document number SC33-0850-01)中描述。计算机使用消息排队通信的网络可以是因特网、内联网或任何计算机网络。MQSeries和WebSphere是IBM公司的商标。
如在事务处理系统中公知的,‘工作的单元’是这样的处理操作的集合,该处理操作必须一起成功地执行,或者如果不能完成操作的完整集合就全部退回,从而确保不丢失数据完整性。工作的单元内所有操作对可能依赖更新的其它过程保持不可访问,直到整个工作的单元的决定(resolution)允许提交所有更新(所有最终确定并使可访问)。
IBM公司的MQSeries和WebSphere MQ消息产品提供事务处理消息支持,根据消息协议在逻辑的工作的单元内同步消息,即使在系统或通信失败的情形,该消息协议也给出保证只一次消息传递。这个保证的传递通过下述实现不最终从发送者系统上的存储删除消息,直到确认消息为由接收者系统安全存储,并且使用复杂精致(sophisticated)的恢复工具。确认成功存储时提交消息的传递之前,从发送者系统的存储删除消息以及插入到接收者系统的存储都标记为未提交(‘传递中(in-flight)’或‘被质疑(in-doubt)’)操作,并且如果失败可以自动退回。这个消息传输协议和相关联的事务处理概念和恢复工具在国际专利申请公开No.WO 95/10805和美国专利No.5,465,328中描述。
IBM的MQSeries和WebSphere MQ产品的程序间通信工具使每个应用程序能够发送消息给任何其它目标应用程序的输入队列,并且每个目标应用可以异步地从它的输入队列取这些消息用于处理。这实现了应用程序间的消息传递,这些应用程序可以分散于分布式异类计算机网络,而不要求应用程序间专用的逻辑的端到端连接。
用于OS/390队列管理器软件的IBM公司的MQSeries的最近版本使用OS/390耦合工具(CF)列表结构作为用于共享队列的主存储,为共享队列提供支持。共享队列上的消息作为CF列表结构中的表项存储。然后,运行在并行sysplex中任何地方的相同队列共享组中的多个队列管理器上的应用,可以访问这些共享队列消息,其中以分配的主键的顺序访问消息。从耦合工具的角度看,队列管理器任意决定主键的分配并且使之与每个消息相关联。队列管理器为每个消息设置键,使得总的顺序是用于检索的正确的顺序(应用具有例外的FIFO排序,如下述)。
因为由下一个可用的应用检索消息,通过冗余(对影响组内一个或更多队列管理器的失败的容错)和自动负载均衡,这样的对特定队列的共享访问具有高可用性的好处。这提供了适合高消息吞吐量的高度可扩展的架构。
本实施例可应用于上述系统架构-并且确实是有益的,因为很多在这个环境中运行的应用要求高的可用性-但是本发明的实施例也可应用在使用替代存储结构的地方。在下文中,使用术语消息仓库指可以保存消息的消息队列和其它数据结构,不管是以CF列表结构、数据库表还是其它已知结构实现。
如上面指出,OS/390操作系统环境中的消息排队系统可以为共享队列提供支持,可使其通过CF列表结构对队列管理器的队列共享组可用。在下面的待审和共同转让的专利申请的说明书中描述可应用到这样的系统的系统组件、数据结构和方法,包括适合在这样的系统内使用的若干恢复特征,每个专利申请通过引用在这里包含●美国专利申请No.09/605589(对应于英国专利申请No.0009989.5-代理参考GB920000031),●美国专利申请No.09/912279(代理参考GB920000032),●美国专利申请No.10/228615(对应于英国专利申请No.0207969.7-代理参考GB920010101),●美国专利申请No.10/228636(对应于英国专利申请No.0207967.1-代理参考GB920020001)以及●美国专利申请No.10/256093(对应于英国专利申请No.0208143.8-代理参考GB920020015)。
下面描述的本发明的实施例与上面列出的包含的参考文献中描述的恢复特征兼容。
在下面的待审、共同转让的专利申请的说明书中描述方法和装置,用于实现列表结构内的消息队列和处理列表结构,以及用于区分使用不同键的操作状态的方案,每个专利申请通过引用在这里包含2000年10月2日提交的名称为“Method and Apparatus for Processing a List Structure(用于处理列表结构的方法和装置)”的美国专利申请No.09/677,339(代理参考POU920000043);以及2000年10月2日提交的名称为“Method and Apparatusfor Implementing a Shared Message Queue Using a List Structure(用于使用列表结构实现共享消息队列的方法和装置)”的美国专利申请No.09/677,341(代理参考POU920000042)。
图1示意性地显示消息传递网络10,其中在队列管理器程序30的控制下,在计算机80的分布式网络中,消息在队列20间传递。发送者应用程序40将消息放到它们的本地队列,并且目标应用程序50从它们的输入队列检索消息,并且由队列管理器30处理跨越网络传递消息到目标应用程序的输入队列的所有工作。每个队列管理器维护它的本地队列的备份拷贝60,并且写日志记录70以反映更新,不管增加还是删除消息,或改变它们的状态。
图2显示一组队列管理器30,它们已经共享对保存在耦合工具(CF)列表结构110中的队列100的访问。CF列表结构用于在两个方向-去往队列共享组和来自队列共享组-对消息排队。除了共享队列的主拷贝,盘120上保存次备份拷贝60。队列的备份拷贝周期性地保存到盘上,该备份拷贝包含队列定义信息和有关备份时保存在队列上的所有消息的信息。为对CF列表结构内的队列的每个更新,写日志记录70到盘120。反映从最后备份以来的所有更新的备份拷贝和日志记录的结合,使能够重新创建队列的主拷贝以响应媒体失败。
日志记录包含执行的操作(插入、删除或更新状态)的指示和用于有关消息的唯一键,该键在增加消息到CF时产生。日志记录也包含消息的完整内容用于插入操作(以及用于某些实现中的更新操作)。用于删除操作的日志记录不包含数据库记录的内容。在某些实现中,只有跟踪变化需要的信息对更新操作记入日志。
具有改善的可用性的恢复某些计算机系统和应用可以容忍对数据仓库的“不按顺序”更新。即,即使仓库中更新的顺序不准确反映更新增加的顺序,系统也正确工作。对某些系统和应用这是真实的,当处理应用程序间的消息传递时,该系统和应用使用消息队列管理器从队列传递消息或传递消息到队列。
本发明的发明人已经认识到失败之后,在完成队列上数据的恢复之前,通过使新消息能够增加到队列或从队列检索,这样的系统和应用可以从改善的可用性受益。但是,在可实现这个之前,必须克服若干问题。
如果与通过重放日志记录恢复旧消息到队列的同时,使应用能够访问新创建的队列,那么存在相同的消息可能由应用处理两次的危险。例如,可以增加消息到队列,提交增加操作,然后从队列检索消息。在大多数情况下,当提交检索操作时,从队列删除消息。然后如果发生队列存储失败,可以从备份存储重新创建队列,接下来从日志记录重新应用更新到队列。日志重放期间,当重放增加操作的提交时,消息恢复到队列并且对检索者应用变为可用,然后当重放消息检索操作时消失。但是,如果应用程序在恢复期间能够访问队列,消息一变为可用(即,重放消息检索日志记录之前),应用程序就可检索它,并且处理从前已经处理的消息。
上面的事件的序列和其它例子可能导致从保证只一次消息传递的不可接受的偏离。
下面描述这个问题的方案,它可以通过恢复消息到共享队列从主存储失败恢复,同时共享队列由正在处理新消息的应用使用,而不从保证消息的只一次传递偏离。在这个环境中‘新消息’是失败后第一次增加到队列的消息。‘旧消息’是那些失败前增加到队列并且失败后恢复到队列的那些消息。
恢复的工作的单元内的恢复处理在本实施例中,作为恢复的工作的单元执行恢复过程。即,在新定义的工作的单元的范围内执行和提交这样的步骤的序列恢复消息到队列,以及从备份存储和通过重放日志更新队列上消息的状态。
例如,执行这样的动作重放失同步点(out-of-syncpoint)消息‘放’操作(增加消息到队列)或‘取’操作(从队列检索消息),或者重放同步点(in-syncpoint)放或取的提交,作为在恢复的工作的单元内同步点放和取。工作的恢复单元覆盖了恢复消息到队列和重放改变那些消息的状态的操作的整个过程。
工作的单元是这样的操作的集合如果由操作的集合影响的数据在执行该操作的集合结束时处于一致状态,就必须一起执行这些操作(或者根本不执行)。同步点是处理中可识别的点,在该点数据处于一致状态,并且在每个工作的单元结束时记录同步点以记录这个一致点。参考记录的同步点使得能够确定为返回数据一致的点,在时间上使处理回滚多远。单个事务处理可以包括作为单独的工作的单元处理的若干放消息(Put_Message)和取消息(Get_Message)操作。当提交事务处理时,最终确定工作的单元内所有放和取操作,使得到队列上的消息放(Put)作为可检索的消息出现,并且最终删除对其已经执行取操作的消息。但是,在一些事务处理系统中,可以使某些放消息和取消息操作立即生效,而不等待事务处理的最终解决-这些称为“失同步点”放和取操作。
如前面指出的,失败可以影响单个队列或多个队列(例如特定CF列表结构中的所有队列)。如果必须恢复多个队列,希望对恢复过程的单次调用,发起所有受影响的队列的恢复。通过重新创建受影响队列的集合,然后执行单个的工作的恢复单元,可以实现改善的处理效率,该工作的恢复单元包含消息的恢复和用于受影响队列的整个集合的消息更新。
恢复过程可以访问并使用无论什么日志,或者日志包含有关对正在恢复的队列或多个队列的改变的信息。在共享队列环境中,可能的是每个队列管理器将维护它自己的物理上独立的日志,并且每个日志可以包含文件的集合。恢复过程可以并行地读取所有日志,逻辑上构造单一的合并日志。单一的合并日志(它一般不作为单个物理文件存在)包含对正在恢复的队列或多个队列的所有改变,以及对其它未受失败影响的队列的改变。恢复过程忽略对当前恢复处理未要求的队列的改变。
下面参考图3详细描述恢复处理操作的特定序列。为易于参考,下面的恢复处理的描述说明了恢复单个队列的例子。
该方法的第一个步骤200是存储失败的识别。在很多情况下,通过(例如,可以是不可访问的)硬件或操作系统或其它运行时环境,如Java虚拟机(当企图访问时,它可以返回错误指示),将使使用数据仓库的软件知道数据已经丢失或损坏。在优选实施例中,当软件知道问题时,使用数据仓库的软件自动发起200恢复处理。特别地,正在使用失败的队列或多个队列的队列管理器程序通过启动恢复过程响应错误状况的特定集合,该恢复过程是队列管理器的组件。
在替代实施例中,可以写软件以提供适合的错误通知以响应失败-提示人的介入来手工发起恢复处理。另外,如果由于意外的或恶意的数据删除发生存储失败,通常要求操作者行动以发起恢复。
当发起以响应失败的识别时,恢复过程访问次存储并且检索210相应于失败队列的队列定义的备份拷贝,并且使用检索的定义在主存储内重新创建210队列的空拷贝。
在优选实施例中,队列的定义(或其它数据仓库)与队列的内容分开保存在备份次存储中。作为独立于队列内容的快照的备份的步骤,队列定义的备份是有益的,因为它帮助恢复内容之前作为单独步骤的重新创建处于空状态的队列。队列从它的定义在主存储中一重新创建,就可以使队列为新消息的接收可用。
在传统的恢复方案中,从重新创建仓库时直到恢复处理完成时,在新重新创建的数据仓库上加锁,并且锁被认为是必要的以阻止消息的复制。在本实施例中不需要这样的锁,所以数据仓库一重新创建,数据仓库(即,队列或数据库表,但不是工作的恢复单元内的任何更新)就对用于应用可用。
已经重新创建队列(处于空状态)后,然后启动230工作的恢复单元用于恢复消息和消息更新到队列。除了用于重新创建处于空状态队列的要求的队列定义,次存储包含队列内容的备份拷贝,该内容对应于进行备份时队列上消息的快照。使用复制操作以及标记每个消息以指示它们是未提交的工作的恢复单元的一部分的步骤,恢复240备份拷贝内的消息到有关队列的主拷贝。这个标记使它们对应用不可访问,该应用可以另外从队列检索恢复的消息。
在优选实施例中,通过分配工作的单元ID和独特的主键给每个消息实现消息的标记,键的一个字节的值指示消息的状态。然后队列管理器可解释主键的字节值以确定消息是否可以由应用程序检索。在这个阶段(直到在工作的恢复单元提交时改变字节值)应用程序不能访问未提交的工作的恢复单元内的任何消息更新。下面在‘独特的键’的标题下进一步详细描述这个。如果放弃恢复处理(如,如果队列管理器在恢复处理中中途失败),工作的单元ID是有用的,因为它使工作的恢复单元内执行的所有操作能够容易删除。已知IBM公司的MQSeries队列管理器程序具有对等恢复能力,这使它们能够在这样的情况下接管队列恢复处理。
当恢复处理进行时,恢复队列管理器也产生所有消息的列表,在工作的恢复单元内对该消息执行操作。稍后在提交处理期间使用这个列表。
然后重放250备份拷贝时和存储失败时之间写的日志记录,以提供关于所有更新的信息给队列,该更新已经作为失败的结果丢失。每个日志记录对应于消息增加操作(如放消息操作)、消息删除操作(如破坏性的取消息操作)或状态更新(如提交或退回)。当重放每个日志记录时,由相应的操作更新队列,并且使用工作的恢复单元的工作的单元ID并通过分配主键标记消息,该主键包括字节值的‘in-recovery(内恢复)’范围内的字节值-如上所述。这继续直到日志记录中对应于失败的时间的点。
当恢复处理到达日志记录中对应于存储失败的时间的点时,消息仓库已经恢复到它在失败时的状态-在独立于恢复过程增加和检索的消息的状况。
在这点,由提交260工作的恢复单元完成恢复处理。取同步点以记录队列数据的一致状态,并且所有消息对应用变为可用。特别地,提交工作的单元包括通过参考用于工作的恢复单元的恢复操作执行期间增加、删除或更新的消息的列表识别所有有关的更新;然后对列表中的每个消息,更新独特的主键内的状态指示字节值到表示消息的新状态的值。改变高阶字节值移动提交的消息到队列中的新位置,因为键值指示希望的消息检索顺序以及指示消息状态。
如果恢复‘旧’消息和消息更新到队列的步骤失败,单独执行的队列的重新创建应该为‘新’消息能够连续使用队列,同时重试恢复处理的恢复步骤。这样,执行第一个重新创建步骤以及随后通过参考日志记录重新应用更新的操作的序列不仅使队列在较早阶段对新消息可用,而且使队列重新创建和新消息处理避免任何影响恢复处理的问题。这些特征的结合可以导致对消息传递功能的可用性的重大改善,以及避免为响应‘队列满’状况要求的异常处理。
从这点向前,假定恢复成功,正常的消息处理操作可以对队列上的所有消息继续。当正在使用恢复的队列的队列管理器接下来检查消息的状态指示字节值时,消息的新状态将确定它是否能检索。
工作的恢复单元内的同步点取操作与传统应用取操作的不同在于新的取操作指定操作要检索哪个消息,以便以正确的顺序从日志重放操作。传统的取操作通常检索第一个可用的消息,但是恢复处理期间这样的方法可能导致失败时的队列和恢复的队列之间的不一致,因为恢复处理期间由取操作检索的消息可能不同于由最初的取操作检索的。因此,虽然某些应用它们自己不要求消息以与放置消息到队列上相同的顺序处理,不过从日志记录重放的消息更新以这样的方式应用确保与失败之前执行的操作序列一致。
用于指定要由取消息操作检索的特定消息的适合技术在本领域已知,所以这里不详细描述。一个示例实现是对取消息操作使用唯一的键(对sysplex内的所有消息唯一),该键当消息增加到共享队列时分配给每个消息。
恢复操作的延迟在本发明的实施例中,当处理日志时,恢复不立即重放同步点取和放操作。而是如图4中所示,缓存251取和放操作,直到日志的重放使能够确定相应工作的单元的状态。重放日志并且识别与正在恢复的消息队列或多个队列有关的操作。复制识别的日志记录到高速缓存。当恢复处理到达日志记录中对应于失败时的点时,分析252缓存的日志记录,以确定每个相应的(最初的)工作的单元的失败时的状态。
当执行确定252时,采取下面的行动之一1.如果提交了工作的单元,作为恢复处理的一部分执行256放和取(如上所述);2.如果工作的单元在恢复的工作的单元结束时仍然被质疑,恢复处理执行放或取,但是作为被质疑257并且作为最初的工作的单元的一部分另外标记操作-如由协调同步点管理器最终决定工作的单元所要求的;以及3.对所有其余情况(退回、放弃或假定放弃),放弃255缓存的取和放操作。
然后如前面所述,提交工作的恢复单元。
上面描述的恢复处理方法使恢复过程能够在使用新重新创建的队列的同时运行,并且不牺牲保证消息的只一次传递。
成对更新的优化处理本发明的发明人认识到工作的恢复单元内提交的取操作的同步点重放必定在相同的工作的恢复单元内取得到队列的消息放(Put)。重放可以包括取消息操作的重放,接下来是用于最初工作的单元的提交的重放。可以删除特定的消息以响应提交的取消息操作,而不等待恢复过程结束时恢复的工作的单元的提交。在本实施例中,识别253恢复的工作的单元内的放和取对,并且从高速缓存删除254相应的缓存的日志记录,而不需要更新队列,然后删除更新。实施例的这个特征补充上面提到的‘缓存直到决定’特征,以避免不必要的处理并且允许恢复队列管理器减少队列上消息的累积。这潜在地避免了不必要的队列或仓库‘满’情况。
独特的键已知现有队列管理器的共享队列支持机制内使用独特的主键区分耦合工具(CF)中的处于不同状态的消息。通常,状态是被提交、传递中和被质疑。例如,在共同转让待审美国专利申请No.09/677,339和09/677,341的说明书中描述这样使用独特的键以区分状态,这些申请通过参考在这里包含。
本实施例对恢复的工作的单元内传递中的消息使用独特的主键值。‘传递中’是作出提交或退回的请求之前(或在两阶段提交的情况下,‘准备提交’指令之前)事务处理的状态。如果当事务处理在传递中时存在失败,消息状态被解析为退回。作为‘假定放弃’方法这是公知的。‘被质疑’是应用到事务处理的两阶段提交的状态,该事务处理涉及外部事务处理协调者。协调者发出用于事务处理的‘预备’请求给每个感兴趣的资源管理器。完成预备步骤之后,事务处理不再处于‘传递中’,而是被称为处于‘被质疑’。执行从被质疑的决定来提交或放弃,以响应随后的来自事务处理协调者的调用。对于由传递中的事务处理执行的取和放操作可能已经写或没写日志记录。
通过对主键内的一个字节使用不同的取值范围实现主键的独特性。例如,如果提交消息,放列表(即,表示已经放到队列的消息的列表)上消息的主键的第一个字节包含X‘00’到X‘09’范围内的值,而如果未提交消息,就包含X‘F4’到X‘F6’范围内的值。值的状态指示范围内字节值的特定分配仅仅依照范围内值的顺序以实现FIFO排序。其它用于分配独特的键的方案同样是可能的。
当应用程序发出取消息调用时,检查队列中消息的主键值并与键范围的列表比较,以确定消息的状态。由主键值反映的消息的状态确定是否应用可以检索消息,但是键值也确定队列中消息的排序,这样不可能检索的消息具有对应于队列的后端的键值。这意味着无论何时可检索的消息在队列中可用,简单数字排序避免了不可检索的消息。
以这种方式使用独特的键允许队列管理器选择性地访问处于特定状态的消息,并且允许其它功能的简单实现,如根据队列中提交的消息的数目触发。通过在键的高阶字节中设置特殊值,在列表的后端放置已经增加(放)到队列但还未提交的消息,这使它们在列管理器正在为应用执行取消息操作时易于忽略。
不同的高阶字节值可以用于区分调用放消息操作之后的消息的若干不同状态。例如,字节值的第一个范围可以指示这样的消息,对该消息已经执行放以及两阶段提交的第一个‘预备’阶段,但是还未提交放;而值的第二个范围指示这样的消息,对该消息,放之后还未执行提交的预备阶段。
在本实施例中定义两个新的操作状态,对每个操作和消息具有相应的不同的键-每个键的一个字节包含值范围内的识别状态的不同值。新状态只可应用到放置在消息仓库(在这种情况下,CF共享的队列)中的消息作为恢复过程的一部分。一个状态对应于最初的工作的单元(正在重放UoW)和恢复的工作的单元内的未提交,并且第二个状态对应于最初的工作的单元内的提交但是在恢复的工作的单元内的还未提交。
这些新的消息状态和独特的键值提供下面的好处●通过在CF上使用独特的键存储消息,可以重放同步点放操作。独特的键阻止消息由队列上执行动作的其它过程处理,并且阻止消息被包括在其它之中的队列深度计算中。这意味着恢复过程不需要在存储器中缓存这些放操作-这显著减小了恢复过程的代码复杂性和存储占用。
●通过设置不同于正常的失同步点活动的键值,可以重放失同步点放操作和同步点放操作的提交。这意味着通过更新主键值(用来自对应于不同状态的第二个范围的值代替值的第一个范围中的值),可以执行恢复的工作的单元的提交而不要求恢复的工作的单元的存储器中或CF管理结构模型。在典型替代实现中需要这样的结构。
根据这个公开,本领域的技术人员将会清楚描述的特定实施例的各种变形可以实现本发明的优点并且处于如在权利要求中提出的本发明的范围内。
例如,上面的优选实施例的描述涉及重新创建数据仓库和恢复数据到仓库。本领域的技术人员将会清楚本发明范围内的某些方案涉及在失败时恢复数据仓库中的所有数据。其它方案只要求某些种类数据的恢复-如只恢复持久消息并排除非持久消息。在后者中,可能不为非持久消息如只有信息的数据广播写日志记录。例如,如果下一个消息将很快可用,包含周期性更新的天气预报或股票价格的消息可能不需要恢复,而指示航班预定取消或股票销售的消息必须可恢复以使能够保证只一次传递。
第二,虽然上面的描述指出通过恢复数据项到单个恢复的工作的单元范围内的多个队列,可实现处理效率,但替代实现将恢复它自己的单独的工作的单元内的每个队列。这将减小恢复处理期间某些类型失败的影响。
第三,上面的描述涉及特定的方法,用于标记消息以使它们对应用程序检索不可用,直到提交恢复的工作的单元。其它机制也是可能的,该机制用于控制恢复的消息的不可用性,同时避免在整个恢复周期锁住仓库。一个这样的例子是设置工作的单元标识符和为每个消息设置被质疑标志,其与独特的主键是分离的。
上面本发明的优选实施例的描述使用队列定义和队列内容的独立保存的备份拷贝。替代实施例在单个次拷贝中备份时维护定义数据仓库的信息和数据仓库的内容。但是,恢复处理可以从次(备份)存储检索存储的数据,并且按顺序处理那个数据以使仓库能够快速重新创建并使它对新数据项可用,接下来是恢复仓库内容的单独的步骤。
本发明的进一步实施例可应用到数据库方案。在数据库表中,可以将新的行插入表中并在恢复旧的行(它们在失败前装载了数据)之前处理。恢复期间,应用将视表为只包含新的行,直到如恢复完成时。
优选实施例的上面的描述公开了一种恢复方法和装置,其包含(i)为快速可用在空状态中重新创建数据仓库,然后作为恢复的工作的单元处理恢复操作;(ii)为有效的恢复处理,依赖于相应的最初的工作的单元的确定的状态执行恢复操作;(iii)为有效的处理优化处理成对的更新,并且避免数据仓库中的累积;以及(iv)使用独特的主键以指示特定的数据项的恢复中状态和对数据项的更新。虽然特征(i)到(iv)是互补的,但对这些特征(i)到(iv)中任何一个的操作,所有特征(i)到(iv)一起实现并不必要,如本领域的技术人员清楚的。
权利要求
1.一种方法,用于从影响数据仓库的主拷贝的失败恢复数据仓库,该方法包括以下步骤维护数据的次拷贝,该次拷贝足以恢复数据仓库的主拷贝和其上保存的数据项;从次拷贝重新创建数据仓库的主拷贝,以响应影响数据仓库的主拷贝的失败;以及使用恢复过程以在恢复的工作的单元内从次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
2.根据权利要求1所述的方法,其中维护次数据拷贝包含存储数据仓库的备份拷贝和存储日志记录,该日志记录描述从存储备份拷贝以来执行的对主拷贝的更新;其中重新创建数据仓库的主拷贝包括步骤从备份拷贝复制数据仓库定义并应用定义以重新创建主拷贝;并且其中恢复数据项到主拷贝包含从备份拷贝复制数据项并且重放日志记录以识别和重新应用对主拷贝的更新。
3.根据权利要求1所述的方法,其中维护次数据拷贝包括存储描述对主拷贝的更新的日志记录,并且其中恢复仓库的主拷贝的步骤包括步骤在数据仓库的主拷贝内重放数据项上执行的操作的日志记录,缓存日志记录,该日志记录与同步点控制下、在最初的工作的单元内执行的操作有关,从缓存的日志记录确定失败时最初的工作的单元的状态,以及根据最初的工作的单元的确定的状态,确定在恢复的工作的单元内执行所述同步点控制操作的哪个。
4.根据权利要求3所述的方法,包括根据下面的过程在恢复的工作的单元内执行操作如果失败前提交最初的工作的单元,就执行提交的工作的单元的有关操作;如果当失败发生时最初的工作的单元被质疑,就执行被质疑的工作的单元的有关操作,但是标记被质疑的操作;以及如果最初的工作的单元既未被提交,也未被质疑,就放弃缓存的操作。
5.根据权利要求3所述的方法,包括从恢复的工作的单元放弃任何增加和删除操作对,该操作对包含增加数据项到数据仓库的主拷贝,以及从数据仓库的主拷贝删除相同的数据项,这是在失败前执行和提交所述增加和删除操作的条件下进行。
6.根据前面的权利要求中任何一个所述的方法,其中数据仓库是消息仓库,并且恢复数据到数据仓库的主拷贝的步骤包含在消息仓库上执行消息增加、更新和删除操作。
7.根据权利要求6所述的方法,用于消息通信系统内的执行,其中维护次数据拷贝包括存储日志记录以描述对主拷贝的更新,并且其中恢复数据到仓库的主拷贝的步骤包括步骤缓存与消息增加、更新和删除操作有关的日志记录,该操作在同步点控制下在最初的工作的单元内执行;从日志记录确定失败时最初的工作的单元的状态,以及根据最初的工作的单元的确定的状态,确定在恢复的工作的单元内要执行的操作如下如果提交最初的工作的单元,就执行有关的消息增加、更新和删除操作;以及如果最初的工作的单元被质疑,就执行有关的消息增加、更新和删除操作,但是标记被质疑的操作;以及如果最初的工作的单元既未被提交,也未被质疑,就放弃缓存的操作。
8.根据前面的权利要求中任何一个所述的方法,其中通过为恢复到数据仓库的每个数据项设置标志,使恢复的工作的单元内恢复到仓库的主拷贝的数据不可访问,该标志指示数据项不可访问。
9.根据权利要求8所述的方法,其中标志指示数据项的事务处理状态,并且其中用于从仓库访问数据项的过程适合识别一个或更多预先定义的事务处理状态为不可访问。
10.根据权利要求8或者9所述的方法,其中标志包含独特的主键的字节值,当恢复数据项到数据仓库时,分配该主键给数据项,该字节值从指示数据项的事务处理状态的值的范围选择。
11.根据权利要求8到10中任何一个所述的方法,其中设置标志的步骤包含为任何数据项设置第一个标志,对该数据项,失败前数据项上执行的最近操作是提交的增加操作,其要在恢复的工作的单元内恢复到数据仓库;以及为任何数据项设置第二个标志,对该数据项,失败前数据项上执行的最近操作是被质疑增加或删除操作,其要在恢复的工作的单元内恢复到数据仓库。
12.根据权利要求11所述的方法,其中第一个标志包含数据项键的、从表示第一个事务处理状态的字节值的第一个范围选择的字节值,并且第二个标志包含数据项键的、从表示第二个事务处理状态的字节值的第二个范围选择的字节值。
13.一种数据通信系统,包括数据存储,用于存储数据仓库的主拷贝;第二数据存储,用于存储表示数据仓库的数据的次拷贝,该次数据足以恢复数据仓库的主拷贝和其上保存的数据;恢复组件,用于控制数据通信系统的操作,以从影响数据仓库的主拷贝的失败恢复,其中恢复组件能操作于控制数据通信系统以执行以下步骤从次拷贝重新创建数据仓库的主拷贝;以及使用恢复过程以从恢复的工作的单元内的次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
14.一种数据通信系统,用于在发送者和接收者之间传递消息,其中消息在消息发送操作之后保存在消息仓库中,然后从仓库检索用于传递给接收者,并且其中创建仓库的备份拷贝并写日志记录以记录从创建备份拷贝以来的消息发送和消息检索事件,该系统包括恢复组件,其适合控制数据通信系统以执行下面的步骤通过参考仓库的备份拷贝,恢复消息到仓库以响应影响消息仓库的失败,该备份拷贝在失败之前创建;恢复处理完成之前,配置仓库使新消息能够增加到仓库并从那里检索,而不等待恢复处理的完成;以及通过参考失败前创建的日志记录,重放对消息仓库的更新,该更新对应于失败前执行的消息发送和消息检索操作;其中在恢复的工作的单元内执行通过参考备份拷贝和日志记录,恢复消息到仓库并且重新应用对仓库的更新的步骤,并且使恢复的消息和重新应用的更新不可访问,直到对应于失败前执行的发送和检索操作的所有消息仓库更新已经重新应用到消息仓库。
15.一种计算机程序产品,包含记录在记录媒体上的程序代码,用于控制数据处理装置的操作,程序代码在该数据处理装置上运行以执行用于从影响数据仓库的主拷贝的失败恢复数据仓库的方法,用于与一种数据处理装置一起使用,该数据处理装置具有次数据存储并具有用于在次数据存储中维护数据的次拷贝的组件,该次拷贝足以恢复数据仓库的主拷贝和其上保存的数据项,该方法包括步骤从次拷贝重新创建数据仓库的主拷贝,以响应影响数据仓库的主拷贝的失败;以及使用恢复过程以在恢复的工作的单元内从次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
16.一种计算机程序,用于控制数据处理装置的操作,程序在该数据处理装置上运行以执行用于从影响数据仓库的主拷贝的失败恢复数据仓库的方法,其中数据处理装置具有次数据存储区域,并且其中计算机程序包括用于在次数据存储区域中维护数据的次拷贝的组件,该次拷贝足以恢复数据仓库的主拷贝和其上保存的数据项,该方法包括以下步骤从次拷贝重新创建数据仓库的主拷贝,以响应影响数据仓库的主拷贝的失败;以及使用恢复过程以在恢复的工作的单元内从次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
17.一种恢复组件,用于从影响数据仓库的主拷贝的失败恢复数据仓库,用于与一种数据处理装置一起使用,该数据处理装置具有主和次数据存储并具有用于在次数据存储中维护数据的次拷贝的组件,该次拷贝足以恢复数据仓库的主拷贝和其上保存的数据项,该恢复组件适合执行包括下面步骤的方法从次拷贝重新创建数据仓库的主拷贝,以响应影响数据仓库的主拷贝的失败;以及使用恢复过程以在恢复的工作的单元内从次拷贝恢复数据项到主拷贝,其中使在恢复的工作的单元内恢复到数据仓库的主拷贝的数据项,对除了恢复过程的过程不可访问,直到提交恢复的工作的单元;恢复的工作的单元的提交之前,配置数据仓库的主拷贝,使能够独立于所述恢复步骤增加数据项到数据仓库,并且使除了恢复过程的过程能够访问所述独立增加的数据项;以及提交恢复的工作的单元,包括解除恢复的数据的所述不可访问,以响应恢复步骤的成功完成。
全文摘要
提供方法、数据处理系统、恢复组件和计算机程序,用于从影响数据仓库的存储失败恢复。当数据仓库能够接收新数据并允许检索这样的新数据时,执行恢复处理的至少一部分。虽然新数据项可以接收到仓库中并在恢复处理期间从那里检索,但对数据仓库的更新在恢复的工作的单元内恢复,并且对除了恢复过程的过程不可访问,直到恢复的工作的单元成功完成,该更新在失败前执行,然后通过恢复处理恢复到仓库。恢复处理确保恢复的仓库与失败时仓库的状态一致,但是在恢复处理完成之前对新数据项的增加和检索可用。
文档编号G06F17/30GK1729455SQ200380107191
公开日2006年2月1日 申请日期2003年10月22日 优先权日2003年4月10日
发明者罗伯特·F·巴克斯顿, 戴维·J·费希尔, 乔斯·E·加尔扎, 斯蒂芬·J·霍布森, 保罗·霍普韦尔, 保罗·凯特利, 罗伯特·D·米拉, 彼特·西达尔, 斯蒂芬·R·沃克 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1