用于数据库转储的方法、设备和系统的制作方法

文档序号:6355457阅读:330来源:国知局
专利名称:用于数据库转储的方法、设备和系统的制作方法
技术领域
本发明的实施方式总体上涉及数据库领域,并且更具体地,涉及用于数据库转储的方法、设备和系统。
背景技术
如本领域已知的,数据库在现代信息技术中发挥着重要作用。例如,作为数据库的重要类型之一,关系数据库系统被广泛地应用于存储和检索各类信息。通常,存储在关系数 据库中的数据可以使用结构化查询语言(SQL)来进行操作。SQL是ー种针对数据库的查询和操作而设计的结构化描述语言。SQL语句仅描述数据检索的高层准则,而不涉及数据库系统的具体细节。SQL的这ー抽象特点将开发和维护人员从数据库操作的底层操作(例如,数据的位置、访问方法,等等)中解放出来,极大地提高了开发和维护的效率和方便程度。然而,另一方面,为了支持这种抽象,用于实现具体底层操作的数据库管理系统(例如,关系数据库管理系统RDBMS)需要在功能上具有较高的复杂性。在数据库管理系统的开发、调试和维护中,相关人员往往需要基于数据库操作过程中出现的SQL错误,来诊断数据库管理系统中存在的问题以及导致该问题的根源,从而能够采取必要的修改和/或维护措施。然而,随着关系数据库管理系统的复杂性不断増加,对SQL问题的诊断越来越困难。特别地,如果数据库操作中的SQL错误发生在客户方,并且这种错误无法在实验室环境中重现,则开发和维护人员很难准确地诊断出错误发生的原因。不幸的是,实践中的情况往往如此。这是因为在实验室环境中,通常难以严格按照实际错误发生时的客户上下文来请求数据和/或表,从而也就无法重现问题发生时的真实情境。为了能够诊断此类不可重现的SQL问题,现有技术中已经提出了若干解决方案。例如,在某些现有技术的方案中,对数据库问题的诊断依赖于日志和跟踪技木。然而,此类方案无法反映对数据库进行操作的应用(例如,程序)的逻辑错误,并且将消耗大量的计算、存储和时间资源。此外,此类方案不是特定于具体问题的。具体而言,根据此类方案,用于捕获SQL跟踪的工具被硬编码在数据库引擎的源代码中。跟踪是面向监控的,但是不是面向特定问题诊断的。而且,在典型的联机事务处理(OLTP)RDBMS系统中,经常存在大量的SQL封装体(package),并且每个SQL封装体包含数目众多的SQL语句。这些SQL语句在RDBMS地址空间中可并行执行。因此,跟踪所有SQL语句的执行代价很高,并且通用的跟踪策略对于特定的SQL语句而言未必有效。此外,根据现有技术的跟踪主要是针对审核、运行时、性能或持续时间的数据而进行的,内部数据结构和数据未被包括以用于诊断特定的SQL语句。另ー类现有技术的数据库诊断方案被称为转储(DUMP)或转存。一般而言,根据此类方案,在特定时刻或者特定条件被满足的情况下,与RDBMS地址空间相关联的存储设备(例如,RDBMS所操作的存储器)的全部或部分内容被拷贝和记录在另ー储存设备中,以生成转储数据。由此,转储数据可以被认为是存储空间在该特定时刻或者该特定条件下的“现场快照”。继而,可以使用中央处理单元(CPU)寄存器的值作为入口,确定错误发生时客户环境中的应用访问状态和变量。

发明内容
然而,现有技术的基于转储的方案存在其自身的缺陷。首先,转储过程是有代价的,并且其时序关系未必与实际错误发生时严格对应一致。其次,转储只能体现特定时间点处的静态现场,无法反映目标SQL语句是如何被转换和执行的历史和演变过程。更为重要的是,现有技术的转储,是针对整个应用程序或其部分而执行的;而且现有技术的转储,需要拷贝和记录存储空间中的全部内容。換言之,现有的转储技术往往创建整个存储空间的现场快照。这不仅将消耗大量的资源,而且有时无法准确查明问题的根源。例如,基于整个存储空间的转储数据,有时并不能确定特定的SQL语句对整个数据处理造成的影响。
鉴于以上问题,为了对SQL问题进行更为有效和准确的诊断,本领域需要ー种能够以选择性方式在SQL语句级别进行连续动态转储的方法、设备和系统。在本发明的ー个方面,提供一种用于控制数据库的转储的方法。该方法包括响应于针对数据库的结构化查询语言SQL语句被执行,确定与所述SQL语句相关联的诊断标志的状态,所述诊断标志指示是否执行转储;以及响应于所述诊断标志的状态被确定为有效,执行针对所述SQL语句的转储。根据本发明的某些实施方式,确定与所述SQL语句相关联的诊断标志的状态包括响应于执行所述SQL语句所包含的处理步骤,确定所述诊断标志的状态。此时,执行针对所述SQL语句的转储包括访问与所述处理步骤相关联的转储配置信息;以及响应于所述转储配置信息指示执行转储,基于所述转储配置信息执行针对所述处理步骤的转储。根据本发明的此类实施方式,该方法进ー步包括基于针对处理步骤的转储,生成针对所述SQL语句的转储数据。根据本发明的某些实施方式,该方法进ー步包括响应于针对所述SQL语句的转储完成,将所述诊断标志重置为无效。备选地或附加地,该方法进ー步包括响应于针对所述SQL语句的转储完成,清理转储期间产生的临时数据。根据本发明的某些实施方式,所述诊断标志在运行所述SQL语句的实例的线程级别被设置。而且,根据本发明的某些实施方式,如果所述SQL语句是动态SQL语句或者未捆绑的静态SQL语句,所述诊断标志是通过向所述SQL语句添加定制的关键字而设置的。此夕卜,根据本发明的某些实施方式,如果所述SQL语句是已捆绑的静态SQL语句,所述诊断标志是通过定制的数据库命令而设置的。在本发明的另一方面,提供一种用于控制数据库的转储的设备。该设备包括标志确定装置,被配置为用于响应于针对数据库的结构化查询语言SQL语句被执行,确定与所述SQL语句相关联的诊断标志的状态,所述诊断标志指示是否执行转储;以及转储执行装置,被配置为用于响应于所述诊断标志的状态被确定为有效,执行针对所述SQL语句的转储。在本发明的又一方面,提供ー种用于控制数据库的转储的系统,包括标志设置设备,被配置为用于设置与结构化查询语言SQL语句相关联的诊断标志,所述诊断标志指示是否执行转储;SQL执行设备,被配置为用于执行所述SQL语句;以及转储控制设备,被配置为用于响应于所述SQL执行设备执行所述SQL语句,根据与所述SQL语句相关联的诊断标志来控制所述SQL语句的转储,其中所述转储控制设备包含如上文所述的设备。利用本发明的实施方式,可以按照一种选择性的可配置方式,在SQL语句级别捕获连续的、动态的转储数据。换言之,不同现有技术中针对整个存储空间的转储,本发明的实施方式允许在单个SQL语句级别执行转储,并且对存储空间中的哪些部分(存储块)进行转储是可配置的。这种选择性的转储可以随同SQL语句的生命周期而被执行。特别地,可以针对SQL语句的任何特定步骤而执行转储,并且可以基于这些步骤级别转储的结果生成SQL语句级别的转储数据以供诊断和分析。这进ー步细化了转储的粒度和级别。由此,数据库管理系统的SQL问 题诊断可以更加准确、灵活和具有针对性。


通过參考附图阅读下文的详细描述,本发明实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中图I示出了根据本发明实施方式的用于控制数据库转储的方法100的流程图;图2示出了根据本发明的另ー实施方式的用于控制数据库转储的方法200的流程图;图3示出了通过应用根据本发明实施方式的方法而获得的数据库转储的示例性结果的不意图;图4示出了应用根据本发明实施方式的方法来处理ー个SQL语句的过程的示意图;图5示出了根据本发明实施方式的用于控制数据库转储的设备501的框图;图6示出了根据本发明实施方式的用于控制数据库转储的系统600的框图;以及图7示出了适于用来实现本发明实施方式的示例性计算系统700的框图。
具体实施例方式下面參考附图详细描述本发明的实施方式。如上所述并如下文详细讨论的,在本发明的一个实施方式中,可以按照一种选择性方式在SQL语句级别进行连续的、动态的转储,例如,针对内存的连续的、动态的转储。特别地,可以针对SQL语句执行过程中的任何特定步骤而执行转储。通过细化转储的粒度和级别,使得SQL问题诊断和分析变得更加准确和灵活。首先參考图I,其示出了根据本发明实施方式的用于控制数据库转储的方法100的流程图。方法100开始之后,在步骤S102,针对数据库的SQL语句被执行。可以理解,该SQL语句可以g在对数据库中存储的数据进行存储、访问、检索以及目前已知或将来开发的各种操作。接下来,在步骤S104,响应于SQL语句被执行,确定与该SQL语句相关联的诊断标志的状态,即该诊断标志是否被设置为有效。根据本发明的实施方式,每个SQL语句都可以具有与之关联的标志,称作“诊断标志”,用于指示是否针对该SQL语句执行转储。具体地,当诊断标志的状态为有效时,指示应当执行针对该特定SQL语句的转储;反之,当诊断标志的状态为无效时,指示不执行针对该SQL语句的转储。诊断标志可以采用现在已知或者将来开发的任何适当手段来实现。例如,诊断标志可以利用特定的比特位(bit)来实现。当该位的值为“I”时表示有效,为“O”时表示无效。又如,诊断标志也利用布尔变量来实现,当其值为“TRUE (真)”时表示有效,为“FALSE (假)”时表示无效。注意,上文描述的仅仅是此类标志的示例性实现方式,其他实现同样是可能的,本发明的范围在此方面不受限制。在操作中,用户(例如,负责开发和/或维护数据库管理系统的有关人员)可以根据需要来创建和操作与所执行的SQL语句相关联的诊断标志。诊断标志的创建和设置例如可以在实验室环境中完成。例如,针对疑似导致数据库操作错误的SQL语句,用户可以利用特定的手段来创建此类标志并将其设置为有效。下面将详细讨论如何针对不同类型的SQL语句而创建和设置诊断标志。 SQL语句总体上可以分为两类静态SQL语句和动态SQL语句。静态SQL语句是在运行时不会发生改变的SQL语句,因此可以被硬编码到应用中。与此相対,动态SQL语句是指在运行时才被构建的SQL语句。进ー步,对于静态SQL语句,又分为两种情况该静态SQL语句已被捆绑(bind)和尚未捆绑。已捆绑的一个或多个静态SQL语句可被包括在称为封装体(package)的结构中。 根据本发明的实施方式,对于动态SQL语句或者未经捆绑的静态SQL语句而言,如果用户希望对其进行诊断,则可以通过向该SQL语句添加定制的关键字而设置上述标志。例如,在本发明的某些实施方式中,可以向语句中添加例如“ WITH DIAGNOSE”的定制关键字。作为示例,下面示出了添加有上述定制关键字的ー个SQL语句SELECT * FROM Tl, T2WHERE Tl. Cl = Τ2· ClWITH DIAGNOSE ;应当理解,在此给出的关键字以及添加关键字的位置仅仅是示例性的,其他任何定制的关键字以及添加方式都是可行的,本发明的范围在此方面不受限制。相应地,对于添加有此类定制关键字的SQL语句,根据本发明实施方式的RDMBS系统在运行时将会把与该SQL语句相关联的诊断标志设为有效。特别地,根据本发明的某些实施方式,当SQL语句的实例被执行时,可以在运行该SQL语句实例的线程级别设置诊断标志。注意,这仅仅是示例性的,还可以通过任何其他适当的方式在运行时设置诊断标志,例如将与每个SQL语句相关联的诊断标志保存在可访问的存储位置和/或文件中。本发明的范围在此方面不受限制。另ー方面,对于已捆绑的静态SQL语句,可以通过定制的数据库命令而设置上述标志。例如,根据本发明的某些实施方式,此类定制命令的形式可以是SET DIAGNOSE PACKAGE (X)STMTNO(Y)其中參数X是经捆绑而获得的包含所考虑SQL语句的封装体,而Y标识所考虑的SQL语句在该封装体中的位置。应当理解,在此给出的用于设置诊断标志的定制命令仅仅是示例性的,其他任何定制的数据库命令都可用于设置与已捆绑的静态SQL语句相关联的诊断标志。本发明的范围在此方面不受限制。此类定制数据库命令例如可以向RDBMS中的命令控制器等实体发送。响应于接收到此类命令,命令控制器可以在包含已捆绑静态SQL语句的封装体中定位想要处理的SQL语句,并且例如为其加上特定的标签。由此,当该SQL语句被RDMBS系统执行时,可以根据所加的特定标签,在运行时将与该SQL语句关联的诊断标志的状态设置为有效。与上文类似,作为示例,诊断标志仍然可被设置在运行该SQL语句实例的线程级别。应当理解,上文所描述的仅仅是示例性的。基于在此给出的教导和启示,本领域技术人员可以采用目前已知或者将来开发的任何适当方式,在运行时设置与特定SQL语句相关联的诊断标志的状态。本发明的范围在此方面不受限制。返回图1,在步骤S104,如果与SQL语句相关联的诊断标志的状态被确定无效,则方法100结束。在这种情况下,SQL语句可被常规地执行,并未执行任何诊断动作。另ー方面,如果诊断标志的状态在步骤S104处被确定为有效,则方法100进行到步骤S106,在此执行针对该SQL语句的转储。具体地,可以对与该SQL语句相关联的存储空间(例如,存储器中的特定存储块)中的某些或全部内容进行拷贝和记录,从而生成转储数据,以供用户随后分析和处理。转储操作的具体实现可以按照目前已知或者将来开发的任何适当方式来进行,本发明的范围在此方面不受限制。在步骤S106完成之后,方法100随之结束。应当理解,在本发明的一个实施方式中,由于诊断标志是特定于SQL语句的,因此转储是针对个体SQL语句执行的,而不是针对操作数据库的整个应用程序。而且,如下文详述的,对于转储的每个SQL语句,可以通过转储配置信息来控制拷贝和记录关联存储空间中的哪些内容,而并不一定对该空间中的全部内容进行转储。这些特征都显著区别于现有技术中的转储。以此方式,可以更加灵活、有效地诊断每个SQL语句的执行对系统造成的影响。在方法100的某些优选实施方式中,转储不仅可以在SQL语句级别执行,而且还可以特定于SQL语句所包含的每个处理步骤,从而进ー步降低粒度,提高转储操作的可控性和灵活性。下面将结合图2详细描述本发明的这种优选实施方式。图2示出了根据本发明的另ー实施方式的用于控制数据库转储的方法200的流程图。方法200可以作为上文參考图I描述的优选实施方式而被实现。通过下文描述将会理解,方法200将转储的粒度进ー步降低到SQL语句所包含的每个处理步骤。方法200开始之后,在步骤S202,执行SQL语句所包含的处理步骤(或简称“步骤,,)。如本领域中已知的,为了实现ー个SQL语句所描述的逻辑操作,需要执行ー个或多个处理步骤。同样已知的是,ー个SQL语句所包含的所有处理步骤通常是顺序执行的。因此,在该实施方式中,在给定的SQL语句初始执行时,在步骤S202处执行的通常是该语句所包含的第一个处理步骤。接下来,在步骤S204,确定与当前SQL语句相关联的诊断标志的状态是否为有效,该诊断标志指示是否执行转储。可以理解,方法200中的步骤S204是上文參考图I描述的步骤S104的一种实施方式。也即,对诊断标志的状态的确定是响应于执行SQL语句所包含的处理步骤而完成的。需要说明的是,对于当前SQL语句,在其任何以及每ー个处理步骤执行时,所检查和确定的都是与该SQL语句相关联的同一标志的状态。換言之,尽管方法200可以针对SQL语句的每个处理步骤进行操作,但是与方法100类似,诊断标志仍然存在于SQL语句级别。、与SQL语句相关联的诊断标志及其设置方法与上文參考图I描述的类似,在此不再赘述。如果在步骤S204处确定与SQL语句相关联的诊断标志的状态为无效,表明无需执行针对该SQL语句的诊断。在这种情况下,方法200进行到步骤S212,在此确定是否有更多有待执行的处理步骤。如果存在后续待执行的处理步骤,则方法200返回步骤S202以继续执行。另ー方面,如果在步骤S204处确定与当前SQL语句相关联的诊断标志的状态为有效,则方法200继续进行到步骤S206。在步骤S206,访问与当前处理步骤相关联的转储配置信息。注意,与诊断标志特定于SQL语句不同,转储配置信息是特定于每个处理步骤的。換言之,尽管诊断标志存在于SQL语句级别,但是转储配置信息存在于处理步骤级别。根据本发明的某些实施方式,转储配置信息例如可以包含在相应的转储配置文件中。当然这仅仅是示例性的,转储配置信息也可以通过其他任何适当的方式实现。本发明的范围在此方面不受限制。
接下来,方法200进行到步骤S208,在此根据步骤S206处访问的转储配置信息,确定是否执行针对当前处理步骤的转储。如果结果为“是”,则方法200进行到步骤S210,以基干与当前处理步骤相关联的转储配置信息,执行针对当前处理步骤的转储。否则,如果在步骤S208处确定不执行处理步骤转储,则方法进行到步骤S212以判断是否还有更多待执行的处理步骤。通过以上描述可以理解,在根据本发明实施方式的方法200中,与每个处理步骤相关联的转储配置信息可以指示是否执行针对该处理步骤的转储,以及转储的具体细节。由此,转储不但可以特定于SQL语句,而且还可以进一歩特定于每个处理步骤。更具体地,在与SQL语句的诊断标志有效(由此指示执行针对该SQL语句的转储)的情况下,可以进一歩通过转储配置信息来控制针对每个处理步骤是否执行转储以及转储的具体细节。以此方式,能够更好地捕获感兴趣的不同存储空间区域、片段或者数据,从而更为有效地诊断不同的SQL问题。參考下面的表1,其示出了在本发明的某些实施方式中,分别与处理步骤I-N相关联的转储配置信息的示例。通过限定不同的转储配置信息,可以在SQL语句的任何处理步骤被执行时,捕获与该SQL语句相关的运行时存储空间的任意部分。应当理解,尽管在表I中与不同步骤相关联的转储配置信息被示为包含在ー个表中,但这并非是必须的。
权利要求
1.一种用于控制数据库的转储的方法,包括 响应于针对数据库的结构化查询语言SQL语句被执行,确定与所述SQL语句相关联的诊断标志的状态,所述诊断标志指示是否执行转储;以及 响应于所述诊断标志的状态被确定为有效,执行针对所述SQL语句的转储。
2.如权利要求I所述的方法,其中确定与所述SQL语句相关联的诊断标志的状态包括 响应于执行所述SQL语句所包含的处理步骤,确定所述诊断标志的状态; 以及其中执行针对所述SQL语句的转储包括 访问与所述处理步骤相关联的转储配置信息;以及 响应于所述转储配置信息指示执行转储,基于所述转储配置信息执行针对所述处理步骤的转储。
3.如权利要求2所述的方法,进ー步包括 基于针对处理步骤的转储,生成针对所述SQL语句的转储数据。
4.如权利要求1-3任一项所述的方法,进ー步包括 响应于针对所述SQL语句的转储完成,将所述诊断标志重置为无效。
5.如权利要求1-3任一项所述的方法,进ー步包括 响应于针对所述SQL语句的转储完成,清理转储期间产生的临时数据。
6.如权利要求1-3任一项所述的方法,其中所述诊断标志在运行所述SQL语句的实例的线程级别被设置。
7.如权利要求1-3任一项所述的方法,其中如果所述SQL语句是动态SQL语句或者未捆绑的静态SQL语句,所述诊断标志是通过向所述SQL语句添加定制的关键字而设置的。
8.如权利要求1-3任一项所述的方法,其中如果所述SQL语句是已捆绑的静态SQL语句,所述诊断标志是通过定制的数据库命令而设置的。
9.ー种用于控制数据库的转储的设备,包括 标志确定装置,被配置为用于响应于针对数据库的结构化查询语言SQL语句被执行,确定与所述SQL语句相关联的诊断标志的状态,所述诊断标志指示是否执行转储;以及转储执行装置,被配置为用于响应于所述诊断标志的状态被确定为有效,执行针对所述SQL语句的转储。
10.如权利要求9所述的设备,其中所述标志确定装置进ー步包括 步骤级确定装置,被配置为用于响应于执行所述SQL语句所包含的处理步骤而确定所述诊断标志的状态; 以及其中所述转储执行装置进ー步包括 步骤级配置访问装置,被配置为用于访问与所述处理步骤相关联的转储配置信息;以及 步骤级转储执行装置,被配置为响应于所述转储配置信息指示执行转储、根据所述转储配置信息执行针对所述处理步骤的转储。
11.如权利要求9所述的设备,进一歩包括 转储数据生成装置,被配置为用于基于针对处理步骤的转储而生成针对所述SQL语句的转储数据。
12.如权利要求9-11任一项所述的设备,进一步包括 标志重置装置,被配置为用于响应于针对所述SQL语句的转储完成而将所述诊断标志重置为无效。
13.如权利要求9-11任一项所述的设备,进ー步包括 临时数据清理装置,被配置为用于响应于针对所述SQL语句的转储完成而清理转储期间产生的临时数据。
14.如权利要求9-11任一项所述的设备,其中所述诊断标志在运行所述SQL语句的实例的线程级别被设置。
15.如权利要求9-11任一项所述的设备,其中如果所述SQL语句是动态SQL语句或者未捆绑的静态SQL语句,所述诊断标志是通过向所述SQL语句添加定制的关键字而设置的。
16.如权利要求9-11任一项所述的设备,其中如果所述SQL语句是已捆绑的静态SQL语句,所述诊断标志是通过定制的数据库命令而设置的。
17.ー种用于控制数据库的转储的系统,包括 标志设置设备,被配置为用于设置与结构化查询语言SQL语句相关联的诊断标志,所述诊断标志指示是否执行转储; SQL执行设备,被配置为用于执行所述SQL语句;以及 转储控制设备,被配置为用于响应于所述SQL执行设备执行所述SQL语句,根据与所述SQL语句相关联的诊断标志来控制所述SQL语句的转储,其中所述转储控制设备包含如权利要求9-14任一项所述的设备。
18.如权利要求17所述的系统,其中所述标志设置设备进一歩包括 第一设置装置,被配置为用于响应于所述SQL语句是已捆绑的静态SQL语句而生成定制的数据库命令; 并且其中所述系统进ー步包括 命令控制设备,被配置为用于响应于所述定制的数据库命令,通过操纵包含所述静态SQL语句的封装体而设置所述诊断标志。
19.如权利要求17所述的系统,其中所述标志设置设备进一歩包括 第二设置装置,被配置为用于响应于所述SQL语句是动态SQL语句或者未捆绑的静态SQL语句,通过向所述SQL语句添加定制的关键字来设置所述诊断标志。
全文摘要
本发明的实施方式用于数据库转储的方法、设备和系统。具体地,公开了一种用于控制数据库的转储的方法,包括响应于针对数据库的结构化查询语言SQL语句被执行,确定与所述SQL语句相关联的诊断标志的状态,所述诊断标志指示是否执行转储;以及响应于所述诊断标志的状态被确定为有效,执行针对所述SQL语句的转储。特别地,根据本发明的实施方式,转储不但可以特定于SQL语句,而且还可以特定于SQL语句所包含的任何处理步骤。还公开了相应的设备和系统。根据本发明的实施方式,数据库SQL问题诊断的灵活性和针对性可得以改善。
文档编号G06F17/30GK102651010SQ20111005164
公开日2012年8月29日 申请日期2011年2月28日 优先权日2011年2月28日
发明者刘沭华, 周祥, 贾焱, 陈东升 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1