一种初始化多租户数据库的方法和装置的制作方法

文档序号:6357374阅读:240来源:国知局

专利名称::一种初始化多租户数据库的方法和装置的制作方法
技术领域
:本发明涉及多租户应用,具体涉及一种用于初始化多租户数据库的方法和装置。
背景技术
:越来越多的独立软件开发商(ISV)希望通过SaaS(软件即服务)业务模型提交其服务,并希望使现有的遗留单租户应用具有多租户特征。对于这些遗留应用来说,总是存在一些用于初始化其数据库(包括模式和数据)的自动化工具(包括初始化应用、脚本等)。例如,下面是一个初始化应用的代码片断Createtableregion(regionldlong,regionName,varchar(50));Insertintoregionvalues(100001,‘SanFrancisco,)...(或许初始化应用将进行计算)Createtablesalesorder(soldlong,merchandiseldlong,pricelong,...)Createtablemersalesreport(mdldlong,avgpricelong)...(或许初始化应用将进行计算)insertintomersalesreportselectmerchandiseld,avg(price)fromsalesordergroupbymerchandiseld该初始化应用首先创建名称为region的表,并在该表中插入值,然后创建名称为salesorder的表以及名称为mersalesreport的表,并从salesorder表中取出相关数据并经计算后填入mersalesreport表中。用于遗留应用的初始化工具显然无法应用于多租户数据库。在通常的多租户数据库中,存在如下三种类型的表I.应用系统表,其模式是在所有租户间共享的,并存储有由所有租户共享的系统数据;表模式和表数据的创建和修改权限都属于应用管理员;2.租户共享表,其模式对于各租户来说是相同的,并存储有各租户的私有数据,且使用一个特殊的租户ID列来区分不同租户的数据;表模式的创建和修改权限属于应用管理员,而表数据的创建和修改权限属于各租户管理员;3.租户私有表,其模式对于租户来说是私有的,并存储有租户的私有数据;表模式和表数据的创建和修改权限属于各租户管理员。为了使现有的用于遗留应用的初始化工具能够应用于多租户数据库,一种办法是修改现有的初始化工具的代码,包括将多租户数据库中的租户共享表的租户ID列纳入考虑之中,例如将现有的初始化工具中的DML(数据修改语言)Insertintosalesreportselectavg(price)fromsalesorder修改为新的DML:Insertintosalesreportselectavg(price),tidfromsalesordergroupbytid这种办法的缺点是需要进行大量的代码修改,工作量很大;而且,修改是特定于初始化工具的,也就是说,对于不同的初始化应用需要分别进行不同的修改,从而进一步增加了工作量。
发明内容根据本发明的一个方面,提供了一种初始化多租户数据库的方法,包括针对试验数据库试验执行遗留初始化工具;捕获所述遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;针对多租户数据库执行遗留初始化工具;截获遗留初始化工具在执行过程中发出的数据库语句;根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库的初始化。根据本发明的另一个方面,提供了一种初始化多租户数据库的装置,包括执行模块,用于针对试验数据库试验执行遗留初始化工具;捕获模块,用于捕获所述遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;所述执行模块还针对多租户数据库执行遗留初始化工具;截获模块,用于截获遗留初始化工具在执行过程中发出的数据库语句;模拟执行模块,用于根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中的初始化。本发明的技术方案实现了通过遗留初始化工具完成多租户数据库的初始化,而无需修改遗留工具的代码。并且,本发明的技术方案并不是针对特定的遗留工具的,而是通用的,可用于任何遗留工具。所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中图I示意性地示出了本发明的技术方案的体系结构;图2示出了在应用上线时初始化多租户数据库的应用级部分的执行过程;图3示出了在每个租户上线时初始化多租户数据库的租户级部分的执行过程;图4示出了根据本发明的实施例的透明地初始化多租户数据库的方法;以及图5示出了根据本发明的实施例的透明地初始化多租户数据库的装置。具体实施例方式下面参照附图来说明本发明的实施例。在下面的说明中,阐述了许多具体细节以便更全面地了解本发明。但是,对于本
技术领域
内的技术人员明显的是,本发明的实现可不具有这些具体细节中的一些。此外,应当理解的是,本发明并不限于所介绍的特定实施例。相反,可以考虑用下面的特征和要素的任意组合来实施本发明,而无论它们是否涉及不同的实施例。因此,下面的方面、特征、实施例和优点仅作说明之用而不应被看作是所附权利要求的要素或限定,除非权利要求中明确提出。现参照附图1,其示意性地示出了本发明的技术方案的体系结构。如图所示,该技术方案包括两个阶段准备阶段以及基于模拟的运行时阶段。一、准备阶段步骤1.1,捕获DDL/DML-遗留工具调度器101针对试验数据库104执行遗留初始化工具102。所述试验数据库104是指仅仅为了捕获遗留初始化工具102在执行过程中发出的DDL/DML语句以及相应的执行结果而指定的任何数据库。如前文中所述,所述遗留初始化工具102是指用于初始化遗留应用的数据库的现有自动化工具,包括初始化应用、脚本等等。-DDL/DML捕获器103捕获遗留初始化工具102在执行过程中发出的所有DDL/DML语句以及相应的执行结果。如本领域的技术人员所知的,DDL语句是指数据描述语言语句,其用于创建、撤销和修改表结构,而DML语句是指数据修改语言语句,其用于在表中插入、修改或删除数据,以及用于查看数据。如本领域的技术人员所知的,可以多种方案实现DDL/DML捕获器103。例如,可通过修改诸如ODBC或JDBC等数据库驱动程序来捕获通过该数据库驱动程序的DDL/DML语句,从而实现DDL/DML捕获器103。-DDL/DML捕获器103将这些DDL/DML语句和执行结果存储在多租户元数据库105中。例如,可以将所捕获的DDL/DML语句以及执行结果存储在如以下表I所例示的表中。表I所捕获的DDL/DML语句及其执行结果ID_DDL/DML语句_执行结果创建时间应用ID120087createtableRegion(regionidvoid2009-11-110562long,namechar(20))121003createtableSalesorder(soidVoid2009-11-110562long,namevarchar(20)...)该表列出了所捕获的每一个DDL/DML语句及其执行结果,并赋予每一个DDL/DML语句一个唯一ID,此外还可选地列出了每一个DDL/DML语句的创建时间,并可选地列出了应用ID。步骤I.2,维护多租户元数据库-通过多租户元数据管理器106,从多租户元数据库105中的DDL语句中获得所包含的表的信息。-通过多租户元数据管理器106,标识表的类型,即标识表是应用系统表、租户共享表还是租户私有表。这可以由用户(例如应用管理员)来人工执行。-通过多租户元数据管理器106,对于租户私有表,将表名称修改为一个全局唯一名称。对于租户共享表,修改其表名,以便与原来的表名相区别。可以将上述表的类型等信息存储在如下表2所例示的表中表2表的类型表ID表名称DDL语表类型租户修改的表名称应用ID句IDID000002Region120087应用系0562统000003Salesorder121003多租户Salesorder_MMT0562_______000005Soext121034租户TlSoext_Tl0562私有该表2列出了所捕获的DDL语句中包含的各表的ID、名称、所对应的DDL语句的ID、类型、租户ID(仅适用于租户私有表)、所对应的修改的表名称(仅适用于租户共享表和租户私有表)、以及可选的应用ID。由该表2可知,表Region来自于表I中的ID为120087的DDL语句,其类型是应用系统表;表Salesorder来自于表I中的ID为121003的DDL语句,其类型是租户共享表,其对应的修改的表名称为Salesorder_MMT;表Soext来自于表I中的ID为121034的DDL语句(在表I中未示出),其类型是租户私有表,其对应的租户ID是Tl,其对应的修改的表名称为Soext_Tl。-通过多租户元数据管理器106,对来自多租户元数据库105的针对租户共享表的每一个DDL语句进行修改以获得修改的DDL语句,包括将该DDL语句中包含的租户共享表的名称更换为所对应的修改的表名称,以及向该DDL中添加租户ID列。另外,形成一个创建触发器的语句,该触发器用于在向该租户共享表插入记录时,将当前用户的ID设置到该租户共享表中该记录的租户ID字段。另外,形成一个创建视图的语句,该视图名称与该租户共享表的原来名称相同,且用于从该租户共享表中获得租户ID为当前用户的ID的所有记录。可以将对应于来自多租户元数据库105的针对租户共享表的每一个DDL语句的修改的DLL语句、创建触发器的语句与创建视图的语句存储在如下表3所例示的表中表3修改的DDL语句修改的DLL修改的DDL语句等创建时间DDL语句应用ID语句等的ID__ID__552131createtable2009-11-111210030562SalesorderMMT(soidlong,namevarchar(20),tenantIDint)552132Createtrigger2009-11-111210030562TRSalesorderbeforeinsertonSalesorderMMTreferencingnewAsForEACHROWSetn.tenantlD=CURRENT_CLIENTUSERID____552133CREATEVIEW2009-11-111210030562SalesorderASSelectsoid,namefromSalesorderMMTwheretenantID=CURRENT_|CLIENT_USERID___该表3列出了修改的DDL语句(以及创建触发器的语句和创建视图的语句)的ID、修改的DDL语句(以及创建触发器的语句和创建视图的语句)、其创建时间、与其对应的来自多租户元数据库的针对租户共享表的DDL语句的ID、以及应用ID。如该表3所示,对于表I中ID为121003的DDL语句,创建了ID为552131的修改的DDL;与该DDL相比,该修改的DDL将表的名称由Salesorder修改为Salesorder_MMT,并在该Salesorder_MMT表中添加了tenantID列。另外,对于该DDL语句,还形成了ID为552132的用于创建触发器的语句,该触发器用于在向Salesorder_MMT表中插入一条记录时,将当前用户的ID,⑶RRENTCLIENT_USERID,设置到该表中该条记录中tenantID字段。另外,对于该DDL语句,还形成了ID为552133的用于创建视图的语句,该视图的名称与该租户共享表原来的名称Salesorder相同,并用于从SalesorderMMT表中选择tenantID为当前用户的ID的所有记录,如本领域的技术人员所知的,这是通过该视图创建语句中的where子句“wheretenantID=CURRENTCLIENT_USERID”实现的。二、基于模拟的运行时阶段步骤2,在应用上线(on-boarding)时,初始化多租户数据库108的应用级部分。多租户数据库108包含应用级部分和租户级部分。应用级部分是指多租户数据库108中应用管理员有权限操作的部分,包括应用系统表的模式和数据的创建和修改,以及租户共享表的模式的创建和修改。而租户级部分是指多租户数据库108中各租户管理员有权限操作的部分,包括租户共享表的数据的创建和修改,以及租户私有表的模式和数据的创建和修改。现参照图2,其示出了该步骤2的具体执行过程。如图2所示,在子步骤201,遗留工具调度器101以应用管理员角色针对真实的多租户数据库108执行遗留初始化工具102。在子步骤202,遗留初始化工具102在执行过程中发出数据库语句。如本领域的技术人员所知的,数据库语句通常为SQL语句,且SQL语句可分为DDL语句和DML语句。在子步骤203,多租户模拟器107截获每个数据库语句,并分析出其包含的表名称。在子步骤204,多租户模拟器107判断所截获的数据库语句包含的表的类型和数据库语句的类型。多租户模拟器107可通过查询在上述准备阶段的步骤I.I中所形成和存储的表的类型表(如表2所例示的),来判断分析出的表名称的类型是应用系统表、租户共享表还是租户私有表。多租户模块器可通过分析所截获的数据库语句来判断该数据库语句的类型,即判断该数据库语句是DDL语句还是DML语句。如果在子步骤204判断所截获的数据库语句包含的表为应用系统表(无论该数据库语句是DDL语句还是DML语句),则转到子步骤205,执行原数据库语句。如果在子步骤204判断所截获的数据库语句包含的表为租户共享表、且该数据库语句为DDL语句,则转到子步骤206,从在上述准备阶段的步骤I.2中所形成和存储的修改的DDL语句表(如表3所例示的)中,获得并执行与该DDL语句对应的修改的DDL语句,从而在多租户数据库108中创建包含了租户ID列、且具有修改的表名称的租户共享表;获得并执行与该DDL语句对应的用于创建触发器的语句,从而在多租户数据库108中的该租户共享表上创建一个触发器,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段;此外,获得并执行与该DDL语句对应的用于创建视图的语句,从而在多租户数据库108中的该租户共享表上创建一个视图,该视图具有与该租户共享表原来的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录。由于该视图与该租户共享表原来的名称相同,这样,遗留初始化工具以及租户客户端发出的针对多租户数据库108中的该租户共享表的查看、插入、修改和删除等DML操作,实际上将是针对该视图执行的。如果在步骤205判断所截获的数据库语句包含的表为租户共享表且该数据库语句为DML语句,或者该数据库语句包含的表为租户私有表(无论该数据库语句是DDL语句还是DML语句),则转到步骤207,不执行该数据库语句,并获得模拟的执行结果。所述模拟的执行结果是指在上述试验数据库104上执行该数据库语句时所获得的执行结果,且可以从上述准备阶段的步骤I.I中形成和存储的所捕获的DDL/DML语句及其执行结果表(如表I所例示的)中获得。在子步骤208,返回执行结果。该执行结果为在步骤205执行原数据库语句或在步骤206执行修改的DDL语句所获得的执行结果,或者在步骤207获得的模拟的执行结果。然后,返回到步骤202,继续处理遗留初始化工具102发出的其他数据库语句,直接处理完毕遗留初始化工具102发出的所有数据库语句。经过该步骤2的执行过程,将在多租户数据库108中创建由遗留初始化工具102中的各数据库语句所定义的各应用系统表及其数据、以及各租户共享表。以上描述的步骤2是在应用上线时以应用管理员的角色执行的,其用于初始化多租户数据库108中的应用级部分。如果多租户数据库108在初始化时只包括应用级部分,而不包括租户级部分,则仅需要执行上述步骤I和2;如果多租户数据库108在初始化时除包括应用级部分外,还包括租户级部分,则需要在执行完上述步骤I和2之后,接着执行下述步骤3。步骤3,在每个租户上线时,初始化多租户数据库108的租户级部分。也就是说,该步骤在每一个租户上线时执行,从而创建多租户数据库108中的租户共享表中该租户的数据,以及创建多租户数据库108中该租户的租户私有表的模式及其数据。现参照图3,其示出了该步骤3的执行过程。如图3所示,在子步骤301,遗留工具调度器101以一个租户管理员的角色针对真实的多租户数据库108执行该遗留初始化工具102。在子步骤302,在其执行过程中,该遗留初始化工具102发出数据库语句。在子步骤303,多租户模拟器107截获每个数据库语句,并分析出其包含的表名称。在子步骤304,多租户模拟器107判断所截获的数据库语句包含的表的类型和数据库语句的类型。多租户模拟器107可通过查询在上述准备阶段的步骤I.2中所形成和存储的表的类型表(如表2所例示的),来判断分析出的表名称的类型是应用系统表、租户共享表还是租户私有表。多租户模块器可通过分析所截获的数据库语句来判断该数据库语句的类型,即判断该数据库语句是DDL语句还是DML语句。如果在子步骤304判断所截获的数据库语句包含的表的类型为租户私有表(无论该数据库语句是DDL语句还是DML语句),则转到子步骤305,将该数据库语句中租户私有表的名称替换为修改的全局唯一的表名称,并执行替换了表名称的该数据库语句。所述修改的全局唯一的表名称可以从上述准备阶段的步骤I.2中形成并存储的表的类型表(如表2所例示的)中获得。如果在子步骤304判断所截获的数据库语句包含的表的类型是租户共享表,且该数据库语句是DML语句,则转到子步骤306,执行该数据库语句。由于已在应用上线时在上述子步骤206中在多租户数据库108中创建了与租户共享表名称相同的视图,因此,针对该租户共享表的该DML语句的执行实际是针对该视图执行的,而该视图的数据则来自于该租户共享表。如果该DML语句是用于查看租户共享表中的数据的DML语句,由于该视图包含了用于过滤出当前租户的所有记录的where子句,因此该DML语句的执行将从租户共享表中获得当前租户的所有相关记录。如果该DML语句是用于更新租户共享表中的数据的DML语句,同样由于该视图包含了用于过滤出当前租户的所有记录的where子句,因此,该DML语句的执行将更新多租共享表中当前租户的相关记录。如果该DML语句是用于删除租户共享表中的数据的DML语句,同样由于该视图包含了用于过滤出当前租户的所有记录的where子句,因此,该DML语句的执行将删除多租共享表中当前租户的相关记录。如果该DML语句是用于向租户共享表中插入记录的DML语句,由于已在应用上线时在上述子步骤206中在该租户共享表上创建了所述触发器,这样,该DML语句的执行将通过该视图向该租户共享表插入该记录,并引起该触发器的执行,而该触发器的执行将在该租户共享表的该记录的租户ID字段设置当前用户的ID。如果在子步骤304判断所截获的数据库语句包含的表的类型为应用系统表(无论该数据库语句是DDL语句还是DML语句),或者该数据库语句包含的表的类型是租户共享表且该数据库语句是DDL语句,则转到子步骤307,不执行该数据库语句,并获得模拟的执行结果。所述模拟的执行结果是指在上述试验数据库104上执行该数据库语句时所获得的执行结果,且可以从上述准备阶段的步骤I.I中形成和存储的所捕获的DDL/DML语句及执行结果表(如表I所例示的)中获得。在子步骤308,返回执行结果。该执行结果为在子步骤305执行修改表名称的数据库语句所获得的执行结果,或者在步骤306执行原数据库语句所获得的执行结果,或者在步骤307获得的模拟的执行结果。然后,返回到步骤302,继续处理遗留初始化工具102发出的其他数据库语句,直到处理完毕遗留初始化工具102发出的所有数据库语句。经过由各租户管理员执行该步骤3,将在多租户数据库108中创建由遗留初始化工具102中的数据库语句所定义的各租户共享表的数据、以及各租户私有表的模式及其数据。本发明的技术方案通过截获遗留工具发送的数据库语句并以应用管理员的角色和租户管理员的角色分别针对多租户数据库108模拟执行所截获的数据库语句,其中所述模拟执行基于数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,实现了多租户数据库108的初始化,而无需修改遗留工具的代码。并且,本发明的技术方案并不是针对特定的遗留工具的,而是通用的,可用于任何遗留工具。以上参照附图描述了本发明的技术方案的体系结构,应指出的是,以上描述仅为示例,而不是对本发明的限制。为了使本领域的技术人员更好地理解和实施本发明,在以上描述中包含了大量的细节,但其中的很多细节并非是必不可少的。本领域的技术人员通过以上对本发明的技术方案的详细描述可知,本发明提供了一种透明地初始化多租户数据库的方法以及一种透明地初始化多租户数据库的装置。下面分别参照附图描述根据本发明的实施例的透明地初始化多租户数据库的方法和装置。为简明起见,在以下描述中省略了与以上描述重复的部分细节,因此可参照以上描述获得对根据本发明的实施例的透明地初始化多租户数据库的方法和装置的更详细的了解。下面参照附图4,其示出了根据本发明的实施例的一种透明地初始化多租户数据库的方法。如图所示,该方法包括以下步骤在步骤401,针对试验数据库试验执行遗留初始化工具。在步骤402,捕获所述遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果。在步骤403,针对多租户数据库执行遗留初始化工具,在一实施例中可以应用管理员的角色进行。在步骤404,截获遗留初始化工具在执行过程中发出的数据库语句。在步骤405,根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库的初始化,在一实施例中,是对多租户数据库中应用级部分的初始化。如本领域的技术人员所知的,多租户数据库中应用级部分的初始化包括多租户数据库中的应用系统表的模式和数据的创建,以及租户共享表的模式的创建。根据本发明的实施例,所述数据库语句的类型包括DDL语句和DML语句,所述表的类型包括应用系统表、租户共享表和租户私有表。根据本发明的实施例,所述步骤405包括以下子步骤如果所截获的数据库语句是针对应用系统表的数据库语句,则针对多租户数据库执行该数据库语句;如果所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行通过向租户共享表添加租户ID列修改的DDL语句;以及如果所截获的数据库语句是针对租户共享表的DML语句或针对租户私有表的数据库语句,则不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具。根据本发明的进一步的实施例,所述步骤405还包括响应于所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行用于创建触发器的语句,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段。根据本发明的进一步的实施例,所述修改的DLL语句还包括修改的租户共享表名称,且所述步骤405还包括响应于所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行用于创建视图的语句,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录。根据本发明的实施例,该方法还包括以下步骤提取在遗留初始化工具的试验执行过程中捕获的数据库语句中包含的表;确定所述表的类型;以及存储所述表及其类型。根据本发明进一步的实施例,该方法还包括以下进一步的步骤响应于所提取的表是租户共享表,则修改其名称,并与该表相关联地存储修改的名称;以及如果所提取的表租户私有表,则将其名称修改为全局唯一名称,并与该表相关联地存储修改后的名称。根据本发明的进一步的实施例,该方法还包括以下进一步的步骤响应于所捕获的数据库语句是针对多租户共享表的DDL语句,则通过向该数据库语句包含的多租户共享表添加租户ID列修改该数据库语句;以及与所捕获的数据库语句相关联地存储修改的数据库语句。根据本发明的进一步的实施例,该方法还包括以下进一步的步骤响应于所捕获的数据库语句是针对多租户共享表的DDL语句,则形成用于创建触发器的语句,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段;以及与所捕获的数据库语句相关联地存储该用于创建触发器的语句。根据本发明的进一步的实施例,该方法还包括以下进一步的步骤响应于所捕获的数据库语句是针对多租户共享表的DDL语句,则形成用于创建视图的语句,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录;以及与所捕获的数据库语句相关联地存储该用于创建视图的语句。根据本发明的实施例,该方法还包括以租户管理员的角色针对多租户数据库执行遗留初始化工具;截获遗留初始化工具在执行过程中发出的数据库语句;根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中租户级部分的初始化。如本领域的技术人员所知的,多租户数据库中租户级部分的初始化包括多租户数据库中的租户共享表的数据的创建,以及租户私有表的模式和数据的创建。根据本发明的进一步的实施例,所述模拟执行所截获的数据库语句以完成对多租户数据库中租户级部分的初始化的步骤包括如下子步骤如果所截获的数据库语句是针对租户私有表的数据库语句,则获得租户私有表的名称被修改为全局唯一名称的对应的数据库语句,并针对多租户数据库执行该对应的数据库语句;如果所截获的数据库语句是针对租户共享表的DML语句,则执行该DML语句;以及如果所截获的数据库语句是针对应用系统表的数据库语句或针对租户共享表的DDL语句,则不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具。以上参照附图描述了根据本发明的实施例的透明地初始多租户数据库的方法,应指出的是,以上描述仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的步骤,且各步骤之间的顺序和包含等关系可以与所描述和图示的不同。现参照图5,其示出了根据本发明的实施例的透明地初始化多租户数据库的装置。如图所示,该装置包括执行模块501,用于针对试验数据库试验执行遗留初始化工具;捕获模块502,用于捕获遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;其中所述执行模块501还针对多租户数据库执行遗留初始化工具,在一个实施例中是以应用管理员的角色进行的;截获模块503,用于截获遗留初始化工具在执行过程中发出的数据库语句;模拟执行模块504,用于根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库的初始化,在一个实施例中,是完成对多租户数据库中应用级部分的初始化。所述执行模块501可以由图I中所示的遗留工具调度器101实现。所述捕获模块502可以由图I中所示的DDL/DML捕获器103实现。所述截获模块503和所述模拟执行模块504可以由图I中所示的多租户模拟器107实现。或者,所述截获模块503也可以与所述捕获模块502是同一个模块。根据本发明的实施例,所述数据库语句的类型包括DDL语句和DML语句,所述表的类型包括应用系统表、租户共享表和租户私有表。根据本发明的实施例,所述模拟执行模块504包括用于如果所截获的数据库语句是针对应用系统表的数据库语句,则针对多租户数据库执行该数据库语句的装置;用于如果所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行通过向租户共享表添加租户ID列修改的DDL语句的装置;以及用于如果所截获的数据库语句是针对租户共享表的DML语句或针对租户私有表的数据库语句,则不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具的装置。根据本发明的进一步的实施例,所述模拟执行模块504还包括用于如果所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行用于创建触发器的语句的装置,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段。根据本发明的进一步的实施例,所述修改的DLL语句还包括修改的租户共享表名称,且所述模拟执行模块还包括用于如果所截获的数据库语句是针对租户共享表的DDL语句,则获得并执行用于创建视图的语句的装置,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录。根据本发明的实施例,该透明地初始化多租户数据库的装置还包括提取模块,用于提取在遗留初始化工具的试验执行过程中捕获的数据库语句中包含的表;确定模块,用于确定所述表的类型;以及存储模块,用于存储所述表及其类型。所述提取模块和确定模块可以由图I中所示的DDL/DML捕获器103实现。所述存储模块可以由图I中所示的多租户元数据库105实现。根据本发明的实施例,该透明地初始化多租户数据库的装置还包括修改模块,用于如果所提取的表是租户共享表,则修改其名称,且所述存储模块还用于与表相关联地存储修改的名称;以及所述修改模块还用于如果所提取的表为租户私有表,则将其名称修改为全局唯一名称,且所述存储模块还用于与表相关联地存储所述全局唯一名称。所述修改模块可以由图I中所示的多租户元数据管理器106实现。根据本发明的进一步的实施例,所述修改模块还用于如果所捕获的数据库语句是针对多租户共享表的DDL语句,则通过向该数据库语句包含的多租户共享表添加租户ID列修改该数据库语句;以及所述存储模块还用于与所捕获的数据库语句相关联地存储修改的数据库语句。根据本发明的进一步的实施例,所述修改模块还用于如果所捕获的数据库语句是针对多租户共享表的DDL语句,则形成用于创建触发器的语句,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段;以及所述存储模块还用于与所捕获的数据库语句相关联地存储该用于创建触发器的语句。根据本发明的进一步的实施例,所述修改模块还用于如果所捕获的数据库语句是针对多租户共享表的DDL语句,则形成用于创建视图的语句,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录;以及所述存储模块还用于与所捕获的数据库语句相关联地存储该用于创建视图的语句。根据本发明的实施例,所述执行模块501还用于以租户管理员的角色针对多租户数据库执行遗留初始化工具;所述截获模块503还用于截获遗留初始化工具在执行过程中发出的数据库语句;所述模拟执行模块504还用于根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中租户级部分的初始化。根据本发明的进一步的实施例,所述模拟执行模块504包括用于如果所截获的数据库语句是针对租户私有表的数据库语句,则获得租户私有表的名称被修改为全局唯一名称的数据库语句,并针对多租户数据库执行该数据库语句的装置;用于如果所截获的数据库语句是针对租户共享表的DML语句,则执行该DML语句的装置;以及用于如果所截获的数据库语句是针对应用系统表的数据库语句或针对租户共享表的DDL语句,则不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具的装置。以上参照附图描述了根据本发明的实施例的透明地初始化多租户数据库的装置。应指出的是,以上描述仅为示例,而不是对本发明的限制。在本发明的其他实施例中,该方法可具有更多、更少或不同的模块,且各模块之间的连接、包含、功能等关系可以与所描述和图不的不同。本发明可以硬件、软件、或硬件与软件的结合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。一种典型的硬件和软件的组合可以是带有计算机程序的通用计算机系统,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,并构成本发明的装置。本发明也可体现在计算机程序产品中,该程序产品包含使能实现本文中描述的方法的所有特征,并且当其被加载到计算机系统中时,能够执行所述方法。尽管已参照优选实施例具体示出和说明了本发明,但是本领域内的那些技术人员应理解,可在形式和细节上对其进行各种改变而不会背离本发明的精神和范围。权利要求1.一种初始化多租户数据库的方法,包括针对试验数据库试验执行遗留初始化工具;捕获所述遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;针对多租户数据库执行遗留初始化工具;截获遗留初始化工具在执行过程中发出的数据库语句;根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库的初始化。2.根据权利要求I的方法,其中,所述针对多租户数据库执行遗留初始化工具是以应用管理员的角色进行的;所述模拟执行所截获的数据库语句,是用以完成对多租户数据库中应用级部分的初始化。3.根据权利要求I或2中任何一个的方法,其中,所述数据库语句的类型包括DDL语句和DML语句,所述表的类型包括应用系统表、租户共享表和租户私有表。4.根据权利要求3的方法,其中,所述模拟执行所截获的数据库语句,以完成对多租户数据库中应用级部分的初始化包括响应于所截获的数据库语句是针对应用系统表的数据库语句,针对多租户数据库执行该数据库语句;响应于所截获的数据库语句是针对租户共享表的DDL语句,获得并执行通过向租户共享表添加租户ID列修改的DDL语句;以及响应于所截获的数据库语句是针对租户共享表的DML语句或针对租户私有表的数据库语句,不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具。5.根据权利要求4的方法,其中,所述模拟执行所截获的数据库语句,以完成对多租户数据库中应用级部分的初始化还包括响应于所截获的数据库语句是针对租户共享表的DDL语句,获得并执行用于创建触发器的语句,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段。6.根据权利要求4的方法,其中,所述修改的DLL语句还包括修改的租户共享表名称;所述模拟执行所截获的数据库语句,以完成对多租户数据库中应用级部分的初始化还包括响应于所截获的数据库语句是针对租户共享表的DDL语句,获得并执行用于创建视图的语句,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录。7.根据权利要求I到6中任何一个的方法,还包括提取在遗留初始化工具的试验执行过程中捕获的数据库语句中包含的表;确定所述表的类型;以及存储所述表及其类型。8.根据权利要求7的方法,还包括响应于所提取的表是租户共享表,修改其名称,并与所述租户共享表相关联地存储修改的名称;以及响应于所提取的表租户私有表,将其名称修改为全局唯一名称,并与所述租户私有表相关联地存储修改后的名称。9.根据权利要求7的方法,还包括响应于所捕获的数据库语句是针对多租户共享表的DDL语句,通过向该数据库语句包含的多租户共享表添加租户ID列修改该数据库语句;以及与所捕获的数据库语句相关联地存储修改的数据库语句。10.根据权利要求1-6中任何一个的方法,还包括以租户管理员的角色针对多租户数据库执行遗留初始化工具;截获遗留初始化工具在执行过程中发出的数据库语句;根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中租户级部分的初始化。11.根据权利要求10的方法,其中,所述模拟执行所截获的数据库语句,以完成对多租户数据库中租户级部分的初始化包括响应于所截获的数据库语句是针对租户私有表的数据库语句,获得租户私有表的名称被修改为全局唯一名称的数据库语句,并针对多租户数据库执行该数据库语句;响应于所截获的数据库语句是针对租户共享表的DML语句,执行该DML语句;以及响应于所截获的数据库语句是针对应用系统表的数据库语句或针对租户共享表的DDL语句,不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具。12.—种初始化多租户数据库的装置,包括执行模块,被配置为针对试验数据库试验执行遗留初始化工具;捕获模块,被配置为捕获所述遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;所述执行模块针对多租户数据库执行遗留初始化工具;截获模块,被配置为截获遗留初始化工具在执行过程中发出的数据库语句;模拟执行模块,被配置为根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中应用级部分的初始化。13.根据权利要求12的装置,其中,所述执行模块是以应用管理员的角色针对多租户数据库执行遗留初始化工具;所述模拟执行模块是完成对多租户数据库中应用级部分的初始化。14.根据权利要求12或13任何一个的装置,其中,所述数据库语句的类型包括DDL语句和DML语句,所述表的类型包括应用系统表、租户共享表和租户私有表。15.根据权利要求14的装置,其中,所述模拟执行模块包括被配置为响应所截获的数据库语句是针对应用系统表的数据库语句,针对多租户数据库执行该数据库语句的装置;被配置为响应所截获的数据库语句是针对租户共享表的DDL语句,获得并执行通过向租户共享表添加租户ID列修改的DDL语句的装置;以及被配置为响应所截获的数据库语句是针对租户共享表的DML语句或针对租户私有表的数据库语句,不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具的装置。16.根据权利要求15的装置,其中,所述模拟执行模块还包括被配置为响应所截获的数据库语句是针对租户共享表的DDL语句,获得并执行用于创建触发器的语句的装置,该触发器用于在该租户共享表中插入记录时将当前用户的ID设置到该租户共享表的该记录中的租户ID字段。17.根据权利要求15的装置,其中,所述修改的DLL语句还包括修改的租户共享表名称,且所述模拟执行模块还包括被配置为响应所截获的数据库语句是针对租户共享表的DDL语句,获得并执行用于创建视图的语句的装置,该视图具有与该租户共享表的名称相同的名称,并用于获得该租户共享表中租户ID的值为当前用户的ID的所有记录。18.根据权利要求12-17中任何一个的装置,还包括提取模块,被配置为用于提取在遗留初始化工具的试验执行过程中捕获的数据库语句中包含的表;确定模块,被配置为用于确定所述表的类型;以及存储模块,被配置为用于存储所述表及其类型。19.根据权利要求18的装置,还包括修改模块,被配置为响应所提取的表是租户共享表,修改其名称;所述存储模块还用于与所述租户共享表相关联地存储修改的名称;以及所述修改模块还被配置为如果所提取的表为租户私有表,则将其名称修改为全局唯一名称,且所述存储模块还用于与所述租户私有表相关联地存储为所述全局唯一名称。20.根据权利要求18的装置,其中,所述修改模块还被配置为如果所捕获的数据库语句是针对多租户共享表的DDL语句,则通过向该数据库语句包含的多租户共享表添加租户ID列修改该数据库语句;以及所述存储模块还被配置为与所捕获的数据库语句相关联地存储修改的数据库语句。21.根据权利要求12-17中任何一个的装置,其中,所述执行模块还被配置为以租户管理员的角色针对多租户数据库执行遗留初始化工亘..,N9所述截获模块还被配置为截获遗留初始化工具在执行过程中发出的数据库语句;所述模拟执行模块还被配置为根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库中租户级部分的初始化。22.根据权利要求21的装置,其中,所述模拟执行模块包括被配置为响应所截获的数据库语句是针对租户私有表的数据库语句,则获得租户私有表的名称被修改为全局唯一名称的数据库语句,并针对多租户数据库执行该数据库语句的装置;被配置为响应所截获的数据库语句是针对租户共享表的DML语句,则执行该DML语句的装置;以及被配置为响应所截获的数据库语句是针对应用系统表的数据库语句或针对租户共享表的DDL语句,则不执行该数据库语句,并将该数据库语句的试验执行结果返回给遗留初始化工具的装置。全文摘要本发明提出了一种初始化多租户数据库的方法和装置,该方法包括针对试验数据库试验执行遗留初始化工具;捕获遗留初始化工具在试验执行过程中发出的数据库语句和数据库语句的试验执行结果;针对多租户数据库执行遗留初始化工具;截获遗留初始化工具在执行过程中发出的数据库语句;根据数据库语句的类型、数据库语句涉及的表的类型以及数据库语句的试验执行结果,模拟执行所截获的数据库语句,以完成对多租户数据库的初始化。文档编号G06F17/30GK102737020SQ20111008110公开日2012年10月17日申请日期2011年3月31日优先权日2011年3月31日发明者张春林,王启荣,王宁,王小锋,王芝虎,肖振春,郭常杰,高波申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1