CN109947773A - 在多租户数据库系统中部署对键模式的改变 - Google Patents
在多租户数据库系统中部署对键模式的改变 Download PDFInfo
- Publication number
- CN109947773A CN109947773A CN201811055009.7A CN201811055009A CN109947773A CN 109947773 A CN109947773 A CN 109947773A CN 201811055009 A CN201811055009 A CN 201811055009A CN 109947773 A CN109947773 A CN 109947773A
- Authority
- CN
- China
- Prior art keywords
- tenant
- container
- shared
- new
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
- G06F16/213—Schema design and management with details for schema evolution support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/248—Presentation of query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/256—Integrating or interfacing systems involving database management systems in federated or virtual databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Abstract
本公开涉及用于部署对数据库系统中的键模式的改变的系统、软件和计算机实施的方法。一个示例方法包括接收新共享容器,该新共享容器包括用于逻辑分割表的新键模式和用于逻辑分割表的更新的只读部分物理表。更新的只读部分物理表包括与新键模式的补充匹配的记录。与新键模式匹配的记录在当前共享容器中的逻辑分割表的只读部分物理表中被识别。识别的记录从当前共享容器中的只读部分物理表移动到租户容器中的可写部分物理表。与新键模式不匹配的记录将从租户容器中的逻辑分割表的可写部分物理表中删除。
Description
相关申请的交叉引用
本申请是2017年10月26日提交的题目为“SYSTEM SHARING TYPES IN MULTI-TENANCY DATABASE SYSTEMS”的美国申请序列号15/794,261的共同未决申请(代理人案卷号22135-1088001/170465US01);并且还是2017年10月26日提交的题目为“DATASEPARATION AND WRITE REDIRECTION IN MULTI-TENANCY DATABASE SYSTEMS”的美国申请序列号15/794,305的共同未决申请(代理人案卷号22135-1090001/170472US01);并且还是2017年10月26日提交的题目为“TRANSITIONING BETWEEN SYSTEM SHARING TYPES INMULTI-TENANCY DATABASE SYSTEMS”的美国申请序列号15/794,501的共同未决申请(代理人案卷号22135-1091001/170673US01);并且还是2017年10月26日提交的题目为“KEYPATTERN MANAGEMENT IN MULTI-TENANCY DATABASE SYSTEMS”的美国申请序列号15/794, 368的共同未决申请(代理人案卷号22135-1092001/170674US01);并且也是2017年10月26日提交的题目为“DEPLOYING CHANGES IN A MULTI-TENANCY DATABASE SYSTEM”的美国申请序列号15/794,335的共同未决申请(代理人案卷号22135-1094001/170613US01);并且还是2017年10月26日提交的题目为“EXCHANGING SHARED CONTAINERS AND ADAPTINGTENANTS IN MULTI-TENANCY DATABASE SYSTEMS”的美国申请序列号15/794,362的共同未决申请(代理人案卷号22135-1098001/170545US01);并且还是2017年10月26日提交的题目为“PATCHING CONTENT ACROSS SHARED AND TENANT CONTAINERS IN MULTI-TENANCYDATABASE SYSTEMS”的美国申请序列号15/794,424的共同未决申请(代理人案卷号22135-1099001/170544US01);每个和整个的全部内容通过引用并入本文。
技术领域
本公开涉及用于在多租户数据库系统中部署对键模式的改变的计算机实施的方法、软件和系统。
背景技术
多租户软件架构可以包括在服务器上运行并服务多个租户的软件应用的单一实例。租户是共享对软件实例的公共访问的一组用户。在多租户架构中,软件应用可以设计为为每个租户提供包括租户特定的数据、配置、用户管理和租户特定的功能的实例的专用共享。多租户可以被用于云计算。
发明内容
本公开涉及用于在多租户数据库系统中部署对键模式的改变的系统、软件和计算机实施的方法。一个示例方法包括接收新共享容器,该新共享容器包括用于逻辑分割表的新键模式和用于逻辑分割表的更新的只读部分物理表。更新的只读部分物理表包括与新键模式的补充匹配的记录。与新键模式匹配的记录在当前共享容器中的逻辑分割表的只读部分物理表中被识别。识别的记录从当前共享容器中的只读部分物理表移动到租户容器中的可写部分物理表。与新键模式不匹配的记录将从租户容器中的逻辑分割表的可写部分物理表中删除。
虽然通常被描述为在有形介质上体现的处理和转换相应数据的计算机实施的软件,但是一些或所有方面可以是计算机实施的方法,或者进一步包括在用于执行描述的功能的相应系统或其他设备中。在附图和以下描述中阐述本公开的这些和其他方面以及实施例的细节。本公开的其他特征、目的和优点将从说明书和附图以及权利要求书中变得显而易见。
附图说明
图1是示出用于多租户的示例系统的框图。
图2示出具有标准数据库设置的应用的示例系统。
图3示出示例非多租户系统,在其中为不同数据库容器中的多个、不同租户存储相同内容。
图4A示出一个示例系统,该系统示出租户的数据分割。
图4B示出示例多租户系统,其包括多个表类型中的每一个的多个表。
图4C示出使用后缀表命名方案的示例多租户系统。
图5和图6示出包括共享数据库容器、用于第一租户的第一租户数据库容器和用于第二租户的第二租户数据库容器的示例系统。
图7示出用于约束实行(constraint enforcement)的系统。
图8示出用于根据配置的租户键部署内容的示例系统。
图9示出用于改变租户键的示例系统。
图10示出用于更新数据库记录以符合更新的租户键的示例系统。
图11示出用于使用传输文件更新数据库记录以符合更新的租户键的示例系统。
图12示出用于更新非活动(inactive)租户键记录的示例系统。
图13A示出示例系统,其包括具有标准系统共享类型的标准系统和具有共享/租户系统共享类型的共享/租户系统。
图13B是示出可以对标准、共享和租户数据库容器执行的处理的表。
图14示出用于从标准系统过渡到共享/租户系统的系统。
图15示出具有模拟的共享类型的系统。
图16示出用于从标准系统过渡到模拟系统的系统。
图17示出用于从模拟系统过渡到共享/租户系统的系统。
图18示出用于从共享/租户系统过渡到标准系统的系统。
图19示出用于从模拟系统过渡到标准系统的系统。
图20示出包括共享数据库容器和租户数据库容器两者中的对象的数据的系统。
图21A至图21B示出用于部署对数据库系统中的对象的改变的示例系统。
图22示出使用交换共享数据库容器方法来升级多租户数据库系统的示例系统。
图23示出用于将新服务包部署到多租户数据库系统的示例系统。
图24示出用于维护数据库系统的示例系统。
图25示出用于将多租户系统升级到新版本的示例系统。
图26示出在使用交换共享数据库容器方法部署新数据库版本之前的示例系统。
图27至图31是通过交换共享数据库容器而部分升级的示例系统的例示。
图32示出用于部署对对象的改变的系统。
图33示出使用共享数据库容器的隐藏准备来部署补丁的系统。
图34示出在部署补丁之前的示例系统。
图35示出用于在将补丁部署到数据库系统期间准备共享数据库容器的系统。
图36和图37示出用于将补丁部署到租户数据库容器的系统。
图38示出用于执行部署的最终化的系统。
图39示出使用共享数据库容器技术的隐藏准备进行部署之后的系统。
图40是用于处理不成功的租户部署的示例方法的流程图。
图41示出用于将多个补丁部署到数据库系统的系统。
图42示出用于在将多个补丁部署到数据库系统之前准备共享数据库容器的系统。
图43至图47示出用于将多个补丁部署到数据库系统的示例系统。
图48示出在完成向数据库系统部署多个补丁之后的系统。
图49是用于将不同类型的改变应用于多租户数据库系统的示例方法的流程图。
图50是用于改变一个或多个表的共享类型的示例方法的流程图。
图51是示出从第一表类型到第二、不同表类型的过渡的表。
图52示出包括处于第一版本的第一系统和处于第二、更高版本的第二系统的系统。
图53示出各种表类型之间的转换。
图54示出用于在交换共享数据库容器时改变租户键的系统。
图55是用于重定向写入查询的示例方法的流程图。
图56是用于键模式管理的示例方法的流程图。
图57是用于在系统共享类型之间过渡的示例方法的流程图。
图58是用于交换共享数据库容器的示例方法的流程图。
图59是用于修补共享数据库容器的示例方法的流程图。
图60是用于将不同类型的改变部署到数据库系统的示例方法的流程图。
图61是用于改变键模式定义的示例方法的流程图。
具体实施方式
在多租户架构中,来自不同顾客的应用之间可以共享资源。每个顾客都可以被称为租户。共享资源可以包括,例如,供应商代码、应用文件和中央运行时和配置数据。多租户可以使得能够改善跨租户的多个应用实例之间共享资源的使用,这可以减少磁盘存储和处理要求。多租户可以使得能够为修补或软件升级等事件实现集中的软件改变管理。
内容分离方法可以被用于分离共享数据与租户特定数据。多租户方法可以被应用于在没有数据分离作为设计标准的情况下构建的现有应用。如果为现有系统实施多租户,则应用可以不加改变地执行。可以为应用提供关于存储的数据的统一视图,该视图向应用隐藏哪些数据是共享的,哪些数据是租户本地的。其他优点将在下面更详细地讨论。
图1是示出用于多租户的示例系统100的框图。具体地,所示系统100包括数据库系统102、终端用户客户端设备104、管理员客户端设备105、应用服务器106和网络108,或者可通信地与其耦合。尽管分开示出,但是在一些实施方式中,两个或更多个系统或服务器的功能可以由单一系统或服务器来提供。在一些实施方式中,一个所示系统或服务器的功能可以由多个系统或服务器来提供。例如,虽然示出为单一服务器102,但是系统100可以包括多个应用服务器、数据库服务器、集中服务服务器、或者系统或服务器的一些其他组合。
终端用户可以使用终端用户客户端设备104来使用客户端应用110,该客户端应用110是由应用服务器106托管的服务器应用112的客户端版本。在一些实例中,客户端应用110可以是可以访问所示数据的至少一部分并与之交互的任何客户端应用,包括web浏览器、特定app(例如,移动app)或其他合适的应用。服务器应用112可以存储和修改由数据库系统提供的表中的数据。表在数据字典114中被定义并且驻留在共享数据库容器116和/或租户数据库容器118中,如下所述。服务器应用112可以使用数据库接口120访问数据库管理系统119。
数据库管理系统119可以提供包括可以由多个应用提供商使用的公共表集的数据库。每个应用提供商都可以被称为数据库系统的顾客或租户。数据库系统102可以为每个租户存储租户特定的数据。然而,由数据库系统102提供的至少一些数据可以是可由多个租户共享的公共数据,诸如主(master)数据或其他非租户特定的数据。因此,公共、共享数据可以被存储在一个或多个共享数据库容器116中,并且租户特定的数据可以被存储在一个或多个租户数据库容器118中(例如,每个租户可以具有至少一个专用租户数据库容器118)。作为另一示例,共享数据库容器116可以存储由应用的多个实例使用的公共数据,并且租户数据库容器118可以存储特定于每个实例的数据。
数据分割和共享系统122可以管理共享数据库容器116和租户数据库容器118之间的数据的分割。共享数据库容器116可以包括共享的只读表,该共享的只读表包括共享数据,其中共享数据可以被多个租户用作公共数据集。租户数据库容器118可以包括可写表,该可写表存储可以由给定租户修改的租户特定的数据。一些被称为混合表或分割表的应用表可以包括在多个租户之间公共和共享的只读记录、和为特定租户添加的、或者在与系统交互之前和/或期间可由特定租户编辑或为特定租户编辑的可写记录。混合表的只读记录可以被存储在共享数据库容器116中的共享的只读部分中,而不是为每个租户存储单独的混合表。可以由给定租户修改的可写混合表记录可以被存储在使用该应用的每个租户的每个数据容器118中的可写部分中。可以跨越不同类型的表分割给定对象的数据。数据分割和共享系统122可以使得对象的公共部分能够被存储在共享数据库容器116中。数据字典114可以存储指示哪些表被完全或部分共享的信息。
服务器应用112可以被设计成不知道数据库系统102中是否已经实施多租户。服务器应用112可以使用相同集的逻辑表名向数据库系统102提交查询,而不管是否已经在数据库系统102中对于给定租户实施了多租户。例如,服务器应用112可以使用混合表的逻辑名称来提交查询,并且数据库系统102可以返回查询结果,而不管当多租户尚未实施时混合表是否是单一物理表,或者混合表是否在不同的数据库容器中被表示为多个表(包括只读部分和可写部分)。
由数据分割和共享系统122实施的多租户特征可以允许应用被编程为使用单一逻辑表用于混合数据存储,同时仍然允许在不同顾客之间共享公共供应商数据。先前没有为数据共享和多租户设计的应用在实施多租户之后可以保持不变。由多租户提供的数据共享可以减少应用部署的数据和内存占用。
将混合表的数据存储在多个物理表中可能会带来潜在的诸如重复记录的可能性的问题。约束实行系统126可以被用于定义描述哪些记录被允许存储在给定混合表的可写部分中的键模式,其可以被用于防止重复记录。数据库接口120可以被配置为确定传入查询是针对在数据库系统120中表示为多个物理表的混合表的写入查询,并且作为响应,使用写入重定向器128来确保写入查询仅在混合表的写入部分上操作。在应用操作期间和由部署工具130完成的内容部署期间,写入重定向和键模式的使用可以有助于数据一致性的实行。
例如,部署工具130可以被用于例如在安装租户应用之后为数据库系统102部署新内容。例如,管理员可以使用管理员客户端设备105上的部署管理员应用132来发起部署。
除了新数据之外,可以为应用将其他改变部署到数据库系统102。例如,对于新软件版本,可能出现以下一种或多种情况:新内容、内容的改变、内容的删除、表结构的改变、共享哪些表和不共享哪些表的改变、以及定义共享哪些内容记录和哪些是本地租户的键模式定义的改变。部署工具130可以使用改变管理系统134来确定如何进行每个所需的改变。改变管理系统134包括用于管理和进行不同类型的改变的基础设施。例如,改变管理系统包括用于管理表结构改变的结构改变基础设施136、用于管理键模式的改变的分割定义基础设施138、以及用于管理在租户中共享哪些表的改变的共享类型改变基础设施140。改变管理系统134可以管理调用各个子基础设施的时间和顺序或组合。
当部署用于升级或新功能集时,由应用使用的许多表可能会发生改变。部署工具130可以使用交换共享数据库容器116的方法,这可以比对现有共享数据库容器116进行内联(inline)改变更有效。共享数据库容器交换器142可以为部署工具130准备新共享数据库容器116以进行部署。部署工具130可以将租户数据库容器118链接到新共享数据库容器116。现有共享数据库容器116可以在所有租户已经升级之后被丢弃(drop)。在升级过程中,部署状态可以被存储在元数据144中。
交换共享数据库容器116的方法可以允许租户单独升级,例如,每个租户可以在可以为每个租户定制的单独停机时间窗口期间被链接到新共享数据库容器116。如果一个租户的升级失败,则可以重试该租户的部署,并且其他租户部署可以保持不受影响。部署新共享数据库容器116可以减少停机时间,因为在使用现有共享数据库容器116的同时可以在正常运行时间期间部署新共享数据库容器116。
当部署用于紧急补丁时,与较大的软件发布相比,可能会影响相对较少数量的表。部署工具130可以使用修补系统146来对现有共享数据库容器116进行必要的内联改变,而不是交换现有共享数据库容器116。可以将对于补丁的改变部署到最初对租户隐藏的共享表。这可以使租户能够单独链接到隐藏表版本,这可以使能单个租户特定的升级窗口和回退(fallback)能力,类似于交换的共享数据库容器方法。修补系统146还可以使补丁队列能够被应用。例如,对于一组租户,第一补丁的部署可能正在进行中,一些但不是所有租户都应用了该第一补丁。已经利用第一补丁升级的租户可能会出现问题。可以开发第二补丁来解决该问题,第二补丁可以被应用于该租户。其他租户可以在稍后时间处使用第一补丁(可能还有第二补丁)来升级。
应用系统或顾客/租户的需求可能会随着时间的推移而变化。用于一组顾客的数据库最初可能相对较小,并且可能不包括足够的数据来保证对于该应用/数据库/顾客的多租户的实施。例如,可以选择为该顾客使用一个数据库容器,因为如果只使用一个数据库容器而不是几个数据库容器,则可以获得更高的性能。顾客可能会随着时间的推移而增长、可能拥有更大的数据库、可能运行更多的应用实例等。特定的数据库可能会被比过去更多的租户使用。当需要改变时,数据库系统102可以支持从一种类型的系统设置到另一种类型的系统设置的改变。例如,系统共享类型修改器148可以将数据库系统102从给定顾客的标准设置(例如,一个数据库容器,不具有多租户)改变为共享/租户设置,该共享/租户设置使用用于共享内容的共享数据库容器116和用于租户特定的内容的租户数据库容器118。当对多租户的改变进行测试时,可以对数据库系统102使用模拟设置。系统共享类型可以作为系统设置被存储在元数据144中。部署工具130、数据库接口120和数据分割和共享系统122可以基于系统共享类型来更改行为。服务器应用112可以在不知道当前系统共享类型以及系统共享类型是否已经从一种类型改变为另一种类型的情况下运行。
如在本公开中使用的,术语“计算机”意图涵盖任何合适的处理设备。例如,尽管图1示出了单一数据库系统102、单一终端用户客户端设备104、单一管理员客户端设备105和单一应用服务器106,但是系统100可以使用单一的独立计算设备、两个或多个数据库系统102、两个或多个应用服务器106、两个或多个终端用户客户端设备104、两个或多个管理员客户端设备105等来实施。实际上,数据库系统102、应用服务器106、管理员客户端设备105和客户端设备104可以是任何计算机或处理设备,诸如刀片服务器、通用个人计算机(personal computer,PC)、工作站、基于UNIX的工作站或任何其他合适的设备。换句话说,本公开内容考虑除通用计算机之外的计算机,以及没有传统操作系统的计算机。此外,数据库系统102、应用服务器106、管理员客户端设备105和客户端设备104可以适于执行任何操作系统,包括Linux、UNIX、Windows、Mac JavaTM、AndroidTM、iOS或任何其他合适的操作系统。根据一个实施方式,应用服务器106和/或数据库系统102还可以包括电子邮件服务器、Web服务器、高速缓存服务器、流数据服务器和/或其他合适的服务器或可通信地与其耦合。
由数据库系统102、应用服务器106、管理员客户端设备105和客户端设备104分别使用的接口160、162、164和166用于与连接到网络108的分布式环境中(包括系统100之内)的其他系统通信。通常,接口160、162、164和166各自包含以软件和/或硬件以合适的组合编码的逻辑并且可操作地与网络108通信。更具体地,接口160、162、164和166各自可以包含支持与通信相关联的一个或多个通信协议的软件,使得网络108或接口的硬件可操作以在所示系统100之内和之外通信物理信号。
数据库系统102、应用服务器106、管理员客户端设备105和客户端设备104各自分别包括一个或多个处理器170、172、174或176。处理器170、172、174和176中的每个处理器可以是中央处理单元(central processing unit,CPU)、刀片、专用集成电路(applicationspecific integrated circuit,ASIC),现场可编程门阵列(field-programmable gatearray,FPGA)或其他合适的组件。通常,处理器170、172、174和176中的每个处理器执行指令并操纵数据以执行相应计算设备的操作。
无论具体实施方式如何,“软件”可以包括计算机可读指令、固件、有线和/或编程硬件、或其在有形介质上的任何组合(暂时的或非暂时的,视情况而定),当被执行时可操作以至少执行本文描述的过程和操作。实际上,每个软件组件可以用任何适当的计算机语言(包括C、C++、JavaTM、Visual Basic、汇编程序、任何合适的4GL版本以及其他语言)完全或部分地编写或描述。虽然图1中所示的软件的部分被示为通过各种对象、方法或其他过程实施各种特征和功能的各个模块,但是该软件可以替代地适当包括若干子模块、第三方服务、组件、库等。相反,各种组件的特征和功能可以适当地组合成单一组件。
数据库系统102和应用服务器106分别包括存储器180或存储器182。在一些实施方式中,数据库系统102和/或应用服务器106包括多个存储器。存储器180和存储器182可以各自包括任何类型的存储器或数据库模块,并且可以采用易失性和/或非易失性存储器的形式,包括但不限于磁性介质、光学介质、随机存取存储器(random access memory,RAM)、只读存储器(read-only memory,ROM)、可移动介质或任何其他合适的本地或远程存储器组件。存储器180和存储器182中的每一个可以存储各种对象或数据(包括高速缓存、类、框架、应用、备份数据、业务对象、作业、网页、网页模板、数据库表、数据库查询、存储业务的存储库和/或动态信息)、以及任何其他适当的信息(包括与相应计算设备的目的相关联的任何参数、变量、算法、指令、规则、约束或引用)。
终端用户客户端设备104和管理员客户端设备105各自可以是可操作以使用有线或无线连接连接到网络108或在网络108中通信的任何计算设备。通常,终端用户客户端设备104和管理员客户端设备105中的每一个包括可操作以接收、发送、处理和存储与图1的系统100相关联的任何适当数据的电子计算机设备。终端用户客户端设备104和管理员客户端设备105中的每一个可以包括一个或多个客户端应用,分别包括客户端应用110或部署工具132。客户端应用是允许客户端设备请求和查看客户端设备上的内容的任何类型的应用。在一些实施方式中,客户端应用可以使用在启动时接收的参数、元数据和其他信息来访问来自数据库系统102的特定数据集。在一些实例中,客户端应用可以是在企业服务器(未示出)上运行的一个或多个企业应用的代理或客户端侧版本。
终端用户客户端设备104和管理员客户端设备105中的每一个通常意图涵盖任何客户端计算设备,诸如膝上型/笔记本计算机、无线数据端口、智能电话、个人数据助理(personal data assistant,PDA)、平板计算设备、这些设备内的一个或多个处理器、或任何其他合适的处理设备。例如,终端用户客户端设备104和/或管理员客户端设备105可以包括计算机,该计算机包括输入设备(诸如小键盘、触摸屏或可以接受用户信息的其他设备)、以及输出设备,该输出设备传达与数据库系统102或客户端设备本身的操作相关联的信息,分别包括数字数据、视觉信息或图形用户界面(graphical user interface,GUI)190或192。
为了任何合适的目的(包括分别生成客户端应用110或部署工具132的视觉表示),GUI 190和GUI 192各自与系统100的至少一部分接口。具体地,GUI 190和GUI 192各自可用于查看和导航各种网页。通常,该GUI 190和GUI 192各自向用户提供由系统提供或在系统内通信的业务数据的高效且用户友好的呈现。GUI 190和GUI 192可以各自包含多个可定制的帧或视图,这些帧或视图具有用户操作的交互字段、下拉列表和按钮。GUI 190和GUI192各自考虑任何合适的图形用户界面,诸如通用网络浏览器、智能引擎和命令行界面(command line interface,CLI)的组合,该图形用户界面处理信息并有效地向用户可视地呈现结果。
终端用户客户端设备104或管理员客户端设备105中分别包括的存储器194和存储器196可以各自包括任何存储器或数据库模块,并且可以采取易失性或非易失性存储器的形式,包括但不限于磁介质、光学介质、随机存取存储器(RAM)、只读存储器(ROM)、可移动介质或任何其他合适的本地或远程存储器组件。存储器194和存储器196可以各自存储各种对象或数据(包括用户选择、高速缓存、类、框架、应用、备份数据、业务对象、作业、网页、网页模板、数据库表、存储业务的存储库和/或或动态信息)、以及任何其他适当的信息(包括与客户端设备104的目的相关联的任何参数、变量、算法、指令、规则、约束或对其的引用)。
可以存在与系统100相关联或在系统100之外的任何数量的终端用户客户端设备104和管理员客户端设备105。此外,在系统100的所示部分之外还可以存在能够经由网络108与系统100交互的一个或多个附加客户端设备。此外,在不脱离本公开的范围的情况下,术语“客户端”、“客户端设备”和“用户”可以被适当地可交换地使用。而且,虽然可以就单一用户使用方面来描述客户端设备,但是本公开考虑许多用户可以使用一个计算机,或者一个用户可以使用多个计算机。
数据分割
图2示出具有标准数据库设置的应用的示例系统200。当执行从客户端应用接收的应用请求时,应用服务器202访问数据库204。例如,数据库204可以是对于特别租户的数据库容器,或者是包括对于多个租户的数据的数据库。如分别由访问级别206、208和210所指示的,对于特别租户,数据库204包括名为“TABR”的只读表212、名为“TABW”的可写表214、以及名为“TABW”的混合表216。尽管示出只读、可写和混合表类型中的每一个的一个表,但是给定租户可以具有这些表类型中的一些或全部的多个表。
只读表212包括供应商递送的数据,诸如供应商代码、字符代码页、应用文档、中央运行时和配置数据以及其他供应商提供的数据。租户或与租户相关联的应用不写入或修改只读表212中的数据。从租户应用的角度来看,只读表212是只读的。可写表214仅包括租户特定的数据。可写表214通常是运送的(shipped)空的并不包括供应商递送的数据。内容仅由租户或与租户相关联的应用写入可写表214。例如,可写表214可以包括业务交易数据。混合表216包括未被租户应用修改的只读记录和可由租户应用修改的记录两者。混合表216可以包括供应商递送的数据和租户创建的数据两者。示例混合表可以是文档表,包括运送文档数据、租户添加的文档数据以及供应商提供但随后由租户修改的文档数据。例如,混合表216可以包括默认文本值(其可以由特别租户定制),用于以各种语言的用户界面显示。在一些实施方式中,混合表216是可扩展的表,包括由租户应用或顾客已经添加的字段。
图3示出示例非多租户系统300,其中对于不同数据库容器中的多个的、不同租户存储相同内容。系统300包括应用302和304,它们使用数据库接口306和308分别访问租户数据库容器314和316中的表310和312。虽然应用302和304以及数据库接口306和308是分开示出的,但是在一些实施方式中,应用302和304是相同的应用,并且数据库接口306和308是在单一应用服务器上的相同数据库接口。
表310和312各自是混合表,其包括多个租户公共的记录和对各个租户唯一(例如,由各个租户添加)的记录两者。例如,表310和表312都包括由供应商运送的公共记录(例如,记录318a-318b、320a-320b和322a-322b)。当为相应的租户部署相应的应用302或304时,可以将这些公共记录部署到表310和312。公共记录可以是没有被各个应用改变的记录。与将公共记录存储在一个共享位置相比,为每个租户单独存储公共记录会导致存储和维护成本的增加。如下所述,当实施多租户时,可以将公共的共享记录移动到共享表。每个表310和312还包括由相应的租户应用302或304写入的记录,例如,记录324a和324b(碰巧具有相同的键),以及仅在它们各自的表中的记录326、328和330。
图4A示出示例系统400,该示例系统400示出对于租户的数据分割。系统400可以被用于内容分离(由多个租户使用的共享内容与各个租户分别使用的租户特定数据的分离)。系统400包括共享数据库容器402和给定租户的租户数据库容器404。表和视图名称仅是说明性的和示例性的,可以使用任何表名和任何表名变型方案。
共享数据库容器402包括由包括给定租户的多个租户使用的共享内容。共享内容可以包括供应商提供的内容,并且可以在多个租户之间共享供应商递送的数据。尽管被示为共享数据库容器402,但是共享内容通常也可以被存储在共享数据库中,或者通过使用共享数据库模型(database schema)来存储。
共享数据库容器402包括对应于图2的只读表212的TABR表406,TABR表406仅包括只读记录。TABR表406被配置为对与租户数据库容器406相关联的给定租户和其他租户是只读的和可共享的。为给定租户运行的应用408可以提交引用表名“TABR”的查询。数据库接口(database interface,DBI)410可以从应用接收查询并将包括TABR表名称的查询提交给租户数据库容器404。
租户数据库容器404包括TABR视图412,当处理查询以对TABR表406进行只读访问时,可以使用该TABR视图412。例如,可以使用远程数据库访问可从租户数据库容器404访问TABR表406。作为另一示例,如果多个租户驻留在同一数据库中,则TABR表406可以作为多个租户驻留在同一数据库中。通常,每个租户可以拥有自己的数据库模型或容器,并且可以使用跨模式访问、跨容器访问或远程数据库访问来访问TABR表406。
租户数据库容器404包括TABW表414,TABW表414在某些情况下对应于图2的可写表214。TABW表414可以包括给定租户的非共享或租户特定的应用数据。TABW表414可以是运送的空的表,其中响应于来自应用408的插入请求,将记录添加到给定租户的TABW表414。可替换地,TABW表414可以包括初始数据集,该初始数据集可以由租户或以租户特定的方式更新和修改。由应用408提交的插入查询可以包括TABW表名,并且DBI 410可以提供对TABW表414的写入访问,而不使用视图。
应用408可以提交包括与图2的混合表216相对应的“TAB”表名的查询。当实施多租户时,来自混合表216的记录可以被分割,以被包括在共享数据库容器402中包括的名为“/R/TAB”的只读表416中,或者被包括在租户数据库容器404中包括的名为“/W/TAB”的可写表418中。下面更详细地讨论名称“/R/TAB”和“/W/TAB”的使用和识别。只读表416可以包括多个租户公共的记录,这些记录先前已被包括在多个租户的多个租户表中。只读表416可以是多个租户用于访问公共数据和记录的共享存储库(shared repository)。可写表418包括来自混合表216的特定于与租户数据库容器404相关联的给定租户的记录。具有与混合表216相同的TAB名称的联合视图(union view)420向应用408提供对只读表416和可写表418的单一访问点。
在实施多租户之前,应用408可能先前已被配置为提交包括“TAB”表名的查询。应用408可以在实施多租户之后使用原始“TAB”表名继续提交查询,使用单一逻辑表名来访问共同存储在可写表418和只读表416中的混合记录。联合视图420提供关于混合记录数据的统一视图,该视图对应用408隐藏关于哪个数据被共享以及哪个数据是租户本地的的细节。在联合视图420上执行的查询可以从只读表416、可写表420或来自两个表的记录的组合返回记录,并且应用420不知道从查询返回的记录的源。联合视图420的使用使多租户能够与诸如应用408的现有应用)相兼容,例如,应用408和其他应用可以继续使用而无需修改。与知道可写表418和只读表416并且需要修改以查询两个表而不是一个表的应用相比,这种方法避免了应用的重大重写。包含对混合表的引用的查询和视图可以继续被使用而无需修改。联合视图420的使用使应用408能够使用单一查询来访问分割成可写表418和只读表416的数据。
DBI 410可以被配置为确定包括TAB表名的查询是读取查询还是写入查询。如果查询是读取查询,则DBI 410可以将读取查询提交给租户数据库容器404,用于联合视图420上的读取操作。联合视图420提供对来自可写表418和只读表416的联合数据(joint data)的未改变的读取访问。
如果查询是写入查询(例如,插入、更新、删除、选择更新),则DBI 410可以在将查询提交给租户数据库容器404之前,(从应用408的角度)自动且透明地执行写入截取操作,该操作可以包括将查询中的TAB引用改变为“/W/TAB”引用,这可以导致对可写表418而不是联合视图420中的租户本地数据执行写入操作。由于写入访问被重定向到可写表418,所以应用408可以不加改变地提交对混合表的写入查询。联合视图420可以被配置为只读,以便如果尝试在联合视图420上执行写入操作将被拒绝。如果允许为联合视图420接收写入查询,那么写入操作对于应该写入可写表418还是只读表416中的哪一个可能是模糊的。
与为每个租户单独存储公共数据相比,在TABR表406和只读表416中存储共享内容可能使得内存占用减少。将公共数据存储在共享位置可以减少生命周期管理过程中的资源消耗,并简化这些过程。生命周期管理可以包括应用开发、组装、传输、安装和维护。将公共数据存储在一个位置可以简化软件改变管理、修补和软件升级。
图4B示出示例多租户系统440,其包括多个表类型中的每一个的多个表。在实施多租户之前,数据库系统可以具有只读、可写和混合表类型中的每一个的多个表。例如,如表元数据(table metadata)441所示,表“TABR”、“TCPOO”和“TCP01”是只读表,表“TAB”和“DOKTL”是混合表,表“TABW”、“ACDOCA”、“MATDOC”是读/写(例如,可写)表。表元数据可以存在于共享数据库容器442中和/或可以存在于租户数据库容器443中,如表元数据444所示。
多租户的实施可以导致在只读数据库容器442中包含只读表,如只读表445、446和448所示。可以在租户数据库容器443中分别为只读表444、446和448创建只读视图450、452和454,以为应用456提供读访问。多租户的实施可以导致在租户数据库容器443中包含可写表,如可写表458、460和462所示。
可以将每个混合表分割为共享数据库容器442中的只读表和租户数据库容器443中的可写表。例如,只读表“/R/TAB”464和可写表“/W/TAB”466替换混合表“TAB”。作为另一例子,只读表“/R/DOKTL”468和可写表“/W/DOKTL”470替换混合表“DOKTL”。
在一些实施方式中,部署工具自动生成替换混合表的只读表和可写表的名称。生成的名称可以包括附加到混合表名称的前缀。加前缀可以被预先确定(例如,“/R/”,“/W/”),或者可以使用前缀查找来识别加前缀。例如,可以调用API getSharedPrefix 472和getTenantPrefix 474,并且可以分别针对共享前缀返回“/R/”,并针对可写(例如,租户)前缀返回“/W/”(或其他字符串)。例如,API 472和474可以在预配置的表中查找相应的前缀。在一些实施方式中,使用不同的命名方案,该方案使用后缀或一些其他方法来生成表名。在一些实施方式中,其他API可以生成并返回完整的共享表名或完整的可写表名,而不是共享的或租户前缀。
对于每个混合表,在租户数据库容器443中创建联合视图,该联合视图对应用456提供对只读表和对应于混合表的可写表中的记录的单点访问。例如,联合视图476提供对只读表464和可写表466的统一访问(unified access)。作为另一示例,联合视图478提供对只读表468和可写表470的统一访问。
图4C示出使用后缀表命名方案的示例多租户系统480。如注释482所示,包括在共享数据库容器488中的只读表484、485、486和487可以包括使得能够存储表的若干版本的后缀。只读视图489提供对只读表485的读取访问,该只读表485是给定只读表的当前配置版本(例如,“TABR#2”)。为了获得对给定只读表的不同版本(例如,“TABR#1”)的访问,只读视图489可以被重新配置为与只读表487相关联。如下面更详细地描述,在部署升级期间可以使用表的多个版本。
如注释490所示,只读视图492可以被包括在租户数据库容器494中,诸如,如果应用496需要对运送的只读内容进行读取访问,该只读内容被包括在现在存储在只读表484中的混合表中。联合视图498可以提供对只读视图492和现在包括在可写表499中的可写混合表记录的统一访问。只读视图492可以被重新配置为访问表486,该表486是只读表484的不同版本(例如,“TAB#2”)。
图5示出示例系统500,其包括共享数据库容器502、用于第一租户的第一租户数据库容器504以及用于第二租户的第二租户数据库容器506。第一应用508和第二应用510分别处理对第一租户和第二租户的应用请求。第一租户和第二租户可以由单独的应用服务器或相同的应用服务器或由多个应用服务器来服务。
共享数据库容器502包括共享只读表512,该共享只读表512包括只读运送的记录。共享只读表512可用作第一和第二租户以及其他租户的共享表。第一应用508和第二应用510可以分别使用视图514或视图516访问共享只读表512。第一应用508和第二应用510可以分别通过视图514或视图516对共享只读表512进行读取访问,但不能进行写入访问。
第一租户数据库容器504和第二租户数据库容器506分别包括可写表518或520。可写表518和520彼此分开并存储已由应用508或应用510分别写入的记录。第一租户不能访问可写表520,相应地,第二租户不能访问可写表518。
共享数据库容器502包括共享只读表522,该共享只读表522存储已包括在混合表中的共享只读记录。包括在第一租户数据库容器504和第二租户数据库容器506中的可写表524和526分别存储由应用508或应用510已经或将要被添加到可写表524或可写表526的混合记录。可写表524和526彼此分开。第一租户不能访问可写表526,相应地,第二租户不能访问可写表524。
可以使用联合视图528为应用508提供现在在共享只读表522和可写表524之间分割的混合表记录的单点访问。类似地,可以使用联合视图530为应用510提供现在在共享只读表522和可写表526之间分割的混合表记录的单点访问。如上面针对图4所描述的,由应用508或应用510提交的对TAB表的写入请求可以被相应的DBI拦截并分别重定向到可写表524或可写表526。
图6示出示例系统600,其包括共享数据库容器602、用于第一租户的第一租户数据库容器604以及用于第二租户的第二租户数据库容器605。应用606和应用607被配置为分别使用DBI 610或DBI 611访问联合视图608或联合视图609,以获得对各个混合表的访问。联合视图608和609分别为应用606或应用607提供对先前存储在名为TAB的混合表(诸如图3的混合表310)中的记录的单点访问。如联合视图608所示,TAB表和联合视图608和609包括第一键字段612、第二键字段614、第一数据字段616和第二数据字段618。联合视图608(因此对于只读表620和可写表623)的主键可以包括第一键字段612和第二键字段614。第一键字段612和/或第二键字段614可以是被数据库使用但未呈现给终端用户的技术字段。
现在将多个租户公共的混合表的只读记录存储在共享数据库容器602中的共享只读表620中。共享只读表620包括与多个租户共享/公共的只读记录。例如,共享只读表620包括与图3的记录318a-318b、320a-320b和322a-322b相对应的记录624、626和628。
为第一租户或第二租户添加的混合表记录现在被存储在第一租户数据库容器604中的可写表622或第二租户数据库容器605中的可写表623中。可写表622包括特定于第一租户的记录,该表包括与图3的记录324a和330相对应的记录630和632。类似地,可写表623包括特定于第二租户的记录,该表包括与图3的记录324b、326和328相对应的记录634、636和638。
来自应用606的用于从联合视图608检索所有记录的查询可以返回记录624、626、628、630、和632。来自应用607的用于从联合视图609检索所有记录的查询可以返回记录624、626、628、634、636和638。第二租户不能访问记录630和632。第一租户不能访问记录634、636和638。
键模式管理
图7示出用于约束实行的系统700。系统700包括共享数据库容器702和租户数据库容器704。名为“TAB”的混合表已被分割成共享数据库容器702中的只读表706(“/R/TAB”)和租户数据库容器704中的可写表708(“/W/TAB”)。将数据存储在两个表而不是一个表中时,由数据库的主键约束可能不再有效。一旦混合表被分割,并且没有进一步配置,只读表706中的记录可以具有与可写表708中的记录相同的键值。例如,最初由供应商提供的只读表706中的记录可以具有与由租户应用写入的可写表708中的记录相同的键。作为另一示例,供应商可以在安装后将记录部署到只读表706,该记录已经作为可写表708中的租户写入记录而存在。
重复记录(duplicate records)的存在可能会造成不期望的问题。例如,应用710可以被配置为使用DBI 712提交对“TAB”表的具有对(多个)主键字段的限制的选择查询,其中查询被设计为返回一个记录(例如,如果找到匹配主键限制的记录)或者不返回记录(例如,如果没有找到匹配主键限制的记录)。然而,如果允许在只读表706和可写表708之间存在重复记录,则这样的选择查询可以返回两个记录,因为该查询可以在名称为“TAB”的联合视图714上被执行,该联合视图714提供对只读表706和可写表708的统一访问。应用710可能未被正确配置为处理这种情况,并且可能发生错误状况、不期望的应用行为和/或不期望的数据修改。
作为另一示例,应用710可以提交具有对主键字段的限制的删除查询,其中期望该查询唯一地识别要删除的记录。当对删除查询的限制应用于联合视图714时,对删除查询的限制可以匹配两个记录,因此对于要删除哪个记录可能存在模糊性。
为了解决与重复记录的潜在地相关的问题,可以识别描述可以由应用710写入并由此存在于可写表708中的记录的键模式。例如,可以存在键值约定,使得只读表706中的运送的记录具有特别键模式,诸如第一范围的键值,并且应用添加的记录具有不同的键模式,诸如第二、不同范围的键值。作为另一示例,运送的记录可以具有包括特别前缀的键值,可以使用包括不同前缀的键值来添加租户添加的记录。键值约定可以被用于定义不同的键值空间,例如,用于运送的记录的第一键值空间和用于租户记录的第二、不同的键值空间。
租户键表716可以被用来定义键模式。例如,租户键表716中的行718包括用于表名列720的值“TAB”,其指示正在为联合视图714(以及为包括“TAB”表引用的应用请求)定义键模式。行718在活动(active)/非活动(inactive)列722中包括值“A”(针对“活动”),指示“TAB”表的键模式是活动的。下面更详细地描述活动和非活动键模式。
WHERE子句列724的记录718中的值“KF1LIKE Z%”定义“TAB”表的键模式。键模式描述包括在可写表708中的记录键的模式(例如,键模式指示可写表708中的记录应具有以“Z”开头的键)。键模式的补充(例如,“NOT KF1LIKE Z%”(例如,具有不以“Z”开头的键的记录))描述只读表706中的记录的模式。DBI 712可以使用键模式来确保存储在可写表708中的记录的键与存储在只读表706中的记录的键不相交。
DBI 712可以被配置为通过检查从应用710接收的用于“TAB”表的写入查询(例如,更新、插入、删除查询)、接受(和执行)与键模式一致的查询(例如,如上所述,在可写表708上使用重定向写)、以及拒绝与键模式不一致的查询来禁止重复记录。不一致的查询将添加或修改可写表708中的记录,使得该记录不匹配键模式。DBI 712可以被配置为在键模式检查期间拒绝这种不一致的查询(并且针对这种不一致的查询可能发出运行时错误),以确保写入查询仅应用于可写表708而不是只读表706。尽管被描述为由DBI 712执行,但是键模式检查可以在其他地方(诸如,通过应用于可写表708和/或只读表706的附加表约束对象、数据库触发器或一些其他数据库组件)被执行。DBI 712可以被配置为检查复杂查询,诸如引用值范围的查询,以确保修改遵循键模式定义。
尽管示出WHERE子句语法,但是可以使用其他类型的定义来定义键模式。尽管租户键表716被示出为被包括在租户表704中,但是租户键定义也可以或者可替代地存在于共享数据库容器702中,如租户键表726所示。租户键定义可以存在于共享数据库容器702中,以便应用710或租户用户不能改变租户键定义。例如,视图(未示出)可以被包括在租户数据库容器704中,以提供对租户键表726的读取访问。如果租户键被包括在共享数据库容器702中,则如果多个租户每个具有相同的键模式定义,可以与多个租户共享租户键定义。如果一些租户具有不同的键模式定义,则共享数据库容器702中包括的租户键定义可以与(多个)特别的租户相关联(例如,使用租户识别符列或一些其他识别符)。
与重复记录问题的其他替代方法(诸如,允许重复记录的覆盖方法)相比,键模式的使用可能是有利的。利用覆盖方法,可以使用更复杂的联合视图(与联合视图714相比),这涉及使用优先级算法在可写表708和只读表706上用相同的键在多个记录中选择一个记录。然而,这种方法不能解决选择查询能够返回具有与刚删除的记录相同的键的记录的问题(例如,该删除可能已删除存储在不同表中的一个但不是两个重复记录)。可以使用方法来存储本地删除,以便以后过滤掉已在本地删除的共享数据,但这种方法会增加复杂性并可能影响性能。此外,如果共享内容被更新,则升级过程可能包括复杂性,因为可能需要为重复记录分析租户内容,并且可能需要做出关于租户本地记录是否由于与新运送的内容冲突而被移除的决定。
作为用于避免重复记录的替代方法的另一示例,系统700可以在可写表中的每个改变操作之后对只读表执行检查。然而,这种方法可能导致不可接受的性能下降。使用键模式而不是这些替代方法可以避免复杂性和性能问题。
在初始系统部署期间,可以使用键模式根据键模式定义来分割混合表数据。在安装共享数据库容器702时,系统700可以确保只读表706中没有内容与定义可写表708中包括的数据的键模式匹配。类似地,在安装租户数据库容器704(和其他租户数据库容器或数据库)时,系统700可以确保在可写表708中不包括与键模式不匹配的内容。键模式可以在其他生命周期阶段被使用,如下所述。
图8示出用于根据配置的租户键部署内容的示例系统800。通常,在系统生命周期中,会实行键模式定义,以确保租户不会写入与当前共享数据或将来可能被递送用于共享的数据冲突的数据。除了系统安装和应用执行之外,键模式定义还在系统生命周期的其他阶段被实行,诸如数据部署。当由供应商运送的新内容或内容更新时,诸如在更新或升级期间,会考虑内容分离和键实行,以确保供应商在软件生命周期事件期间向共享容器递送的数据不会与租户容器中创建的数据产生冲突。
例如,包含要部署到系统800的新记录的文件802可以被提供给内容部署工具804和内容部署工具806,用于分别部署到共享数据库容器808和租户数据库容器810。例如,文件802可以包括作为应用或数据库的新版本的结果将被添加到系统800的记录。内容部署工具804和806可以分别使用DBI812或DBI 814来分别将内容写入共享数据库容器808或租户数据库容器810。尽管被示为单独的内容部署工具804和806以及单独的DBI 812和814,但是在一些实施方式中,内容部署工具804和806是相同的工具和/或DBI 812和814是相同的接口。
内容部署工具804可以使用DBI 812从租户键表820读取与“TAB”混合表相关联的只读“/R/TAB”表818的WHERE子句816。WHERE子句816描述存在于租户数据库容器810中的“/W/TAB”可写表822中的键的模式,可写表822也与“TAB”混合表相关联。内容部署工具804可以确定文件802中的哪些记录与WHERE子句816不匹配,并且可以使用DBI 812将来自文件802的与WHERE子句816不匹配的记录写入只读表818,如注释824所示。与WHERE子句816不匹配的记录可以是要在租户之间共享而不被各个租户修改的记录。
例如,如注释826所示,内容部署工具804可以基于与“KF1like Z%”的WHERE子句816不匹配的“ww”键值,从文件802中读取具有对于“KF1”键值828的“ww”值的记录,并将其写入只读表818。DBI 812和/或只读表818可以被配置为允许内容部署工具804将内容写入只读表818,即使只读表818对于DBI 830从应用832接收的请求是只读的。例如,DBI 830和/或联合视图834可以被配置为允许(通过联合视图834)对只读表818的读取请求而不是写入请求。DBI 830可以是与DBI 812和/或DBI 814相同或不同的DBI。
内容部署工具806可以使用DBI 814从租户键表838读取与“TAB”混合表相关联的可写“/W/TAB”表822的WHERE子句836。尽管示出为与租户键表820分开,但是租户键表838可以是与租户键表820相同的表,并且可以存在于共享数据库容器808、租户数据库容器810或其他位置中。当内容部署工具806是与内容部署工具804相同的工具时,可以不执行WHERE子句836的单独读取,因为WHERE子句816可能已经被读取并且可以由内容部署工具806使用。与WHERE子句816类似,WHERE子句836描述存在于“/W/TAB”可写表822中的键的模式。内容部署工具806可以确定文件802中的哪些记录与WHERE子句836匹配,并且可以将来自文件802的与WHERE子句836匹配的记录写入可写表822,如注释840所示。例如,如注释842所示,基于“zz”键值与WHERE子句836匹配,可以将具有键值“zz”的记录写入可写表822。文件802中与WHERE子句836匹配的记录可以是稍后可以由与租户容器810相关联的租户修改的记录。
如上所述,文件802可以包括要写入只读表818和可写表822的数据。作为另一示例,内容部署工具804和/或内容部署工具806(或另一组件)可以创建两个文件用于内容递送,例如,用于可写表822的一个文件和用于只读表818的一个文件。当使用单独的文件时,内容部署工具806可以忽略可写表822的文件中与键模式不匹配的记录,或者可以对于这些记录发出错误。类似地,内容部署工具804可以忽略只读表818的文件中与键模式匹配的记录,或者可以对于这些记录发出错误。下面将在其他部分中更详细地描述内容部署。
图9示出用于改变租户键的示例系统900。例如,当发布新版本的应用和/或数据库时,可以改变租户键。例如,应用开发人员可以改变可以由租户应用写入的键值的范围。作为另一示例,数据库系统可能已经在应用的当前或先前版本的执行期间检测到试图用与当前键模式不匹配的键来写入记录。开发人员或管理员可以查看此类尝试的日志,并确定允许将来使用这些键来写入记录。
租户数据库容器907中的租户键表906中的当前记录904具有的值908“A”(针对活动),其指示当前记录904中的WHERE子句910是对可写表902中的记录的键值的当前配置描述。例如,WHERE子句910“KF1LIKE Z%”指示可写表902中的键值以字母“Z”开头。管理员可能期望改变租户键表906,以便在可写表902中允许具有以“Z”或“Y”开始的键值的记录。
可以向约束改变工具914提供包括新WHERE子句的文件912(或其他电子数据输入)。约束改变工具914可以使用DBI 916将记录918添加到包括文件912中包括的新WHERE子句的租户键表。例如,添加的记录918中包括“KF1LIKE Z%OR KF1LIKE Y%”的新WHERE子句920。添加的记录918包括针对“非活动”的活动/非活动值922“I”。如下所述,在共享数据库容器926中的可写表902和只读表924已经被更新为符合新WHERE子句920之后,添加的记录918可以被标记为活动。
如上所述,租户键可以存在于租户数据库容器907中(如租户键表906所示)和/或共享数据库容器926中(如租户键表928所示)。约束改变工具930(其可以是与约束改变工具914相同或不同的工具)可以使用DBI 931将具有新WHERE子句的新记录932添加到租户键表928,如上面对于添加的记录918所描述的。DBI 931可以是与DBI 916相同或不同的接口。
图10示出用于更新数据库记录以符合更新的租户键的示例系统1000。更新的租户键由包括在租户键表1006中的非活动记录1004中包括的新WHERE子句1002描述。非活动记录1004是活动租户键记录1008的替换记录。如下面更详细描述的,约束改变工具1010可以更新共享数据库容器1014中的只读表1012和租户数据库容器1016中的可写表1015中的记录,以符合新WHERE子句1002。
约束改变工具1010可以使用DBI 1020从非活动的租户键记录1004读取新WHERE子句1002(例如,如注释1022所示)。约束改变工具1010可以使用DBI 1020从只读表1012中删除与新WHERE子句1002匹配的记录。例如,如注释1024所示,具有键值“YY”(例如,包括在图9的只读表924中)的记录已从只读表1012中删除,并且不再包括在只读表1012中。由于记录与活动租户键记录1008中包括的先前WHERE子句“KF1LIKE Z%”不匹配,因此先前允许键值为“YY”的记录在只读表924中。
约束改变工具1026(其可以与约束改变工具1010相同或不同)可以使用DBI 1029(其可以与DBI 1020相同或不同)从可写表1015中删除与WHERE子句1002不匹配的记录。约束改变工具1028可以从租户键表1006读取WHERE子句1002,或者可以从租户数据库容器1016中的租户键表1034中的非活动租户键记录1032读取WHERE子句1030。
WHERE子句1030描述以“Z”或“Y”开头的键的键模式。可写表1015与图9的可写表902相同(例如,没有记录被删除),因为可写表1015中的两个记录都具有以“Z”开头的键(例如,可写表902中没有与WHERE子句1030不匹配的记录)。在与WHERE子句1030不匹配的任何记录已经从可写表1015中删除并且与WHERE子句1002匹配的任何记录已经从只读表1012中删除之后,约束改变工具1010(和/或约束改变工具1028)可以读取包括指示要在只读表1012和可写表1015之间移动的数据的信息的文件1036,以完成对系统1000的更新以符合更新的租户键。下面更详细地描述文件1036的处理。
在一些实施方式中,约束改变工具1010可以查询只读表1012和/或可写表1015以提取要移动的记录,而不是使用文件1036来存储要在只读表1012和可写表1015之间移动的数据。例如,约束改变工具1010可以提交“insert into/W/TAB(select*from/R/TAB where(KF1LIKE Z%OR KF1LIKE Y%))”的查询,以将与新WHERE子句1002匹配的记录从只读表1012移动到可写表1015。作为另一示例,约束改变工具1010可以提交“insert into/R/TAB(select*from/W/TAB where not(KF1LIKE Z%OR KF1LIKE Y%))”的查询,以将与新WHERE子句1002不匹配的记录从可写表1015移动到只读表1012。然而,在一些实施方式中,由于租户可能已经修改了可写表1015中的数据,所以没有从可写表1015中选择内容用于包括在只读表1012中。
图11示出用于使用传输文件1102更新数据库记录以符合更新的租户键的示例系统1100。传输文件1102对应于文件1036,并且包括要在共享数据库容器1106中的只读表1104和租户数据库容器1110中的可写表1108之间移动的数据。约束改变工具1112可以从传输文件1102读取与租户键表1118中的非活动记录1116中包括的WHERE子句1114不匹配的记录。约束改变工具1112可以使用DBI 1120将来自传输文件1102的与WHERE子句1114不匹配的记录部署到只读表1104。在图11的示例中,传输文件1102中没有与WHERE子句1114不匹配的记录,因此没有新记录被部署到只读表1104。
约束改变工具1122(其可以与约束改变工具1112相同或不同)可以从传输文件1102读取与WHERE子句1114匹配的记录。约束改变工具1122可以从租户键表1118读取WHERE子句1114,或者可以从租户数据库容器1110中的租户键表1128中的非活动租户键记录1126读取WHERE子句1124。约束改变工具1122可以使用DBI 1130(其可以与DBI 1120相同或不同)将来自传输文件1102的与WHERE子句1114匹配的记录部署到可写表1108。在图11的示例中,具有键值“YY”(与WHERE子句1114匹配)的记录被包括在传输文件1102中,并被部署到可写表1108,如记录1132和注释1134所示。在传输文件1102中的记录已被部署到可写表1108和/或只读表1104之后,非活动记录1116被改变为租户键表1118中的活动记录,如下所述。
图12示出用于更新活动租户键记录的示例系统1200。约束改变工具1202可以更新共享数据库容器1206中的租户键表1204。在一些实施方式中,额外地或可替代地,约束改变工具1208对租户数据库容器1212中的租户键表1210进行类似的改变。约束改变工具1202可以向DBI 1216提交删除查询1214,以删除租户键表1204中的一个或多个活动条目。例如,空(删除的)条目1218表示图10的现在删除的活动租户键记录1008。约束改变工具1202可以向DBI 1216提交更新查询1219,以将先前非活动租户键记录(例如,图10的非活动租户键记录1004)改变为活动租户键记录,如包括“活动”的值“A”的更新的租户键记录1220所示。
例如,可以在部署过程期间将非活动键记录标记为非活动,并且可以在部署过程完成时将其标记为活动。一旦更新的租户键记录1220处于活动,租户应用就可以写入与现在活动记录中包括的WHERE子句1222匹配的新记录。例如,租户应用可以将具有键值“Y1”的记录写入租户数据库容器1212中的可写表1224,如新记录1226和注释1228所示。下面更详细地描述租户键的更新以及其他类型的部署改变。
系统共享类型
如上所述,可以支持不同的系统共享类型,诸如不实施多租户的标准系统设置和实施多租户的共享/租户设置。可以支持系统共享类型之间的过渡,其中系统共享类型的改变对应用是透明的。
图13A示出示例系统1300,其包括具有标准系统共享类型的标准系统1302和具有共享/租户系统共享类型的共享/租户系统1304。标准系统1302包括只读表“TABR”1306、可写表“TABW”1308和具有本地写入的只读表“TAB”1310,全部包括在单一数据库容器1312中。在部署期间,部署工具1314可以将数据部署到表1306、1308和1310中的每一个。
表1306、1308、和1310是示例性的。标准系统共享类型系统可以包括不同表类型的表的其他组合,包括给定类型的表的多个实例。例如,标准系统共享类型系统1302可以包括多个只读表、多个可写表和/或具有本地写表的多个只读表。
共享/租户系统1304包括共享数据库容器1316和租户数据库容器1318。如上所述,共享数据库容器1316包括对应于只读表1306的只读表1320,并且租户数据库容器1318包括对应于可写表1308的可写表1322。共享数据库容器1316中的只读表1324和租户数据库容器1318中的可写表1326对应于具有本地写入的只读表1310。视图1328提供对只读表1320的读取访问,并且联合视图1330提供对只读表1324和可写表1326的统一访问。
在部署期间,部署工具1332可以将数据部署到包括在共享数据库容器1316中的只读表1320和只读表1324。部署工具1334可以将数据部署到包括在租户数据库容器1318中的可写表1322和可写表1326。尽管示出为两个单独的部署工具,但是在一些实施方式中,部署工具1332和部署工具1334是相同的工具。
图13B是示出可以对标准1352、共享1354和租户1356数据库容器执行的处理的表1350。多租户系统中的处理的类型可以包括数据库(database,DB)对象创建1358、DB内容部署1360和由(多个)应用1362的写入操作。例如,如单元1364中所述,可以在标准数据库容器1352中创建只读(RO)、可写(RW)和混合(RO+WL)表。单元1366指示在共享容器1354中仅创建可共享对象,诸如只读表或混合表的只读部分(例如,当混合表被分割时创建的只读表)。单元1368指示在租户数据库容器1356中创建本地表(例如,对给定租户是本地的)。例如,租户数据库容器1356可以包括可写表(RW)和混合表的可写部分(例如,RO+WL,名为/W/TAB,诸如当混合表被分割时创建的可写表)。租户容器1356还可以包括对共享容器1354中的只读表的视图,以及混合表的只读和可写部分上的联合视图。
单元1370指示部署工具可以将内容部署到标准数据库容器1352中包括的所有表。部署工具可以将内容部署到共享数据库容器1354中的共享表(例如,只读表或混合表的只读部分),如单元1372所示。单元1374指示部署工具可以将内容部署到租户数据库容器1356中的本地表。部署到混合表可以包括将表写入重定向到混合表的可写部分。
租户应用可以写入标准数据库容器1352中的所有对象(例如,如单元1376中所述)。单元1378指示不允许租户应用写入共享数据库容器1354中的表。单元1380指示租户应用可以将内容写入租户数据库容器1356中的本地表,包括可写表和混合表的可写部分。可以将混合表上的应用写入重定向到混合表的可写部分。
图14示出用于从标准系统1401过渡到共享/租户系统1402的系统1400。标准系统1401包括数据库容器1403,该数据库容器1403包括只读表1404、可写表1405和混合表1406。数据库容器1403可以与租户相关联,并且出于讨论的目的,其具有名称“租户”。如流程图1407所述,可以执行将租户的标准系统1401过渡到共享/租户系统1402。
在1408处,创建共享数据库容器1410,以包括在共享/租户系统1402中。包括在标准系统1401中的数据库容器1403可以被用作共享/租户系统1402中的租户数据库容器1414。也就是说,数据库容器1403是过渡前(pre-transition)例示,并且租户数据库容器1414是用于租户的租户数据库容器的过渡后(post-transition)例示。
在1416处,对与租户相关联的租户数据库用户授权对共享数据库容器1410的访问。
在1418处,只读表1420(例如,具有“shared./R/TABR”的路径/名称)在共享数据库容器1410中被创建。
在1422处,从包括在数据库容器1403中的只读表1404(例如,具有“tenant.TABR”的路径/名称的表对象)复制数据到只读表1420(例如,“shared./R/TABR”)。
在1424处,只读表1404(例如,“tenant.TABR“)被丢弃。因此,在过渡结束时,租户数据库容器1414中不包括只读表1404。
在1426处,在租户数据库容器1414中创建视图1428(例如,“tenant.TABR”),以提供对只读表1420的读取访问。
在1430处,在共享数据库容器1410中创建只读表1432(例如,“shared./R/TAB”)。
在1434处,从混合表1406(例如,“tenant.TAB”)复制与为租户内容定义的键模式不匹配的数据到只读表1432(例如,“shared./R/TAB”)。换句话说,将要在租户之间共享并且不是租户特定的数据从混合表1406复制到共享数据库容器1410中的只读表1432。
在1436处,从混合表1406(例如,“tenant.TAB”)删除与为租户内容定义的键模式不匹配的数据(例如,在操作1434中复制的数据)。
在1438处,混合表1406(例如,“tenant.TAB”)被重命名为“tenant./W/TAB”,作为可写表1440包含在租户数据库容器1414中,用于存储租户特定的内容。保留在可写表1440中的记录应该是与为租户内容定义的键模式匹配的记录。可写表1405未经修改地作为可写表1442被包括在租户数据库容器1414中,用于存储过渡后的租户内容。
在1444处,联合视图1446(例如,“tenant.TAB”)在只读表1432(例如,“shared./R/TAB”)和可写表1440(例如,“tenant./W/TAB”)上被创建,以提供对只读表1432和可写表1440的统一访问。
由于跨数据库容器访问和数据移动以及其他问题,从标准系统1401直接过渡到共享/租户系统1402可能需要比某些情况下期望的更多的时间。在一些实施方式中,不能简单地重命名数据库对象以将数据库对象从一个数据库容器容器移动到另一数据库容器。哪些表是只读、混合或可写的改变以及键模式的改变可能会导致数据和表移动。例如,将表改变为只读或混合可以导致数据从租户数据库容器移动到共享数据库容器。
为了提高应用开发和测试期间的性能,在最终部署之前,可以使用模拟模式来模拟对于应用和对于内容部署的数据共享。模拟模式涉及将所有数据库对象存储在一个数据库容器中,并模拟只读/共享访问,以及为适当的数据库对象重定向写入操作。
使用一个数据库容器可以使得能够重命名数据库对象,以模拟向共享系统设置的过渡。如果应用在模拟模式下按预期执行,则可以执行过渡以将数据库系统从模拟模式过渡到共享系统设置。如下面在图15至图17中讨论的,将数据库系统从标准系统设置过渡到模拟模式以及将数据库系统从模拟模式过渡到共享系统设置包括比将数据库系统从标准系统设置直接过渡到共享系统设置更多的DDL(Data Definition Language,数据定义语言)语句和更少的DML(Data Manipulation Language,数据操纵语言)语句。
图15示出具有模拟的共享类型的系统1500。部署控制系统1502可以使用部署工具1504通过将数据导入模拟数据库容器1505来模拟租户数据的导入。例如,部署工具1504可以使用DBI 1506将数据部署到包括在模拟数据库容器1505中的可写表1508和可写表1510。部署控制系统1502可以使用部署工具1514(其可以与部署工具1504相同或不同)通过将数据导入模拟数据库容器1505来模拟共享数据的导入。例如,在模拟中,部署工具1514可以使用DBI 1516(其可以是与DBI 1506相同或不同的接口)来将共享数据部署到只读表1518和只读工具1520,该只读表1518和只读工具1520被包括在也包括可写表1508和可写表1510的同一模拟数据库容器1505中。视图1522提供对只读表1520的读取访问。联合视图1524提供对只读表1518和可写表1508的统一访问。
共享模式的模拟可以通过使用DBI 1526禁用对只读表(诸如只读表1518)的应用写入访问来实现,将为联合视图1524接收的应用写入查询重定向到可写表1508,如果要修改的记录与定义的键模式匹配,则使用只读视图1522提供对只读表1520的应用读取访问,并使用联合视图1524提供对只读表1518(以及可写表1508)的应用读取访问。
图16示出用于从标准系统1602过渡到模拟系统1604的系统1600。在流程图1606中描述从标准系统1602到模拟系统1604的过渡。在1608处,包括在数据库容器1612中的只读表1610从“TABR”被重命名为“/R/TABR”,如模拟数据库容器1616中的只读表1614所示。包括在标准系统1602中的数据库容器1612可以被用作模拟系统1616中的模拟数据库容器1616。也就是说,数据库容器1612是过渡前的例示,并且模拟数据库容器1616示出过渡后的容器内容。
在1618处,在只读表1614上创建视图1620。
在1622处,包括在数据库容器1612中的“TAB”混合表1624被重命名为“/R/TAB”,如包括在模拟数据库容器1616中的混合表1626所示。
在1628处,在模拟数据库容器1616中创建混合表“/W/TAB”1630。
在1632处,根据租户内容定义将数据从只读表1626移动到可写表1630。例如,与为租户内容定义的键模式匹配的租户特定的数据从只读表1626移动到可写表1630。
在1634处,在只读表1626和混合表1630上创建联合视图1636。包括在数据库容器中的可写表1638保持包括在模拟数据库容器1616中,如可写表1640所示。
图17示出用于从模拟系统1702过渡到共享/租户系统1704的系统1700。模拟系统1702包括模拟容器1706,其包括只读表1708、只读表1710、可写表1712、只读表1708上的视图1714、只读表1710和可写表1712上的联合视图1716以及可写表1717。在流程图1718中描述从模拟系统1702到共享/租户系统1704的过渡。
在1720处,将只读“/R/TABR”表1708移动到包括在共享/租户系统1704中的共享容器1722,如只读表1724所示。
在1726处,为只读表1724(例如,“shared./R/TABR”)重新创建视图1727,如租户容器1728中所示。例如,当移动只读表1708时,视图1714可能变得无效或被删除。租户容器1728是模拟容器1706的过渡后视图。也就是说,一旦过渡完成,模拟容器1706可以充当对于租户的容器,其中租户容器1728是示出在过渡完成之后的容器内容的例示。
在1730处,将只读“/R/TAB”表1710从模拟容器1706移动到共享容器1722,如只读表1732所示。
在1734处,在只读表1732和对应于可写表1712的可写表1738上重建联合视图1736。例如,当只读表1710被移动到共享容器1722时,联合视图1716可能变得无效或被删除。可写表1740对应于可写表1717(即可写表1717保持不变并且在过渡后被包括在租户容器1728中)。
图18示出用于从共享/租户系统1802过渡到标准系统1804的系统1800。例如,如果跨容器访问引起不可接受的性能下降,或者,例如,如果确定不存在足够的共享内容来保证多租户,则可能发生这种过渡。
共享/租户系统1802包括共享数据库容器1806和过渡前租户数据库容器1808。标准系统1804包括过渡后数据库容器1810。过渡后数据库容器1810是过渡前租户数据库容器1808的过渡后例示。共享容器1806在过渡后不在标准系统1804中使用。
在流程图1812中描述从共享/租户系统1802到标准系统1804的过渡。
在1814处,“tenant./W/TABR”表1815在过渡后租户数据库容器1810中创建(由于表1815在以后的操作中被重命名,因此“/W/TABR”表名被划掉)。
在1816处,从共享数据库容器1806中的只读表1818(例如,“shared./R/TABR”)复制数据到表1815。
在1820处,只读表1818(例如,“shared./R/TABR”)从共享数据库容器1806中被丢弃。
在1822处,丢弃已经为只读表1818配置的视图1824(例如,过渡后数据库容器1810不包括视图)。
在1826处,“tenant./W/TABR”表被重命名为“tenant.TABR”,如表1815的更新“TABR”名称所示。
操作1814、1820、1822和1826中描述的只读数据的处理可替代地通过替代流程图1828中描述的处理来执行。例如,在1830处,可以丢弃视图1824。在1832处,可以在数据库容器1820中创建名为“TABR”的表1815。在1834处,可以将数据从只读表1818复制到“TABR”表1815。
继续流程图1812,在1836处,从共享数据库容器1806中的只读表1838复制数据(例如,“shared./R/TAB”)到过渡前租户容器1808中的可写表1840(例如,“tenant./W/TAB”)。也就是说,先前已被分割成共享只读表1838和可写表1840的记录现在被包括在可写表1840中。
在1842处,从过渡前租户数据库容器1808中丢弃联合视图1844(例如,过渡后数据库容器1810不包括联合视图)。
在1846处,可写表1840(例如,“tenant./W/TAB”)被重命名为“tenant.TAB”,如过渡后数据库容器1810中的表1848所示。包括在过渡前租户数据库容器1808中的可写表1850保持不变,并且被包括在过渡后数据库容器1810中,例如,作为可写表1852。
图19示出用于从模拟系统1902过渡到标准系统1904的系统1900。例如,如果在模拟系统设置中检测到问题,并且开发人员希望在标准系统设置中调试(debug)问题,则可以发生从模拟的系统共享类型到标准的系统共享类型的过渡。
模拟系统1902包括过渡前模拟数据库容器1906。标准系统1904包括过渡后租户数据库容器1908。过渡后租户数据库容器1908是过渡前模拟数据库容器1906的过渡后例示(例如,过渡后租户数据库容器1908和过渡前模拟数据库容器1906可以是相同的容器,每个容器具有不同的内容和不同的时间点)。
在流程图1912中描述从模拟系统1902到标准系统1904的过渡。
在1914处,丢弃只读表1918上的视图1916(例如,过渡后租户数据库容器1908不包括视图)。
在1920处,将只读表1918从名为“/R/TABR”重命名为“TABR”,如过渡后租户数据库容器1908中的只读表1922所示。
在1924处,将内容从“/R/TAB”只读表1926复制到“/W/TAB”可写表1928。也就是说,先前已被分割成只读表1926和可写表1928的记录现在被包括在可写表1928中。
在1930处,从过渡前模拟数据库容器1906中丢弃“TAB”联合视图1932(例如,过渡后租户数据库容器1908不包括联合视图)。
在1934处,可写表1928从“/W/TAB”重命名为“TAB”,如包括在过渡后租户数据库容器1908中的可写表1936所示。
操作1924、1930和1934中描述的可写数据的处理可替代地通过替代流程图1938中描述的处理来执行。例如,在1940处,可以将内容从可写表1928复制到只读表。在1942处,可以丢弃“TAB”视图1932。在1944处,只读表1926可以从“/R/TAB”被重命名为“TAB”,以成为可写表1936。
包括在过渡前模拟数据库容器1906中的可写表1946保持不变,并且被包括在过渡后租户数据库容器1908中,例如,作为可写表1948。
通过交换共享数据库容器进行部署
在系统生命周期中(诸如在维护和升级阶段期间),可能需要将改变部署到系统。例如,改变可以包括紧急补丁、热修复、服务包和发布升级。改变可以包括新内容、新表、已修改内容或可能需要部署到共享数据库容器和/或租户数据库容器的其他改变。部署(诸如补丁)可以是仅共享的补丁。例如,补丁可以包括对供应商提供的对象(诸如报表、类、模块或仅在共享数据库容器中的其他对象)的改变。其他部署可能包括对共享数据库容器和租户数据库容器中的数据进行的改变。例如,给定软件对象可以包括存储在共享数据库容器和/或租户数据库容器中的数据。
当将改变部署到多租户数据库系统时可能出现挑战,因为如果在线共享数据库容器被改变,则这些改变对于租户应用是可见的。这些改变可能会导致不一致和/或应用错误。如果租户数据引用或依赖的共享内容被改变,则通常也应改变所有连接的租户,以确保租户的一致性。为了避免不一致和错误,可以升级租户,这可能涉及让租户离线。升级租户可以包括部署至少部分存储在租户数据库中的对象以及对与共享对象相关的租户对象的后处理。
如果特别租户出现问题,则可以尝试在预定的停机时间窗口期间纠正问题。如果在可用的停机时间窗口期间无法纠正问题,则可以还原租户连接到共享容器的更早版本并使其重新在线。然而,如果只使用一个共享数据库容器,则需要连接到更早版本的共享容器的租户可能会向已连接到新版本的共享容器的租户提出挑战。一种部署方法可以是,在部署相应租户中出错时,将所有租户还原到以前的版本,稍后再次尝试为所有租户部署。然而,这种方法可能导致不期望的停机时间。
为了解决不期望的租户停机时间问题,可以在部署改变时使用不同类型的方法,以单独升级租户并暂时对尚未升级的租户隐藏改变。在第一种方法中,如果部署包括诸如利用紧急补丁对系统中相对较小百分比的表的改变,则可以对现有生产共享数据库容器和现有生产租户数据库容器进行改变。在第二种方法中,如果要对相对较大数量的表进行改变,诸如在主发布(feature release)期间,则可以使用交换共享容器的方法,以便新共享数据库容器在插入系统中时包括改变的数据。新共享数据库容器可以与现有共享数据库容器被并行插入系统中。租户数据库容器可以被单独改变以连接到新共享数据库容器。下面更详细地描述两种方法。
如上所述,利用交换共享数据库容器方法,用新版本现有共享数据库容器,并且在连接的租户中调整内容。替换方法避免了现有共享容器升级,这可以减少过多的部署运行时间。部署新共享数据库容器,租户被链接到新共享数据库容器,并且可以删除旧共享数据库容器。在部署期间,新共享数据库容器与旧共享数据库容器被并行部署,以便租户可以同时访问这两个容器。
两个共享数据库容器同时可访问允许在“正常运行时间”期间部署新共享容器,因为租户仍然可以有效地使用旧共享数据库容器。然后可以单独升级租户(单独升级或潜在地并行升级多个租户,但每个租户都独立升完成级)。单个租户升级可以允许每个租户定义单个停机时间窗口。一个租户升级的问题不需要延长其他租户的停机时间。两个共享数据库容器同时可访问还允许一些租户使用旧共享数据库容器临时保留在旧版本的软件上,而一些租户使用具有新共享数据库容器的新版本的软件。
在特别租户的更新期间,丢弃从旧共享数据库容器读取的视图,并且从新共享数据库容器读取新视图。执行后续动作以将剩余内容部署到租户。例如,如果对象部分存储在共享数据库容器中,以及部分存储在租户数据库容器中,则可以将与共享数据库容器一起递送的对象的补充部署到租户。此外,可以在租户中执行后续活动,如下面更详细描述的。
图20示出系统2000,其包括共享数据库容器2002和租户数据库容器2004两者中的对象的数据。业务应用中使用的对象可以被存留(persist)在一组数据库表中。对象可以由供应商运送给顾客,并且顾客也可以创建自定义对象(例如,类、配置、用户界面)。用于对象的存留的表可以是所有相同的表类型(例如,只读、混合、可写)。因此,一些对象可能具有仅在共享数据库容器2002中或仅在租户数据库容器2004中的数据。作为另一示例,对象可以将数据存储在不同类型的表中,诸如,如果多个对象重新使用表来存储数据(例如,用于文档或文本元素)。因此,一些对象可能具有共享数据库容器2002和租户数据库容器2004中的数据。因此,对象部署可以被分割为两部分:到共享数据库容器的部署和到(多个)租户数据库容器的部署。
共享数据库容器2002包括只读表T1#1 2006和存储名为T2的混合表的只读记录的只读表2008T2#1。租户数据库容器2004包括可写表2010和存储T2混合表的可写租户记录的可写表2012。
样式键(style key)2014示出用于标记共享数据库容器2002和租户数据库容器2004中的条目的虚线样式2016,这些条目对应于包括供应商和顾客数据的第一对象。例如,第一条目2018和第二条目2020分别表示在共享数据库容器2002中为只读表2006和只读表2008中的第一对象存储的共享供应商数据。第三条目2024表示在租户数据库容器2004中为可写表2010中的第一对象存储的租户数据。在该示例中,第一对象不将数据存储在可写表2012中。
样式键2014示出用于标记租户数据库容器2004中的条目2028和2030的虚线样式2026。条目2028和2030分别表示为可写表2012和可写表2010中的第二对象存储的租户数据。第二对象是顾客对象,其中包括可写顾客数据,并且没有共享的只读数据。
图21A示出用于部署对数据库系统中的对象的改变的示例系统2100。部署工具2102可以从部署数据文件2104中确定哪些对象具有要部署的改变,哪些表将随着给定对象的改变而更新,以及每个对象是否要对共享数据库容器2106、租户数据库容器2108或共享数据库容器2106和租户数据库容器2108两者进行改变。例如,部署工具2102可以从部署文件2104中的信息确定对象“R”2110包括TR1表2112和TR2表2114中的数据。部署工具2102可以从共享类型表2116(其可以存在于共享数据库容器2106或其他位置中)中的元数据来确定TR1表2112和TR2表2114是只读表。因此,部署工具2102可以确定对象“R”是完全共享的表(例如,仅存在于共享数据库容器2106中),如注释2118所示。
作为另一示例,部署工具2102可以从部署文件2104中的信息确定对象“M”2120包括TR1表2112、T2表和T3表2122中的数据。部署工具2102可以从共享类型表2116中的元数据确定TR1表2112是只读表并且T3表2122是本地表。部署工具2102可以确定T2表是分割表(并且因此被实施为在共享数据库容器2106中的只读表2123和在租户数据库容器2108的可写表2124)。部署工具2102可以确定对象“M”的内容在共享数据库容器2106和租户数据库容器2108之间被分割,如注释2125所示。
作为又一示例,部署工具2102可以从部署文件2104中的信息确定对象“L”2126包括A1表2128、A2表2130、A3表2132和A4表2134中的数据。部署工具2102可以从共享类型表2116中的元数据确定A1表2128、A2表2130、A3表2132和A4表2134都是本地表。因此,部署工具2102可以确定对象“R”是完全租户表(例如,仅存在于租户数据库容器2108中),如注释2136所示。
在部署期间,部署工具2102可以跟踪部署状态,并且可以知道已经部分或完全部署了哪些对象。例如,部署工具2102可以更新部署状态表2138,该部署状态表2138指示在当前时间点处,对象“R”2110已经完全被部署、对象“M”2120已经部分被部署、并且对象“L”还没有被部署。
当使用交换共享数据库方法时,当安装新共享数据库容器时,仅存在于共享数据库容器2106中的对象被更新。因此,如注释2140所示,部署工具2102不将内容部署到现有共享数据库容器2106,而是共享数据库容器内容在新共享数据库容器中可用(图21A中未示出)。当准备新共享数据库容器时,可以更新和填充部署状态表2138,以指示例如完全共享的对象“R”已经被部署(例如,已经在新共享数据库容器中)、对象“M”已经部分被部署(例如,在部署开始时,在TR1表2112和T2表2123中,对象“M”的共享部分已经在新共享数据库容器中)、并且对象“L”还没有被部署。对象“M”的剩余部分和对象“L”将作为租户部署的一部分被部署。
对租户的部署可以包括部署存储在本地表或混合表的本地部分中的对象部分。例如,将对象“M”部署到租户可以包括将数据部署到可写表2124和/或本地表2122。将对象“L”部署到租户可以包括部署到本地表A1 2128、A2 2130、A3 2132和A4。租户部署还可以包括丢弃对共享数据库容器2106的视图(例如,视图2142、2144、2146和2148)以及更新诸如联合视图2150的联合视图。
图21B示出用于将部署对数据库系统中的对象的改变的示例系统2180。系统2180是当部署使用修改而不是交换现有共享数据库容器的方法时(例如,在紧急补丁的部署期间)系统2100的例示。如注释2184所示,部署工具2186(其可以与部署工具2102相同)可以将部署对完全或部分存储在共享数据库容器2106中的对象的改变。例如,对共享数据库容器2106的部署可以包括在部署对象“R”时对只读表2114和只读表2112进行适当的修改以及在部署对象“M”时对只读表2114和只读表2122进行适当的修改。随着部署过程的进行,可以更新部署状态表2138。下面更详细地描述补丁的部署。
图22示出使用交换共享数据库容器方法升级多租户数据库系统2202的示例系统2200。多租户数据库系统2202包括各自连接到共享数据库容器2208的第一租户数据库容器2204和第二租户数据库容器2206,其中第一租户数据库容器2204、第二租户数据库容器2206和共享数据库容器2208中的每一个处于特别版本(例如,版本“1708”)。同样处于版本“1708”的第一应用服务器2210向第一租户数据库容器2204发送对第一租户数据库容器2204和/或共享数据库容器2208中的数据的查询。类似地,同样处于版本“1708”的第二应用服务器2212向第二租户数据库容器2206发送对第二租户数据库容器2206和/或共享数据库容器2208中的数据的查询。
当要部署应用和/或数据库的新版本时,可以在数据库系统2222中部署处于新版本(例如,版本“1711”)的新共享数据库容器,该新共享数据库容器包括与当前版本相比的共享数据库容器改变,如新共享数据库容器2220所示。新共享数据库容器2220以及当前版本(例如,版本“1708”)共享数据库容器2224并行地被包括在数据库系统2222中。命名约定可用于命名新共享数据库容器2220和当前版本共享数据库容器2224,以确保共享数据库容器名称的唯一性。例如,可以使用产品名称和版本号的组合来命名共享数据库容器。
租户可以一次一个地被链接到新共享数据库容器2222。例如,第二应用服务器2226和第二租户数据库容器2228已经升级到新版本(例如,版本“1711”),其中第二租户数据库容器2228现在被链接到新共享数据库容器2220。第一应用服务器2230和第一租户数据库容器2232仍然处于旧版本(例如,版本“1708”),并且第一租户数据库容器2232仍然连接到当前版本共享数据库容器2224。可以将第一租户数据库容器2232识别为要升级的下一个租户数据库容器。
例如,数据库系统2240包括第一租户数据库容器2242和现在处于新版本的第一应用服务器2244(例如,版本“1711”),其中连接到新共享数据库容器2244的第一租户数据库容器2242现在也处于新版本。旧数据库容器(例如,当前版本数据库容器2224)已被丢弃,并且不包括在数据库系统2240中,因为所有租户现在都连接到新共享数据库容器2242。
图23示出用于将新服务包(service pack)部署到多租户数据库系统的示例系统2300。系统2300包括处于版本“1711”的现有共享数据库容器2302和服务包2(service packtwo,SP2)。对于第一租户的应用服务器2304和租户数据库容器2306也处于版本“1711”和SP2。现有共享数据库容器2302、租户数据库容器2306以及各自包括的组件以实线示出,以表示处于版本“1711”和SP2。视图2308提供对现有共享数据库容器2302中的TABR只读表2310的访问。由应用服务器2312服务的第二租户已经升级到新服务包级别(SP3),如下所述。
部署工具2314可以将已经被配置为处于下一个服务包(SP3)的新共享数据库容器2316附加到系统2300。新共享数据库容器2316包括新TABR只读表2318,该只读表2318包括对新服务包的改变。当升级第二租户时,部署工具2314可以从租户数据库容器2319中丢弃对现有共享数据库容器2302中的TABR只读表2310的视图,并向新共享数据库容器2316中的新TABR只读表2318添加新视图2320。部署工具2314可以将改变导入可写表2322,使得可写表2322处于新服务包级别。租户数据库容器2319、新共享数据库容器2316以及各自包括的组件以虚线示出,以表示处于SP3。部署工具2314可以在稍后的时间处执行类似于为第二租户完成的部署操作的部署操作以升级第一租户,使得两者都在SP3处。现有共享数据库容器2302可以在所有租户已经升级之后被丢弃。
图24示出用于维护数据库系统2401的示例系统2400。在准备部署时,可以使用服务包(service pack,SP)主控2402来创建递送套装(package)。例如,SP主控2402可以被用于在将SP1服务包部署到数据库系统2401时创建递送套装2404。例如,SP1共享数据库容器2406和租户数据库容器2408、2410和2412各自处于SP1级别。SP1共享数据库容器和租户数据库容器2408、2410和2412可以被称为群集。递送套装2404可以是为过去部署到集群而创建的。递送套装2404包括SP1共享数据库容器2406的副本2414和传输文件2416,该传输文件2416包括在部署SP1服务包期间已导入到租户数据库容器2408、2410和2412的改变。
SP主控2402可以创建新递送套装2418,其包括新SP2共享数据库容器2420和传输文件2422,该新SP2共享数据库容器2420和该传输文件2422包括对新服务包(SP2)的改变。新SP2共享数据库容器2420可以被附接到数据库系统2401,如附加的SP2共享数据库容器2424所示。
租户数据库容器2408、2410和2412中的对象(诸如视图)可以从SP1共享数据库容器2406分离并连接到附接的SP2共享数据库容器2424。传输文件2422可以被应用于租户数据库容器2408、2410和2412,以将它们升级到SP2级别。在升级所有租户之后,可以丢弃SP1共享数据库容器2406。
图25示出用于将多租户系统2502升级到新版本的示例系统2500。多租户系统2502处于从旧“1708”版本升级到新“1711”版本的部分完成的状态。如系统2500中所示,在相同的给定时间,一些租户可以在生产中使用先前(例如,“开始”)发布的共享数据库容器,而其他租户使用新(例如,“目标”)发布的共享数据库容器,同时还有其他租户离线并升级到新发布。
例如,多租户系统2502包括版本“1708”共享数据库容器2504。租户数据库容器2506和2508(例如,分别为“租户01”和“租户02”)也处于版本“1708”并且被连接到版本“1708”共享数据库容器。租户数据库容器2510和2512(例如,分别为“租户05”和“租户06”)已被转换为版本“1711”,并且现在被连接到版本“1711”共享数据库容器2513,该共享数据库容器2513在升级期间被添加到多租户系统2502。租户数据库容器2514和2516(例如,分别为“租户03”和“租户04”)当前正在被升级。
在流程图2520中概述给定租户的升级过程的概况。在2522处,给定租户在停机期开始时被备份。例如,已经创建了租户数据库容器2514的备份2524和租户数据库容器2516的备份2526。
在2528处,建立到新(例如,版本“1711”)共享数据库容器2513的链接。例如,可以建立新视图,如下面在图26-图29中更详细地描述的。
在2530处,将增量(delta)部署到租户。增量可以被包括在传输文件中,并且可以包括要被应用于给定租户数据库容器中的表的改变。
在2532处,确定部署是否成功。如果部署未成功,则执行处理操作2534。处理操作2534包括:在2536处恢复备份(例如,在版本“1708”处,诸如租户数据库容器2514的备份2524);在2538处建立到旧(例如,“版本1708”)共享数据库容器2504的链接;并且在2540处将给定租户在旧版本“1708”上发布给顾客。在2538处建立链接可以包括将视图恢复到“版本1708”共享数据库容器2504中的表。可以在稍后重新尝试部署。如果部署成功,则在2542处,将租户新版本“1711”上发布给新顾客。
图26至图31进一步详细地逐步示出使用交换共享数据库容器方法将数据库系统升级到新版本的升级过程的各个阶段。交换共享数据库容器方法也可被用于部署服务包或补丁。
图26示出在使用交换共享容器方法部署新数据库版本之前的示例系统2600。系统2600包括共享数据库容器2602,该共享数据库容器2602包括作为名为“TAB”的混合表的共享部分的只读表2604的当前版本。共享数据库容器2602还包括只读表2606。系统2600包括用于第一租户的第一租户数据库容器2608和用于第二租户的第二租户数据库容器2610。
第一租户数据库容器2608包括对只读表2604的视图2612(如箭头2614所示)、作为混合表的本地部分的可写表2616、提供对只读表2604和可写表2616的统一访问的联合视图2618、可写表2620、和对只读表2606的视图2621(如箭头2622所示)。类似地,第二租户数据库容器2610包括对只读表2604的视图2623(如箭头2624所示)、作为混合表的本地部分的可写表2626、提供对只读表2604和可写表2626的统一访问的联合视图2628、可写表2630、和对只读表2606的视图2631(如箭头箭头2632所示)。
图27是通过交换共享数据库容器而部分升级的系统2700的例示。系统2700是在用于准备共享数据库容器的第一组部署操作期间系统2600的视图。总之,新共享数据库容器2704可以与现有生产中(in-production)共享容器(例如,共享数据库容器2602)并行被部署,而不会中断现有共享数据库容器2602的操作。
在流程图2705中概述用于准备共享数据库容器2704的第一组部署操作。
在2706处,确定是否允许部署或其他活动是否正在运行。如果不允许部署和/或正在运行的其他活动在部署期间不被允许,则部署结束。
如果允许部署,则在2707处复制新(例如,版本二)共享数据库容器2704并将其附加到数据库。新共享数据库容器2704是被包括在递送套装中、并在供应商处被创建的容器,它包含新软件版本(例如,共享的数据库容器2420的副本,连同递送有2708的租户部分一起)。新共享数据库容器2704包括只读表2708,该只读表2708是被包括在服务包主控2402中的共享表的副本。
在2712处,向租户提供目标连接信息(例如,URL、用户名、密码)。例如,诸如新共享数据库容器2704的地址的目标连接信息可以对第一租户数据库容器2608和第二租户数据库容器2610可用。可以将关于新共享数据库容器2704的信息发行给租户,因此租户可以读取新共享数据库容器内容。可以向租户授权对共享容器中的对象的只读访问。
作为另一示例,可以将目标连接信息提供给将分别升级第一租户和第二租户的部署工具。如指示符2714和2715分别所示,第一租户数据库容器2608和第二租户数据库容器2610可以被指定为版本二(“V2”)目的地(例如,升级目标)。
在2718处,从新共享数据库容器2704(诸如向部署工具)提供信息,包括共享表的列表、关于组件版本的信息(例如,服务包级别)以及关于部署的传输和导入状态的信息。部署过程继续进行,如下面图28所述。
图28是通过交换共享数据库容器而部分升级的系统2800的例示。系统2800是在用于部署到第一租户的第二组部署操作期间系统2600的视图。在流程图2802中概述第二组操作。
在2804处,获得连接性和新共享空间信息。例如,可以将用于将第一租户数据库容器2608连接到新共享数据库容器2708的连接性信息提供给第一租户数据库容器2608和/或部署工具。例如,可以向部署工具提供新共享数据库容器2708的地址。
在2806处,确定新共享空间版本和匹配的服务包级别。例如,部署工具可以确保新共享数据库容器2708的版本与增量部署套装2807的版本匹配。增量部署套装2807例如是在部署的发起之前准备的文件。创建增量部署套装2807可以包括识别部分包括在新共享数据库容器2704中的对象和计算剩余部署部分(即那些对象的本地内容部分以及对将成为部署的一部分的那些本地内容部分的改变)。创建增量部署套装2807还可以包括识别完全存储在租户容器中的对象和识别将成为部署的一部分的那些对象的改变。
在2808处,计算用于从共享表读取的视图的“丢弃/创建”或“更改”语句。例如,可以准备用于对只读表2606和只读表2604的视图的丢弃语句。例如,可以准备丢弃视图2631(如箭头2632所示)、视图2621(如箭头2622所示)、视图2612(如箭头2614所示)和视图2623(如箭头2624所示)的丢弃语句。可以准备用于在第一租户数据库容器2608和第二租户数据库容器2610中创建只读表2708和只读表2710的新视图的各个创建视图语句。
通常,新共享数据库容器2704可以包括比共享数据库容器2602更多或更少的表。因此,要创建的一组视图取决于新共享数据库容器2704的内容。新共享数据库容器2704可以包括管理表(未示出),该管理表包括新共享数据库容器2704中包括的表的列表。可以读取管理表,以便可以准备语句,当执行这些语句时,将丢弃对共享数据库容器2602中所有表的视图,并为新共享数据库容器2704中所有表创建新视图。
在2810处,可以读取目标目的地和表名,并计算语句,以便将数据传输到租户数据库容器。
在2812处,计算对本地表的(多个)结构调整。例如,部署可以包括对第一租户数据库容器2608中的可写表2616和/或可写表2620的改变。作为另一示例,部署可以包括对第二租户数据库容器2610中的可写表2626和/或可写表2630的改变。
可以计算用于调整这些可写/本地表的结构的(多个)语句(例如,更改(多个)语句),用于稍后执行,如下所述。如果要调整可写表2616的结构,则可以准备用于重新创建联合视图2618的语句,以创建包括可写表2616的更新结构的视图。部署过程继续进行,如下面关于图29所述。
图29是通过交换共享数据库容器而部分升级的系统2900的例示。系统2900是在于完成对第一租户的部署的第三组部署操作期间系统2600的视图用。流程图2902中概述第三组操作。
在2904处,执行先前准备的语句。例如,可以由传输控制组件2905执行先前准备的丢弃视图语句,以丢弃对共享数据库容器2602的视图(例如,在先前的图中分别示为箭头2614和2622的视图2612和2621)。在第一租户数据库容器2608中,可以使用先前准备的创建视图语句创建新视图,以创建对新共享数据库容器2704中的只读表2708和只读表2710的新视图。例如,可以创建对只读表2708的视图2906(其中连接被示为箭头298)。作为另一示例,可以创建对只读表2710的视图2910(其中连接被示为箭头2912)。
传输控制组件2905还可以执行先前准备的更改语句,以调整本地表的结构,如更新的可写表2914和更新的可写表2916所示。如果可写表2914的结构是新的和/或视图2910的结构是新的(例如,与只读视图2612相比),则传输控制组件2905可以执行语句以创建新联合视图2918来替换联合视图2618。
在2920处,部署本地内容。例如,传输程序2922可以将数据从增量部署套装2807复制到更新的可写表2916。作为另一示例,传输程序2922可以将数据从增量部署套装2807复制到更新的可写表2914。通常,本地内容可以包括作为部分地被存储在新共享数据库容器2704中并且部分地被存储在第一租户数据库容器2608中的对象的本地部分的内容。本地内容还可以包括完全存储在第一租户数据库容器2608中并且不存储在新共享数据库容器2704中的对象的内容。
在2926处,将状态更新写入本地补丁表。例如,指示第一租户已经被升级到版本二的状态信息可以诸如存储在新共享数据库容器2704(未示出)中的管理表中或其他位置中。
在2928处,在目标共享空间处注册第一租户。例如,第一租户数据库容器2608可以在新共享数据库容器2704中的管理表中被注册为连接到新共享数据库容器2704。
在2930处,从源共享空间注销(de-register)第一租户。例如,可以在共享数据库容器2602中的管理表中删除(或标记为非活动)条目,其中删除或标记为非活动指示第一租户数据库容器2608不再连接到共享数据库容器2602。
在2932处,删除版本一目的地信息。部署过程继续进行,如下面图30所述。
图30是通过交换共享数据库容器而部分升级的系统3000的例示。系统3000是在用于对第二租户部署的第四组部署操作期间系统2600的视图。第二租户的部署可以包括与第一租户所执行的相同的一组操作,如上面图28和图29所述。
第二租户的部署可以包括在第二租户数据库容器2610中丢弃对共享数据库容器2602的视图(例如,视图2623和2631,在前面的图中分别示为箭头2624和2632)。第二租户的部署可以包括在新共享数据库容器2704中创建对只读表2708和只读表2710的新视图,如新视图3002和箭头3004以及新视图3006和箭头3008所示。
第二租户的部署可以包括调整内容并将其部署到本地表,如更新的可写表3010和更新的可写表3011所示。可以创建更新的联合视图3012以反映更新的可写表3010和/或新视图3002的(多个)更新结构。一旦所有租户都已被升级,就可以丢弃共享数据库容器2602,如“X”3014所示。
图31是通过交换共享数据库容器而部分升级的系统3100的例示。系统3100是在已经完成对包括第一租户数据库容器2608和第二租户数据库在内的所有租户的部署之后处于最终状态的系统2600的视图。共享数据库容器2602已被丢弃并且不再被包括在系统3100中。例如,在已经执行(多个)测试之后,可以丢弃共享数据库容器2602,以确保所有租户都在使用新共享数据库容器2704。完成部署还可以包括执行其他测试,诸如确保已部署新版本中要改变的所有对象的所有部分。
其他最终任务可以包括在每个租户数据库容器中触发用于改变后的共享内容的部署后(after-deployment)活动,包括执行对象的后期动作。后期动作可以包括使已经切换到从新共享数据库容器2704读取的表的应用服务器3102和/或应用服务器3104(应用服务器3102和3104是不同的或相同的服务器)的表缓冲区(例如,存储先前读取的共享内容)无效、使先前编译的对象无效、触发现在从新共享数据库容器2704读取的对象的重新编译、重新生成依赖于共享内容和租户内容的租户特定的对象、以及启用与在租户中部署改变后的内容相关的其他应用特定的跟进动作。部署后动作可以确保对象与已部署的内容一致。
跨共享和租户数据库容器修补内容
图32示出用于将部署对对象的改变的系统3200。图32示出用于将部署对到对象的改变的系统。如上所述,不是交换共享数据库容器3202,对于一些部署,诸如对于具有小于预定阈值数量的表的改变的补丁,可以将改变适当地应用于共享数据库容器3202和租户数据库容器(例如,第一租户数据库容器3204和第二租户数据库容器3206)。部署可以分两个阶段执行:1)对共享数据库容器3202的部署;2)对租户数据库容器3204和3206的部署(其可以独立执行)。独立租户部署可以使能顺序部署和解耦(de-coupled)部署。
部署3208可以确保将补丁完全部署到共享数据库容器3202和每个租户数据库容器3204和3206,包括确保已经为所有租户执行了任何计划的跟进动作。部署工具3208可以识别给定对象的部署套装3210中的部署文件条目3209,并确定给定对象包括存储在T1、T2和T3表中的数据。部署工具3208可以访问元数据3212,该元数据3212指示T1表是共享只读表(因此驻留在共享数据库容器3202中,例如,作为只读表3214)、T2表是分割表(因此部分地驻留在共享数据库容器3202中,例如,作为只读表3216)、以及T3是租户本地表(因此分别驻留在租户数据库容器中,例如,作为本地表3218和本地表3220)。
部署工具3208可以基于元数据3212和部署文件条目3209将给定对象识别为至少部分地包括在共享只读表3202中。部署工具3208可以为给定对象部署对于给定对象驻留在共享数据库容器3202中的部分的改变,如T1只读表3214中的条目3222和T2只读表3216中的条目3224所示。条目3222可以用来自部署文件条目3209中的条目3226的数据来填充。类似地,条目3224可以用来自部署文件条目3209中的条目3228的数据来填充。部署工具3208可以将指示给定对象被部分部署的记录存储在状态表中。
部署工具3208接下来可以执行对租户阶段的部署,其可以包括对第一租户数据库容器3204的部署和对第二租户数据库容器3206的部署。对租户数据库容器的部署可以独立操作,并且可以按顺序或并行进行。部署工具3208可以基于条目3209和指示给定对象包括T3租户本地表中的数据的元数据3212,将与条目3209相关联的给定对象识别为已经部分部署的对象。部署工具3208可以确定存储在部署文件条目3209中的条目3230中的给定对象的一部分尚未被部署。部署工具3208可以将条目3230部署到第一租户数据库容器3204和第二租户数据库容器3206,如条目3232和条目3234所示。
可以由部署工具3208执行的其他部署任务包括识别尚未部署到共享数据库容器的对象(例如,仅驻留在本地租户表中的对象),以及部署对这些对象的改变。由部署工具3208执行的最终任务可以包括调用对部署的内容进行操作的动作,这可以包括例如触发缓冲区无效和缓冲区刷新,或者编译部署的代码。最终任务还可以包括确保部署中包括的所有对象的所有部分都已被部署。
图33示出使用共享数据库容器的隐藏准备来部署补丁的系统3300。如上所述,可能期望租户独立的部署,以便租户可以各自定义他们自己的停机时间窗口,并且以便如果一个租户部署有问题,则不需要还原所有租户部署。与现有共享数据库容器并行部署新共享数据库容器是一种方法。对于较小的改变,在现有共享数据库容器中准备个体表的隐藏版本可能是另一种方法。这种隐藏部署方法可以通过提供租户个体回退选项来减少停机时间。隐藏的改变最初对于仍然可以在共享数据库容器中高效使用当前版本表的租户是不可见的,直到它们被单独部署并切换到使用新表版本。
系统3300包括子系统3302、3304、3306和3308,这些子系统提供部署进度的概述。下面的其他图为每个部署阶段提供了进一步细节。子系统3302包括共享数据库容器3310、用于第一租户的第一租户数据库容器3312以及用于第二租户的第二租户数据库容器3314。
共享数据库容器3310包括处于第一版本的只读表3316,其名为“TABR#1”。尽管在共享数据库容器3310中仅示出一个表,但是共享数据库容器3310可以包括其他表。第一租户数据库容器3312和第二租户数据库容器3314分别包括只读视图3318或只读视图3320,每个视图为相应的租户提供对只读表3316的读取访问。第一租户数据库容器3312和第二租户数据库容器3314分别还包括可写表3322或可写表3324。
在第一部署阶段,修补系统3326创建只读表3316的克隆/副本,示出为新只读表3328。新只读表3328具有与只读表3316相同的结构。
在第二部署阶段,如子系统3304中所示,修补系统3326和/或部署工具可以通过导入对新只读表3328的改变来修改新只读表3328,以将补丁部署到子系统3302。新只读表3328以虚线显示,以表征新只读表3328处于包括补丁的新版本。
在第三部署阶段中,如子系统3306中所示,第一租户被切换为兼容并被连接到更新的共享数据库容器3310。例如,丢弃视图3318并且对新只读表3328创建新视图3330。可以更新可写表3322的结构,如更新的可写表3332所示。
类似地,如子系统3308中所示,第二租户被切换为兼容并被连接到更新的共享数据库容器3310。例如,丢弃视图3320并且对新只读表3328创建新视图3334。可以更新可写表3324的结构,如更新的可写表3336所示。
在第四部署阶段,丢弃只读表3316,如“X”3338所示,因为现在不存在租户连接到只读表3316。下面的图34至图39讨论使用共享数据库容器的隐藏准备进行部署的更复杂的示例,包括使用混合表以及对每个操作的更详细讨论。
图34示出在部署补丁之前的示例系统3400。系统3400包括共享数据库容器3402,该共享数据库容器3402包括只读表3403的当前版本(例如,版本#1),该只读表3403是名为“TAB”的混合表的共享部分。系统3400包括第一租户数据库容器3404和第二租户数据库容器3406。第一租户数据库容器3404包括对只读表3403的视图3408(如箭头3409所示)、作为混合表的本地部分的可写表3410、提供对只读表3403和可写表3410的统一访问的联合视图3412以及可写表3414。类似地,第二租户数据库容器3406包括对只读表3403的视图3416(如箭头3417所示)、作为混合表的本地部分的可写表3418、提供对只读表3403和可写表3418的统一访问的联合视图3420以及可写表3422。
图35示出用于在将补丁部署到数据库系统期间准备共享数据库容器的系统3500。系统3500是在完成第一组部署操作之后系统3400的视图。在流程图3502中概述第一组部署操作。在3504处,补丁系统3506读取部署套装3508以识别要将内容部署到的共享表。例如,补丁系统3506可以基于部署套装3508中的数据识别名为“TAB”3509的混合表,其中补丁将被部署到共享数据库容器中的混合表的只读部分。如上所述,“TAB”表的只读部分的当前版本作为只读表3403被包括在共享数据库容器3402中。
在3510处,补丁系统3506克隆只读表3403以创建具有与只读表3403相同结构的只读表3512,并将只读表3512的名称发行给在共享部署下运行的部署工具3516。只读表3512以目标名“TAB#2”命名,并用虚线表示,以表征只读表3512是只读表3403的新版本。可以更新管理表以发行只读表3512的名称。当租户被部署并被连接到只读表3512时,可以在稍后阶段使用发行的名称。
在3514处,部署工具3516将数据从部署套装3508部署(例如,导入)到只读表3512,以将补丁部署到只读表3512。只读表3512相对于租户应用是只读的,但是部署工具3516具有对只读表3512的写入访问。部署工具3516可以确定仅要部署到共享数据库容器3402(例如,而不是租户数据库容器)的内容。
在3518处,存储部署状态(例如,在共享数据库容器3402中的管理表(未示出)中)。部署状态可以包括对TAB表的补丁被部分部署的指示(例如,在共享数据库容器3402中对TAB混合表的只读可共享部分进行了改变,但是TAB混合表的可写部分尚未被更新)。管理表可以包括指示例如对可写表3414的改变(例如,名为“TAB2”)以及其他表尚未被部署的信息。
在3520处,具有目标名“TAB#2”的只读表3512的名称作为只读表3403的新版本的名称被发行到在租户部署处运行的补丁系统3506,或者以其他方式变得可用。发行的名称用于后来的部署操作,如下面更详细的描述。只读表3512保持隐藏,并且未被租户应用使用,直到后来的操作已经被完成。
图36示出用于将补丁部署到租户数据库容器的系统3600。系统3600是在用于将补丁部署到第一租户数据库容器340的第二组部署操作期间系统3400的视图4。在流程图3602中概述第二组部署操作。在执行第二组操作之前,可以为第一租户数据库容器3404发起停机时间段。
在3604处,确定来自部署包3508的内容已经在共享数据库容器3402中准备(例如,部署为隐藏)。
在3606处,识别已准备并部分部署的共享表,并创建丢弃视图(drop view)语句。例如,补丁系统3506可以识别只读表3512已被准备为只读表3403的新版本。可以准备丢弃视图语句来丢弃对只读表3403的视图。
在3608处,通过读取并在创建视图语句中包括只读表3512的已发行目标名来计算创建视图(create view)语句。
在3610处,执行先前计算的丢弃视图语句和创建视图语句。丢弃视图语句在第一租户数据库容器3404中丢弃对只读表3403的视图。因此,现在不存在源自第一租户数据库容器3404并且在只读表3403处结束的箭头(例如,先前图中的箭头3409)。创建视图语句创建只读表3512的新视图3612(例如,由箭头3613所示)。
在3614处,部署工具3516将内容部署到第一租户数据库容器3404。例如,部署工具3516可以来自部署套装3508的内容被部署到包括在第一租户数据库容器3404中的一个或多个可写表,如更新的可写表3616所示。作为另一示例,来自部署套装508的内容可以被部署到可写表,该可写表包括与对应于只读表3512的混合表相关联的租户本地内容,如更新的可写表3618所示。部署工具3516可以确定部署套装3508中尚未部署到共享数据库容器3402并且将要部署到租户的内容。
在3620处,更新(多个)本地表结构和(多个)联合视图。例如,可以更新图34的联合视图3412以连接到新视图3612和更新的可写表3618,如更新的联合视图3622所示。作为另一示例,可以根据部署套装3508中的数据来更新更新的可写表3616和/或更新的可写表3618的结构。
在完成对于第一租户的部署之后,可以结束第一租户的停机时间,其中第一租户数据库容器3404成功地配置有部署的改变和到只读表3512的更新连接。新视图3612、箭头3613、更新的可写表3616、更新的可写表3618和更新的联合视图3622以虚线示出,以表征对于第一租户数据库容器3404的补丁部署完成。
图37示出用于将补丁部署到租户数据库容器的系统3700。系统3700是在用于将补丁部署到第二租户数据库容器3406的第三组部署操作期间系统3400的视图。在执行第三组操作之前,可以为第二租户数据库容器3406发起停机时间段。将补丁部署到第二数据库容器3406可以包括与针对第一数据库容器所做的相同或类似的操作,如流程图3602中所概述的,但是针对第二数据库容器3406。
例如,可以丢弃第二数据库容器3406中对只读表3403的视图(例如,图37中不再包括先前图中所示的箭头3417)。可以对只读表3512创建新视图3702,如箭头3704所示。内容可以被部署到可写表,并且可写表结构可以被更改,如更新的可写表3706和更新的可写表3708所示。可以更新联合视图以提供对新视图3702和更新的可写表3708的统一访问,如更新的联合视图3710所示。
在完成第二租户的部署之后,可以结束第二租户的停机时间,其中第二租户数据库容器3406成功地配置有部署的改变和到只读表3512的更新连接。新视图3702、箭头3704、更新的可写表3706、更新的可写表3708和更新的联合视图3710以虚线示出,以表征第二租户数据库容器3406的补丁部署完成。
图38示出用于执行部署的最终化的系统3800。系统3800是在用于执行最终化/清理阶段的第四组部署操作期间系统3400的视图。在流程图3802中概述第四组操作。在3804处,进行补丁是否已经被部署到所有注册的租户的确定。在3806处,响应于确定已经将补丁部署到所有注册的租户,丢弃不再使用的(多个)旧共享表。例如,补丁系统3506可以丢弃只读表3403,因为不再有任何租户连接到只读表3403。在3808处,从已发行的共享表的列表中移除只读表3403的名称(例如,“TAB#1”)。
图39示出在使用共享数据库容器技术的隐藏准备进行部署之后的系统3900。系统3900是在对所有租户(包括第一租户数据库容器3404和第二租户数据库容器3406)的部署已经完成之后的系统3400的视图。共享数据库容器3402包括新版本只读表3512,并且不再包括先前版本只读表3403。第一租户数据库容器3404和第二数据库容器3406包括更新的组件,其包括到新版本只读表3512的连接。
图40是用于处理不成功的租户部署的示例方法4000的流程图。应当理解的是,方法4000和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法4000和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法4000和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法4000和相关方法可以由图1的部署工具130执行。
在4002处,检测到租户的不成功的部署。例如,可以接收错误消息。
在4004处,分析不成功的部署。例如,可以分析指示部署的哪些部分已经成功完成或遇到错误的状态信息。
在4006处,确定是否可以立即或在预定时间窗口(例如,一小时)内解决部署的问题。例如,预定时间窗口可以是租户的停机时间窗口的最大可接受长度。
在4008处,响应于确定问题可以在预定时间窗口内解决,问题被解决。例如,可以提供新部署套装,和/或可以重新开始系统或进程。
在4010处,为租户重新开始部署。如果已提供新的部署套装,则可以在部署重新尝试中使用新部署套装。
在4012处,确定部署重新尝试是否成功。如果部署重新尝试未成功,则可以重新执行方法4000(例如,在4002处)。
在4014处,响应于确定在预定时间窗口内无法解决初始部署的问题,租户被还原到部署之前的状态。
在4016处,在部署开始之前以租户的发布版本向顾客提供租户,以便在问题被解决时租户可以在线。
在4018处,在租户在线时解决问题。
在4020处,为租户重新开始部署。如上所述,可以确定部署成功,并且如果重新开始部署没有成功,则可以重新执行方法4000。
图41示出用于将多个补丁部署到数据库系统的系统4100。租户独立的停机时间和部署(诸如是否为一个或多个租户重新尝试部署,或者给定部署仍在进行)可能会导致不同的租户在给定时间点连接到不同版本。租户可能会有重叠的部署时间框架,这可能是由于计划的个人升级窗口,也可能是由于问题和特别租户部署的撤销造成的。管理员可能期望将补丁部署到新版本上的租户,即使某些其他租户尚未升级到新版本。作为另一示例,可能期望将第二补丁和第一补丁部署到尚未部署第一补丁的租户。
系统4100可以支持向租户部署多个补丁。例如,将套装“p1”部署到共享数据库容器和N个租户数据库容器的集群可以部分被完成(例如,N个租户中的M个,M<N,没有部署p1补丁)。即使M个租户还没有p1补丁,系统4100也可以支持补丁“p2”的部署。可能期望用新补丁对在已经具有p1补丁的一个或多个租户中发生的问题作出反应,而不需要等到所有租户都具有p1补丁。
系统4100是示出在已经将不同的组补丁部署到不同的租户数据库容器之后对系统3400的改变的概述。共享数据库容器3402包括只读表3403和只读表3512(例如,只读表3402的第二版本)。与第一租户数据库容器3404相关联的第一租户已经被升级到版本二。补丁系统3506已经创建了对版本二只读表3512的视图4102,并且部署工具3516已经将来自补丁一部署套装4104的内容部署到第一租户数据库容器3404。
在将补丁一部署套装4104部署到第二租户数据库容器3406之前,可以在第二租户数据库容器3406中检测到问题。已经创建了补丁二部署套装4106,其包括对内容的改变,其包括对TAB和TAB 2表的改变,以创建第三软件版本来修复检测到的问题。补丁系统3506可以克隆版本二只读表3512以创建版本三只读表4108。部署工具3516可以将来自补丁二部署套装4106的内容部署到版本三只读表4108,以部署包括在新补丁中的共享内容。
补丁系统3506可以创建对版本三只读表4108的视图4110。部署工具3516可以部署来自补丁一部署文件4104和补丁二部署文件4106的租户内容以完成第二租户数据库容器3406到第三软件版本的升级。稍后可以确定第三软件版本是否已经纠正了问题,以及是否在稍后时间将第一租户数据库容器3404升级到第三软件版本。下面参考图42至图48描述部署多个补丁的进一步细节。
图42示出用于在将多个补丁部署到数据库系统之前准备共享数据库容器的系统4200。系统4200是在完成用于准备将第一补丁部署到第一租户的第一组部署操作之后系统3400的视图。在流程图4202中概述第一组部署操作,并且类似于上面针对流程图3502描述的部署操作。
在4204处,补丁系统3506读取部署套装4206,以识别要将内容部署到的共享表。例如,补丁系统3506可以基于部署套装4206中的数据识别名为“TAB”4208的混合表,其中第一补丁将被部署到共享数据库容器3402中TAB混合表的只读部分。
尽管在该示例中使用一个表(“TAB”),但是通常,补丁系统3506可以确定将从部署套装4206接收数据的共享容器中的一组表。出于讨论下面的一般示例的目的,这组表可以被称为集合st_1。补丁系统3506可以确定集合st_1中的每个表的版本号,并且可以确定这些表的最大版本号。补丁系统3506可以确定目标版本号,v_target1=ST_1+1中的最大版本号。
在4210处,补丁系统3506克隆只读表3403以创建具有与只读表3403相同结构的版本二只读表4212,并发行版本二只读表3512的名称。版本二只读表3512以目标名“TAB#2”命名。
继续上面的一般示例,对于集合st_1中的每个表,补丁系统3506可以在共享数据库容器3402中识别名为<table-name>#<v_start>的源表,其中v_start是具有相同基本名<table-name>的表的最高版本号(例如,共享数据库容器3402可能具有名为DOKTL#3、DOKTL#5和DOKTL#11的表,因此对于DOKTL的table_name,v_start是11)。补丁系统3506可以使用<table-name>#<v_target1>的模式创建每个识别的源表的副本,以制作相应的目标表。
在4214处,部署工具3516将来自部署套装4206的数据部署(例如,导入)到版本二只读表4212,以将第一补丁部署到版本二只读表4212。部署工具3516可以确定仅要部署到共享数据库容器3402(例如,而不是租户数据库容器)的内容。继续一般示例,部署工具3516可以将部署套装4206的内容部署到共享数据库容器3402中的每个目标表<table-name>#<v_target1>。
在4216处,存储部署状态(例如,在共享数据库容器3402中的管理表(未示出)中)。部署状态可以包括对TAB表的第一补丁被部分部署的指示(例如,在共享数据库容器3402中对TAB混合表的只读可共享部分进行改变,但是第一补丁还没有被应用到TAB混合表的可写部分)。
在4218处,发行或以其他方式使得目标名为“TAB#2”的版本二只读表4212的名称可作为只读表的名称3403的新版本。版本号(例如,版本二)也可以被作为目标(例如,“goto”)版本号发行,以用于以后的租户部署。对于一般示例,可以将数字v_target1作为部署套装4206的goto版本传递给中央控制工具,以用于未来租户部署的编排。
图43示出用于将多个补丁部署到数据库系统的系统4300。系统4300是在将多个补丁部署到数据库系统期间完成的用于部署第一补丁的第二组部署操作之后的系统3400的视图。在流程图4302中概述第二组部署操作,并且类似于以上针对流程图3602描述的操作。
在4304处,确定来自部署套装4206的第一补丁的内容已经在共享数据库容器3402中准备(例如,部署为隐藏)。补丁系统3506可以检索用于部署租户内容的目标版本号v_target1。
在4306处,识别已准备并部分部署的共享表,并创建丢弃视图语句。例如,补丁系统3506可以识别版本二只读表4212已被准备为只读表3403的新版本。可以准备丢弃视图语句来丢弃对只读表3403的视图。
继续一般示例,补丁系统3506可以在部署套装4206中确定已经从部署套装4206部署到共享数据库容器的补充。例如,补丁系统3506可以识别要从部署套装4206接收内容的所有表的集合st_1_all。补丁系统3506可以从集合st_1_all中移除已经在共享中部署表(例如,集合st_1)。补丁系统3506可以确定剩余集合st_1_rest。
为了确定丢弃视图语句,补丁系统3506可以识别租户数据库容器3404中从版本小于v_target1的共享表中选择的当前视图。补丁系统3506可以为那些识别的当前视图中的每一个准备丢弃语句。
在4307处,通过读取并在创建视图语句中包括版本二只读表4212的已发行目标名来计算创建视图语句。
对于一般示例,补丁系统3506可以通过确定与v_target1相同或小于v_target1的表的版本的最大号,为要丢弃的每个当前视图计算要在新视图中使用的表的版本。补丁系统3506可以使用要在新视图中使用的表的确定的版本来准备创建视图语句。
在4308处,执行先前计算的丢弃视图语句和创建视图语句。丢弃视图语句在第一租户数据库容器3404中丢弃对只读表3403的视图。因此,现在不存在源自第一租户数据库容器3404并且在只读表3403处结束的箭头(例如,先前图中的箭头3409)。创建视图语句创建对版本二只读表4212的新视图4310(例如,由箭头4312示出)。
在4314处,部署工具3516将内容部署到第一租户数据库容器3404。例如,部署工具3516可以将来自部署套装4206的第一补丁的内容部署到包括在第一租户数据库容器3404中的一个或多个可写表,如更新的可写表4316所示。作为另一示例,来自第一补丁的部署套装4206的内容可以被部署到可写表,该可写表包括与对应于版本二只读表4212的混合表相关联的租户本地内容,如更新的可写表4318所示。部署工具3516可以确定部署套装4206中尚未部署到共享数据库容器3402并且将要部署到租户的内容。在一般示例中,部署工具可以为剩余表集合st_1_rest中包括的表部署来自部署套装的内容。
在4320处,更新(多个)本地表结构和(多个)联合视图。例如,可以更新图34的联合视图3412以连接到新视图4310和更新的可写表4318,如更新的联合视图4322所示。作为另一示例,可以根据部署套装4206中的数据来更新更新的可写表4316和/或更新的可写表4318的结构。
图44示出用于将多个补丁部署到数据库系统的系统4400。系统4400是在将多个补丁部署到数据库系统期间,用于为第二补丁准备共享数据库容器的第三组部署操作已经完成之后的系统3400的视图。在流程图4402中概述第三组部署操作,并且类似于以上流程图4202描述的操作。
在4404处,补丁系统3506读取第二补丁部署套装4406,以识别要将内容部署到的共享表。对于一般示例,补丁系统3506可以确定共享容器中将从部署套装4406接收数据的一组表。这组表可以被称为集合st_2。补丁系统3506可以确定集合ST_2中每个表的版本号,并且可以确定这些表的最大版本号。补丁系统3506可以确定目标版本号,v_target2=st_2+1中的最大版本号。
在4408处,补丁系统3506克隆版本二只读表4212以创建具有与版本二只读表4212相同的结构的版本三只读表4410,并发行版本三只读表4410的名称。版本三只读表4410以目标名“TAB#3”命名。
继续上面的一般示例,对于集合st_2中的每个表,补丁系统3506可以在共享数据库容器3402中识别名为<table-name>#<v_start>的源表,其中v_start是具有相同基本名<table-name>的表的最高版本号。补丁系统3506可以使用<table-name>#<v_target2>的模式创建每个识别的源表的副本,以制作相应的目标表。
在4412处,部署工具3516将来自第二补丁部署套装4402的数据部署(例如,导入)到版本3只读表4410,以将第二补丁部署到版本三只读表4410。继续一般示例,部署工具3516可以将部署套装4406的内容部署到共享数据库容器3402中的每个目标表<table-name>#<v_target2>。
在4414处,存储部署状态(例如,在共享数据库容器3402中的管理表(未示出)中)。部署状态可以包括到TAB表的第二补丁已部分部署的指示。
在4416处,发行或以其他方式使得目标名为“TAB#3”的版本三只读表4410的名称可以作为只读表3403的新版本的名称。版本号(例如,版本三)也可以被发行为目标(例如,“go to”)版本号,用于后来的租户部署。对于一般示例,数字v_target2可以被作为部署套装4406的goto版本传递给中央控制工具,用于编排第二补丁的未来租户部署。
图45示出用于将多个补丁部署到数据库系统的系统4500。系统4500是在将多个补丁部署到数据库系统期间,用于将第一和第二补丁部署到第二租户的第四组部署操作已经完成之后的系统3400的视图。第四组操作类似于上面在流程图4302中描述的操作,但是用于将第一补丁和第二补丁两者部署到第二租户数据库容器3406。
例如,已经丢弃从第二租户数据库容器3406对只读表3403的视图(例如,如先前图中的箭头3417所示)。已经创建了对版本三只读表4410的新视图4502(如箭头4503所示)。内容已被部署到更新的可写表4504并且可能已被部署到更新的可写表4506,更新的可写表4504和/或更新的可写表4506的(多个)结构已被更新,并且第二租户数据库容器3406现在包括更新的联合视图4508。
对于一般示例,补丁系统3506可以检索将部署套装4206和4406部署到第二租户数据库容器3406中使用的目标版本号v_target2。补丁系统3506可以确定从部署套装4206部署到共享数据库容器3402的第一补充,以及从部署套装4406部署到共享数据库容器3402的第二补充,并且将第一补充和第二补充部署到第二租户数据库容器3406。
图46示出用于将多个补丁部署到数据库系统的系统4600。系统4600是在将多个补丁部署到数据库系统期间,用于将第二补丁部署到第一租户的第五组部署操作已经完成之后的系统3400的视图。例如,可以基于第二补丁成功地解决对于第二租户识别的早期问题的确定,确定将第二补丁部署到第一租户。第五组操作类似于上面在流程图4302中描述的操作,但是用于使用第二补丁部署套装4406将第二补丁部署到第一租户数据库容器3404。
例如,已经丢弃从第一租户数据库容器3404对版本二只读表4212的视图(例如,如先前图中的箭头4312所示)。已经创建对版本三只读表4410的新视图4602(如箭头4503所示)。内容已被部署到更新的可写表4604并且可能已被部署到更新的可写表4606,更新的可写表4604和/或更新的可写表4606的(多个)结构已被更新,并且第一租户数据库容器3404现在包括更新的联合视图4608。
图47示出用于将多个补丁部署到数据库系统的系统4700。系统4700是在将多个补丁部署到数据库系统期间,用于最终化部署的第六组部署操作已经完成之后的系统3400的视图。在流程图4702中概述第六组部署操作。
在4702处,确定是否已将所有传输部署到所有注册的租户。
如果已经将所有传输部署到所有已注册的租户,则在4704处,丢弃不再使用的旧共享表。例如,补丁系统3506可以丢弃只读表3403和版本二只读表4212,因为这些表不再被连接到任何租户。
在4706处,从发行的共享表的列表中移除被丢弃的旧共享表名(例如,只读表3403和版本二只读表4212)。
图48示出在完成将多个补丁部署到数据库系统之后的系统4800。系统4800是在已经完成将多个补丁部署到所有租户(包括第一租户数据库容器3404和第二租户数据库容器3406)之后系统3400的视图。共享数据库容器3402不再包括只读表3403和版本二只读表4212,因为所有租户现在都连接到版本三只读表4410。
部署多种类型的改变
当将新版本部署到多租户数据库系统时,可以发生不同类型的改变。例如,可以存在以下一种或多种类型的改变:1)表结构中的(多个)改变;2)被共享的表和不被共享的表的(多个)改变;或3)对关于共享哪些内容值和不共享哪些内容值的混合表的(多个)改变。利用交换的共享数据库容器方法,新共享数据库容器包括这些变化中的任何,这些变化是对于新版本的变化的一部分。例如,新共享数据库容器包括已在目标结构中的表,包括更新的键模式配置(如果需要),并与混合表相关联的共享表包括遵循更新的键模式配置的内容。
部署工具可以确定要在每个租户中进行什么改变,以使每个租户与新共享数据库容器兼容。部署工具可以使用结构改变机制、共享类型改变机制和数据分割定义(键模式)改变机制的组合来重新配置租户,包括根据特别升级所需的改变的类型以规定的顺序使用这些机制,如下面更详细描述的。
关于表结构定义的改变,对于新软件版本,表定义可以因应用的要求而改变。部署过程可以调整表结构。如上所述,在多租户设置中,标准系统中的(例如,从应用的角度来看)逻辑“单一表(single table)”可以由表和视图(例如,对于共享的只读表)或者两个表和视图(例如,对于混合表)来替换。逻辑表的结构变化可能需要进行到多租户系统中的多项目构造(例如,表和视图、两个表和视图)。使用新版本交换共享数据库容器时,共享数据库容器中的表已具有新表结构。可以通过调整表和视图的结构来更新租户,作为租户部署的一部分。调整可能是必要的,因为如果表结构和/或视图结构不匹配,则选择语句可能返回错的结果或导致错误。
关于共享类型的改变,可能期望软件的新版本来改变表共享。共享的表比可能的表少会增加总拥有成本,因此可能期望随着时间的推移识别要共享的额外的表。如下面更详细描述的,共享类型的改变可能需要将数据从共享数据库容器移动到(多个)租户数据库容器和/或从(多个)租户数据库容器移动到共享数据库容器。共享类型的改变还可能导致从租户数据库容器中删除数据。
如果应用期望表属于某个表共享类型,则具有不同的共享类型会导致数据插入时出现查询错误。例如,如果应用想要写入某个记录,但该表属于只读共享类型,则写入语句将不会成功。在升级中,可以执行共享类型(只读、分割和本地)之间潜在的各种不同种类的过渡。作为一个示例,应用可以被配置为在多租户设置中支持键用户的持续可扩展性。在给定的时间点,顾客可能期望将自定义字段添加到表中。要改变的表当前可能是只读或分割表类型。对表的扩展(添加字段)可能只允许用于本地表类型。因此,在下一发布中,表可能需要从只读或分割表类型改变为本地表类型。
关于数据分割定义的改变,可以发生两种类型的改变。首先,可能需要共享附加内容。例如,应用(或管理员或开发者)可以识别顾客从未修改过某些内容。可以决定共享这些记录,以降低总拥有成本并加快改变部署。第二,可以确定某些数据不能再被共享。应用(或管理员或开发人员)可以确定某些当前共享的条目需要被修改。
如果数据分割定义被改变,则可能需要调整(例如,移动)存储的数据以匹配更新的定义。数据分割定义是与应用的契约的类型,让应用知道哪些记录值可以被写入并被存储在租户数据库容器中。如果数据分割定义改变,则可以移动数据,使得数据分割定义一致地描述存储在租户数据库容器中的数据(并且相应地,例如,使用数据分割定义的补充,描述存储在共享数据库容器中的数据)。调整存储的数据以匹配更新的数据分割定义可以避免唯一性约束违规(uniqueness constraint violations)、数据丢失和其他问题。
图49是用于将不同类型的改变应用于多租户数据库系统的示例方法4900的流程图。应当理解的是,方法4900和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法4900和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法4900和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法4900和相关方法可以由图1的改变管理系统执行。
在4902处,对于数据库系统中的一组表,将对结构定义(S)、共享类型定义(T)和键模式(K)的改变部署到新共享数据库容器。新共享数据库容器包括已在目标结构中的表,并且包括现在要在产品的目标版本中定义的共享的表(例如,如果表的共享类型被改变,则新共享数据库容器包括该表的共享部分,或者如果该表现被完全共享,则包括整个表)。类似地,如果表的分割定义被改变,则新共享数据库容器中的共享表的新版本包括与新分割定义一致的内容。
在4904处,为了计算要为该表执行的一组动作的目的,识别该组表中的表,用于完成部署的租户部分。
在4906处,确定是否要对识别的表进行对结构定义、共享类型定义或键模式中的仅一个的改变。
在4908处,如果要对识别的表进行对结构定义、共享类型定义或键模式中的仅一个的改变,则使用相应的结构、共享类型或键模式改变基础设施来执行这一个改变。下面参考图50至图53描述共享类型改变基础设施。下面关于图54描述了键模式改变基础设施。
结构改变基础设施(其可以是数据字典的一部分或以其他方式与数据字典相关联)可以包括用于定义表和视图结构的机制。结构改变基础设施可以基于表结构和目标定义来计算表创建语句和表改变操作。结构改变基础结构可以从表定义中计算视图语句,例如,选择表的所有字段的视图。结构改变基础设施可以计算一个数据库容器中视图的视图语句,该视图语句从另一数据库容器和另一模式中选择数据,其中视图读取另一数据库容器名称和模型定义作为输入参数。
对于可写表的结构的改变,结构改变基础设施可以在租户数据库容器中适当调整可写表的结构。对于只读表结构的改变,结构改变基础设施可以在租户数据库容器中丢弃到旧共享容器中的旧表的视图,并在租户数据库容器中创建到新共享数据库容器中新表的视图,其中新视图具有与新只读表的结构匹配的新结构(与旧的、丢弃的视图相比)。
对于分割表的结构的改变,结构改变基础设施可以:1)在租户数据库容器中丢弃对旧共享数据库容器中的分割表的旧只读表部分的视图;2)在租户数据库容器中丢弃分割表的联合视图;3)调整租户数据库容器中的分割表的可写表部分;以及4)在租户数据库容器中创建新的联合视图,其中联合视图具有新结构,该新结构是共享数据库容器中的分割表的新只读表部分和租户数据库容器中的分割表的调整后的可写表部分的结构的联合。
在4910处,确定是否要对识别的表进行对结构定义和共享类型定义的改变。
在4912处,如果要对识别的表进行结构定义和共享类型定义的改变,则使用共享类型改变基础设施(包括通过共享类型改变基础结构对结构定义的改变的集成)来执行对共享类型定义的改变。
在4914处,确定是否要对所识别的表进行对结构定义和键模式的改变。
在4916处,如果要对所识别的表进行对结构定义和键模式的改变,则首先使用结构改变基础设施来改变结构定义。
在4918处,如果要对所识别的表进行结构定义和键模式的改变,则在由结构改变基础设施改变了结构定义之后,使用键模式改变基础设施来改变它们的键模式。
在4920处,确定是否存在更多的表要处理。如果有更多的表要处理,则识别下一个表(例如,在4904处,并处理下一个表)。对于给定的表,通常不会同时发生对共享类型和键模式两者的改变的组合,因为键模式改变将指示共享类型的表在表被修改之前和之后都被分割。
图50是用于改变一个或多个表的共享类型的示例方法5000的流程图。应当理解的是,方法5000和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5000和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5000和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5000和相关方法可以由图1的共享类型改变基础设施140执行。
在5002处,接收具有新一组共享表的新共享数据库容器,该新一组共享表中的至少一些与旧共享容器中的旧一组表相比共享类型有所不同。
在5004处,针对新一组表接收共享类型的目标定义。目标定义可以包括对一个或多个表的共享类型的改变。例如,如果确定租户对共享数据的远程访问具有不可接受的性能(例如,可以在复杂视图中使用共享表),则可能发生改变共享类型的期望。期望的改变可以是使当前共享的表成为本地表以提高性能。作为另一示例并且如上所述,可以决定共享比当前共享的更多的表,或者允许对表的更多扩展,这可能导致更多的表被定义为本地表。共享类型的改变可能需要在共享数据库容器中存储更多表、更少表或新表。
在5006处,将当前共享类型与租户容器中的每个表的目标共享类型进行比较。给定共享只读、分割和本地三种共享类型,可以识别六种不同类型的共享类型改变,包括:1)从共享只读到本地(R→L);2)从共享只读到分割(R→W);3)从本地到共享只读(L→R);4)从本地到分割(L→W);5)从分割到共享只读(W→R);和6)从分割到本地(W→L)。
在5008处,对于每个表,在租户容器中改变表内容和访问逻辑,以反映相应表的新共享类型。修改表内容和访问逻辑可以包括:删除租户中的内容并链接到共享数据库容器中的内容;将内容从共享数据库容器复制到租户数据库容器,并移除到共享数据库容器的(多个)链接;通过将租户数据复制到新表并创建租户和共享数据的联合视图来分割数据;以及通过将共享数据复制到租户数据库容器并移除联合视图来合并数据。此外,下面参考图51至图53描述从一种共享类型改变到另一种共享类型的更具体细节。
图51是示出从第一表类型到第二、不同表类型的过渡的表5100。例如,类型本地5102(“L”)的表可以被转换为类型共享只读5104(“R”)的表或分割5106(“W”,其中分割是混合表的另一术语)的表。可以将类型共享只读5108的表转换为类型本地5110或类型分割5106的表。可以将类型分割5112的表转换为类型共享只读5104或类型本地5110的表。
如单元5114所示,从表类型共享只读5108到表类型分割5106的转换(例如,R→W)可以包括丢弃对共享表5114a的视图、创建“/W/TAB”租户本地表5114b以及创建联合视图5114c的处理操作。例如,图52示出系统5200,其包括处于第一版本的第一系统5202和处于第二、更后版本的第二系统5204。包括在第一系统5202中的租户容器5206包括在共享容器5212中包括的共享表5210上的只读视图5208,其中只读视图5208和共享表5210是共享只读表类型5108的实施方式。共享只读表5210的“T1:R”标签中的“:R”指示符指示共享只读表5210是共享只读实施方式的一部分。
如单元5114所示,执行转换以将共享只读表类型5108的实施方式改变为第二系统5204中的分割表类型5106的实施方式。在从第一系统5202到第二系统5204的转换中,丢弃只读视图5208(例如,处理操作5114a)。例如,只读视图5208不被包括在第二系统5204中的租户容器5214中。可写表5216(例如,“/W/T1”)在租户容器5214中被创建(例如,处理操作5114b)。在租户容器5214中为可写表5216和共享容器5221中的共享表5220创建联合视图5218(例如,处理操作5114c,其中共享表5220对应于共享表5210)。可写表5216、联合视图5218和共享表5220是第二系统5204中的分割表类型5106的实施方式。共享表5220的“T1:W”标签和可写表5216的“/W/T1:W”标签中的“:W”指示符分别指示共享表5220和可写表5216是分割表实施方式的一部分。如果要对表执行表结构改变以及共享类型改变,则可以在共享类型改变完成之后对本地表执行表结构改变。
图53示出各种表类型之间的转换。表类型之间的转换包括从共享只读类型5108(“R”)到分割表类型5106(“W”)的转换。例如,先前版本系统5302包括共享只读类型的实施方式,作为租户容器5306中的只读视图5304和共享容器5310中的共享表5308。当前版本系统5312示出在从共享只读类型5108(“R”)到分割表类型5106(“W”)的转换之后的先前版本系统5302的内容。只读视图5304已经被丢弃,可写表5314已经在租户容器5316中创建(租户容器5316是租户容器5306的转换后例示),并且联合视图5317已经在租户容器5316中创建,以提供对可写表5314和共享容器5319中的共享表5318的访问(其中共享表5318对应于共享表5308并且共享容器5319是共享容器5310的转换后例示)。
再次参考图51,如在单元5116所示,从共享只读表型5108到本地表型5110的转换(例如,R→L)可以包括丢弃视图5116a、创建表5116b以及从共享表5116c复制数据的处理操作。例如并且如图52所示,租户容器5206包括共享容器5212中包括的共享表5224上的只读视图5222,其中只读视图5222和共享表5224是第一系统5202中的共享只读表类型5108的实施方式。如果要对表执行表结构改变以及共享类型改变,则可以在共享类型改变完成之后对本地表执行表结构改变。
如单元5116所表示,共享只读表类型5108的实施方式被改变为第二系统5204中的本地表类型5110的实施方式。在从第一系统5202到第二系统5204的转换中,丢弃只读视图5222(例如,处理操作5116a)。例如,只读视图5222不被包括在第二系统5204中的租户容器5214中。本地表5226(例如,“T2”)在租户容器5214中被创建(例如,处理操作5116b)。将数据从共享表5224复制到创建的本地表5226。本地表5226是第二系统5204中的本地表类型5110的实施方式,如本地表5226的“T2:L”标签中的“:L”所指示。在一些实施方式中,在将数据复制到本地表5226之后丢弃共享表5224。
图53包括从共享只读表类型5108(“R”)到本地表类型5110(“L”)的转换的另一例示。例如,先前版本系统5320包括共享只读类型的实施方式,作为租户容器5324中的只读视图5322和共享容器5328中的共享表5326。当前版本系统5330示出在从共享只读类型5108(“R”)到本地表类型5110(“L”)的转换之后的先前版本系统5320的内容。已丢弃只读视图5322,已在租户容器5332中创建本地表5331(租户容器5332是租户容器5324的转换后例示),已经将数据从共享表5326复制到本地表5331(例如,如箭头5333所示),并且在完成数据复制操作之后已经丢弃共享表5326(例如,作为共享容器5328的转换后例示的共享容器5334中不存在共享表)。
再次参考图51,如单元5118中所示,从分割表类型5112到共享只读表类型5104的转换(例如,W→R)可以包括丢弃本地表5118a、丢弃联合视图5118b以及创建到共享表5118c的视图的处理操作。例如并且如图52所示,租户容器5206包括联合视图5228和本地表5230,并且共享容器5212包括共享表5232,其中联合视图5228、本地表5230和共享表5232是第一系统5202中的分割表类型5108的实施方式。
如单元5118所表示,分割表类型5112的实施方式被改变为第二系统5204中的共享只读表类型5104的实施方式。在从第一系统5202到第二系统5204的转换中,丢弃本地表5230(例如,处理操作5118a)并且丢弃联合视图5228(例如,处理操作5118b)。例如,本地表5230和联合视图5228不被包括在第二系统5204中的租户容器5214中。在一些实施方式中,如果本地表5230包括内容,则来自本地表5230的数据可以被存储在隔离表(quarantinetable)中,用于在部署之后进行分析和潜在的数据检索。在租户容器5214中创建到共享容器5221中包括的共享表5236的只读视图5234,其中共享表5236对应于共享表5232。只读视图5234和共享表5236是第二系统5204中的共享只读表类型5104的实施方式。
图53包括从分割表类型5112(“W”)到共享只读表类型5104(“R”)的转换的另一例示。例如,先前版本系统5336包括分割类型的实施方式,作为租户容器5338中的联合视图5337,该联合视图5337提供对租户容器5338中的本地表5339和共享容器5341中的共享表5340的访问。当前版本系统5342示出在从分割表类型5112(“W”)到共享只读表类型5104(“R”)的转换之后的先前版本系统5336的内容。本地表5339和联合视图5337已被丢弃(例如,本地表5339和联合视图5337不会出现在租户容器5343(租户容器5343是租户容器5338转换后的例示)中)。已经在租户容器5343中创建了只读视图5344,以提供对共享容器5346中的共享表5345的访问(其中共享表5345对应于共享表5340)。
再次参考图51,如在单元5120中所示,从分割表类型5112到本地表类型5210的转换(例如,W→L)可以包括将数据从共享表复制到本地表5210a和建立一个表(例如,作为本地表)5120b的处理操作。例如并且如图52所示,租户容器5206包括联合视图5238和可写表5240,并且共享容器5212包括共享表5242,其中联合视图5238、可写表5240和共享表5242是第一系统5202中的分割表类型5108的实施方式。如果要对表执行表结构改变以及共享类型改变,则可以在共享类型改变完成之后对本地表执行表结构改变。
如单元5120所表示,可以将分割表类型5112的实施方式改变为第二系统5204中的本地表类型5110的实施方式。在从第一系统5202到第二系统5204的转换中,将数据从共享表5242复制到可写表5240(例如,处理操作5220a)。在处理操作5220b处,将一个表建立为租户容器5214中的本地表(例如,处理操作5220b)。例如,可以丢弃共享表5242和联合视图5238。例如,共享表5242和联合视图5238不被包括在第二系统5204中的租户容器5214中。可写表5240可以在租户容器5214中被重命名,例如,从替代名称(例如,“/W/T4”)到“标准”名称(例如,“T4”),如可写表5244所示。可写表5244是第二系统5204中的本地表类型5110的实施方式。
图53包括从分割表类型5112(“W”)到本地表类型5110(“L”)的转换的另一例示。例如,先前版本系统5350包括分割类型的实施方式,作为租户容器5352中的联合视图5351,该联合视图5337提供对租户容器5351中的本地表5353和共享容器5355中的共享表5354的访问。当前版本系统5356示出在从分割表类型5112(“W”)到本地表类型5110(“L”)的转换之后的先前版本系统5350的内容。可写表5353已从“/W/T4”重命名为“T4”,如租户容器5358中的本地表5357所示(租户容器5358是租户容器5352的转换后例示)。已将数据从共享表5354复制到本地表5357,如箭头5359所示。在复制数据之后,共享表5354已被丢弃。联合视图5351也已被丢弃。例如,共享表5354不出现在当前版本系统5356中的共享容器5360中,并且联合视图5351不出现在租户容器5358中。
再次参考图51,如单元5122中所示,从本地表类型5102到共享只读表类型5104的转换(例如,L→R)可以包括丢弃本地表5122a和创建对共享表5122b的视图的处理操作。例如并且如图52所示,租户容器5206包括本地表5246,该本地表5246是第一系统5202中的本地表类型5110的实施方式。
如单元5122中所述,丢弃本地表5246(例如,处理操作5122a)。例如,本地表5246不被包括在第二系统5204中的租户容器5214中。在一些实施方式中,如果本地表5426包括内容,则来自本地表5426的数据可以被存储在隔离表中,用于在部署之后进行分析和潜在的数据检索。创建只读视图5248以访问共享容器5221中的共享表5250。共享表5250可能已经存在于共享容器5221中(例如,以服务其他租户)或者可以在共享容器5221中被创建。只读视图5248和共享表5250是第二系统5204中的共享只读表类型5104的实施方式。
图53包括从本地表类型5110(“L”)到共享只读表类型5104(“R”)的转换的另一例示。例如,先前版本系统5362包括本地类型的实施方式,作为租户容器5365中的本地表5364。当前版本系统5366示出在从本地表类型5110(“L”)到共享只读表类型5104(“R”)的转换之后的先前版本系统5362的内容。已丢弃本地表5364(例如,本地表5364未出现在当前版本系统5366中的租户容器5367中(租户容器5367是租户容器5365的转换后例示))。在租户容器5367中创建了只读视图5368,以提供对当前版本系统5366中包括的共享容器5370中的共享表5369的访问。共享表5369可能已经存在于共享容器5370中(例如,以服务其他租户)或者已经在共享容器5370中被创建作为转换的一部分。
再次参考图51,如单元5124所示,从本地表类型5102到分割表类型5106的转换(例如,L→W)可以包括根据键模式将当前数据复制到可写表5124a、丢弃旧表5124b以及创建联合视图5124c的处理操作。例如并且如图52所示,租户容器5206包括本地表5252,该本地表5246是第一系统5202中的本地表类型5110的实施方式。
如单元5124中所述,将数据从本地表5252复制到租户容器5214中的可写表5254(例如,处理操作5124a)。例如,可以临时重命名表5252(例如,重命名为“/OLD/T6”),可以创建可写表5254(例如,名为“/W/T6”),并且可以根据定义的键模式将数据从本地表5252复制到可写表5254。在复制数据之后,可以丢弃本地表5252(例如,处理操作5124b)。可以为可写表5254和共享容器5221中的共享表5258创建联合视图5256(例如,处理操作5124c)。共享表5258可能已经存在于共享容器5221中(例如,以服务其他租户)或者可以在共享容器5221中被创建。联合视图5256、共享表5258和可写表5254是第二系统5204中的分割表类型5106的实施方式。如果要对表执行表结构改变以及共享类型改变,则可以在创建联合视图5256之前对可写表5254执行表结构改变。
图53包括从本地表类型5110(“L”)到分割表类型5106(“W”)的转换的另一例示。例如,先前版本系统5372包括本地类型的实施方式,作为租户容器5376中的本地表5374。当前版本系统5378示出在从本地表类型5110(“L”)到分割表类型5106(“W”)的转换之后的先前版本系统5372的内容。代替将数据从本地表5374复制到新可写表,如上关于本地表5252和可写表5254所述,本地表5352可以被重命名(例如,从“T6”到“/W/T6”),如租户容器5382中的可写表5380所示(租户容器5382是租户容器5376的转换后例示)。已在当前版本系统5378中的共享容器5385中创建共享表5384。已在租户容器5382中创建联合视图5386,以提供对可写表5380和共享表5384的访问。
图54示出用于在交换共享数据库容器时改变租户键(例如,分割定义)的系统5400。租户键的改变可以通过分割定义改变基础设施来执行。分割定义改变基础设施包括在活动和非活动状态下每一表存储分割定义的机制。分割定义改变基础设施可以计算和执行DML(数据操纵语言)语句来复制数据和删除数据,以便表符合分割定义。如上所述,可以使用WHERE子句来定义分割定义(也称为键模式),用WHERE子句定义的记录可以被存储在租户数据库容器中的混合表的本地表部分中。
系统5400包括版本一共享数据库容器5402,该共享数据库容器5402包括租户键表5404和只读表5406,并且只读表5406是名为“TAB”的混合表的只读部分。只读表5406包括具有以“A”开头的键的记录5408,以及具有以“Y”开头的键的记录5410。记录5408和5410的键符合租户键表5404中包括的WHERE子句5411。WHERE子句5411定义允许租户写入的键,并且WHERE子句5411的补充定义允许存储在只读表5406中的键。分别对于记录5408和5410的键值“A*”和“Y*”与WHERE子句5411“NOT(Key like‘B%’or Key like‘Z%’)的补充匹配。换句话说,记录5408和5410的键不以“B”或“Z”开头。
用于第一租户的版本一租户数据库容器5412包括对租户键表5404的视图5413、只读表5406的视图5414、作为“TAB”混合表的可写部分的可写表5416以及对可写表5416和只读表5406(通过视图5414)的联合视图5418。可写表5416包括具有以“B”开头的键的记录5420(例如,匹配WHERE子句5411)和具有以“Z”开头的键的记录5422(例如,还匹配WHERE子句5411)。
在部署期间,(多个)开发者和/或(多个)管理员可以确定WHERE子句5411现在是不正确的。例如,可以确定不再共享具有以“Y”开头的键的记录(例如,可能期望租户能够存储具有以“Y”开头的键的本地记录)。作为另一示例,可以确定现在应该共享以“B”开头的记录(例如,可以确定租户应用不写入以“B”开头的本地记录)。
已经准备了版本二共享数据库容器5424用于部署系统5400的版本二。版本二共享数据库容器5424包括更新的租户键表5426,该租户键表5426包括更新的WHERE子句5428,该WHERE子句5428指示允许租户将以“Y”或“Z”开头的键的记录写入名为“TAB”的混合表。更新的只读表5430包括要为名为“TAB”的混合表共享的记录。例如,更新的只读表5430包括具有以“A”开头的键的记录5432(其可以是记录5408的副本)和具有以“B”开头的键的记录5434(其可以是先前提供给租户但租户可编辑但是现在是只读的和共享的记录)。记录5432和5434具有与更新的WHERE子句5428的补充匹配的键。记录5434可以与记录5420相同或不同。例如,在记录5420首次提供给第一租户之后,第一租户可能已经修改了记录5420。
升级过程可被用于将租户数据库容器升级到系统5400的版本二。例如,版本二租户数据库容器5440已经被升级到版本二并且现在被连接到版本二共享数据库容器5424。版本二租户数据库容器5440包括对更新的租户键表5426的视图5442、更新的可写表5444、对更新的只读表5430的更新视图5446以及更新的联合视图5448。更新的可写表5444包括具有以“Y”开头的键的记录5450(例如,与更新的WHERE子句5428兼容)和具有以“Z”开头的键的记录5452(例如,还与更新的WHERE子句5428兼容)。
出于以下讨论的目的,假设在版本二租户数据库容器5440升级到版本二之前,版本二租户数据库容器5440的内容与版本一租户数据库容器5412相同,并且因此,出于讨论的目的,版本一租户数据库容器5412可以是版本二租户数据库容器5440的预部署(pre-deployment)视图。
部署工具可以在版本一租户数据库容器5412升级到版本二期间确定在版本一租户数据库容器5412中要改变什么。部署工具可以识别只读表5406中要从只读表5406移动到可写表5416的记录(例如,以前共享并且不再共享的记录)。部署工具可以执行以下插入语句,以将记录从只读表5406移动到可写表5416(假设共享数据库容器5402的名称是“shared_old”并且“<new_where_condition>”是更新的WHERE子句5428):
INSERT INTO/W/TAB(SELECT*FROM shared_old.TAB WHERE(<new_where_condition>))。插入语句可以导致将记录5410移动到可写表5416(例如,如记录5450在更新的可写表5444中所示),因为记录5410的键“Y*”与更新的WHERE子句5411匹配。
部署工具可以识别可写表5416中要删除的记录(例如,第一租户不再允许本地地存储为可编辑记录的记录)。例如,部署工具可以执行以下语句以从可写表5416中删除记录:DELETE FROM/W/TAB WHERE NOT(<new_where_condition>)。删除语句可以导致从可写表5416删除记录5420,因为记录5420的键“B*”与更新的WHERE子句5428不匹配。例如,在更新的可写表5444的升级期间,类似的记录可能已经从更新的可写表5444中删除(例如,更新的可写表5444不包括以“B”开头的任何记录)。记录5420可以在被删除时移动到隔离位置。
示例方法
图55是用于重定向写入查询的示例方法5500的流程图。应当理解的是,方法5500和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5500和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5500和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5500和相关方法可以由图1的写入重定向器128执行。
在5502处,向数据库系统提供对至少一个应用的访问。该至少一个应用可以包括一个或多个租户应用。例如,可以通过数据库接口提供访问。
在5504处,从至少一个应用程序接收第一查询。第一查询可以是检索、添加或编辑数据库系统中的数据。
在5506处,确定第一查询与联合视图相关联,该联合视图提供对数据库系统中的共享数据库容器中包括的只读表和租户数据库容器中的可写表的统一只读访问。
在5508处,确定第一查询是否是读取查询。读取查询检索数据,但不修改数据或向数据库系统添加数据。
在5510处,响应于确定第一查询是读取查询,使用联合视图处理第一查询。使用联合视图处理第一查询可以包括从只读表和可写表中的一个或两个中检索数据。
在5512处,响应于确定第一查询不是读取查询(例如,第一查询是写入查询),修改第一查询以使用可写表而不是联合视图。因此,写入查询被重定向到使用可写表,而不是只读联合视图。
在5514处,使用可写表处理第一查询。使用可写表处理第一查询可以包括修改或向可写表添加数据。
图56是用于键模式管理的示例方法5600的流程图。应当理解的是,方法5600和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5600和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5600和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5600和相关方法可以由图1的约束实行系统126执行。
在5602处,向数据库系统提供对至少一个应用的访问。
在5604处,从至少一个应用接收对逻辑数据库表的至少一个查询。逻辑数据库表在数据库系统中表示为包括允许由至少一个应用写入的逻辑数据库表的记录的第一物理数据库表,和包括允许由至少一个应用读取但不写入的逻辑数据库表的记录的第二物理数据库表。
在5606处,确定该至少一个查询是写入查询。写入查询被配置为修改或向数据库系统添加数据。
在5608处,确定至少一个查询是否符合键模式配置。键模式配置描述包括在第一物理数据库表中或者可能包括在(例如,添加到)第一物理数据库表中的记录的键。
在5610处,响应于确定至少一个查询符合键模式定义,将写入查询重定向到第一物理数据库表。重定向可以包括修改写入查询以使用第一物理数据库表而不是逻辑数据库表。
在5612处,响应于确定至少一个查询不符合键模式配置,拒绝写入查询。拒绝写入查询可以防止将记录添加到不符合键模式配置的第一物理数据库表中。
图57是用于在系统共享类型之间过渡的示例方法5700的流程图。应当理解的是,方法5700和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5700和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5700和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5700和相关方法可以由图1的系统共享类型修改器148执行。
在5702处,接收请求以将数据库系统从标准系统设置转换为共享系统设置。数据库系统包括租户数据库容器。在将数据库系统从标准系统设置转换到共享系统设置之前,租户数据库容器包括:只读表,用于存储由(多个)应用读取但不写入的只读数据;第一可写表,用于存储由(多个)应用读取和写入的可写数据;和混合表,用于存储由(多个)应用读取但不写入的只读混合数据以及由(多个)应用读取和写入的可写混合数据。尽管描述单一只读表、单一可写表和单一混合表,但是租户数据库容器可以包括各种类型的表的任何组合。
在5704处,创建共享数据库容器,用于存储由多个租户使用的共享内容。
在5706处,在共享数据库容器中创建第一共享表,用于存储由应用读取但不写入的只读数据。
在5708处,将数据从只读表复制到第一共享表。
在5710处,从租户数据库容器中丢弃只读表。
在5712处,在租户数据库容器中创建只读视图,用于提供对第一共享表的读取访问。
在5714处,在共享数据库容器中创建第二共享表,用于存储只读混合数据。
在5716处,将只读混合数据从混合表复制到第二共享表。
在5718处,从混合表中删除只读混合数据。
在5720处,将混合表重命名为第二可写表。
在5722处,创建联合视图以提供对第二共享表和第二可写表的统一访问。
图58是用于交换共享数据库容器的示例方法5800的流程图。应当理解的是,方法5800和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5800和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5800和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5800和相关方法可以由图1的部署工具130执行。
在5802处,接收部署数据库系统的新版本的请求。
在5804处,接收包括用于数据库系统的新版本的数据的部署套装其。
在5806处,下一版本共享数据库容器与当前版本共享数据库容器被并行安装在数据库系统中。
在5808处,将新版本部署到多个租户数据库容器中的每一个。将新版本部署到多个租户数据库容器中的每一个包括在5810处将多个租户数据库容器中的每一个单独链接到下一版本共享数据库容器。链接可以包括丢弃在每个相应的租户数据库容器的至少一个视图以在当前版本共享数据库容器共享内容,并将每个相应租户数据库容器中的至少一个新视图添加到下一版本共享数据库容器中的更新的共享内容。
将新版本部署到多个租户数据库容器中的每一个包括在5812处将改变的本地内容从部署套装部署到每个租户数据库容器。
在5814处,在部署到多个租户数据库容器中的每一个已完成之后,丢弃当前版本共享数据库容器。
图59是用于修补共享数据库容器的示例方法5900的流程图。应当理解的是,方法5900和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法5900和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法5900和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法5900和相关方法可以由图1的修补系统146执行。
在5902处,接收用于将数据库系统升级到第二软件版本的第一部署套装。升级可以包括部署到共享数据库容器和一个或多个租户数据库容器。
在5904处,从部署套装中的信息识别完全存储在共享数据库容器中的共享对象。
在5906处,确定部署套装中的共享对象的第一共享内容。
在5908处,识别在共享数据库容器中具有共享部分和在租户数据库容器中具有租户部分的部分共享对象。
在5910处,确定部署套装中的部分共享对象的第二共享内容。
在5912处,将确定的第一共享内容和确定的第二共享内容部署到共享数据库容器作为部署的共享内容。
在5914处,确定部署套装中的部分共享对象的第一本地内容。
在5916处,将第一本地内容部署到相应的租户数据库容器。
在5918处,识别不在共享数据库容器中存储数据的本地对象。
在5920处,识别部署套装中的本地对象的第二本地内容。
在5922处,将第二本地内容部署到相应的租户数据库容器。
图60是用于将不同类型的改变部署到数据库系统的示例方法6000的流程图。应当理解的是,方法6000和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法600和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法6000和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法6000和相关方法可以由图1的改变管理系统134执行。
在6002处,为当前版本共享数据库容器中的每个表确定表结构和表共享类型。
在6004处,为下一版本共享数据库容器中的每个表确定表结构和表共享类型。
在6006处,将当前版本共享数据库容器中的表的表结构与下一版本共享数据库容器中的表的表结构进行比较,以识别表结构差异。
在6008处,将当前版本共享数据库容器中的表的表共享类型与下一版本共享数据库容器中的表的表共享类型进行比较,以识别表共享类型差异。
在6010处,将与当前版本共享数据库容器相关联的当前键模式配置与与下一版本共享数据库容器相关联的更新的键模式配置进行比较,以识别键模式配置差异。
在6012处,基于表结构差异、表共享类型差异和键模式配置差异,将至少一个租户数据库容器中的每个表升级到下一版本。
图61是用于改变键模式定义的示例方法6100的流程图。应当理解的是,方法6100和相关方法可以由例如任何合适的系统、环境、软件和硬件,或者系统、环境、软件和硬件的组合来适当地执行。例如,客户端、服务器或其他计算设备中的一个或多个可用于执行方法6100和相关方法,并从客户端、服务器或其他计算设备的存储器获得任何数据。在一些实施方式中,方法6100和相关方法由以上关于图1描述的系统100的一个或多个组件执行。例如,方法6100和相关方法可以由图1的分割定义改变基础设施执行。
在6102处,接收包括新键模式配置的新共享数据库容器。新共享数据库容器是当前共享数据库容器的新版本,用于存储多个租户可访问的数据。新键模式配置是逻辑分割表的当前键模式配置的新版本。逻辑分割表包括在当前共享数据库容器中的只读部分表和租户数据库容器中的可写部分。它们当前键模式配置描述可写部分中包括的记录的键。新共享数据库容器包括逻辑分割表的更新的只读部分,该只读部分包括与新键模式配置的补充匹配的记录。
在6104处,在当前共享数据库容器中的逻辑分割表的只读部分中识别与新键模式配置匹配的记录。
在6106处,将识别的记录从当前共享数据库容器中的逻辑分割表的只读部分移动到包括在租户数据库容器中的逻辑分割表的可写部分。
在6108处,从租户数据库容器中的逻辑分组表的可写部分删除与新键模式配置不匹配的记录。
前面的附图和随附的描述示出示例过程和计算机可实施的技术。但是系统100(或它的软件或其他组件)考虑使用、实施或执行用于执行这些和其他任务的任何合适的技术。应当理解的是,这些过程仅用于说明目的,并且所描述的或类似的技术可以在任何适当的时间执行,包括同时、单独或组合执行。另外,这些过程中的许多操作可以同时、并行和/或以不同于所示的顺序发生。而且,只要方法保持适当,系统100可以使用具有附加操作、更少操作和/或不同操作的过程。
换句话说,尽管已经根据某些实施例和通常相关联的方法描述了本公开,但是这些实施例和方法的改变和置换对于本领域技术人员而言将是显而易见的。因此,示例实施例的以上描述不限定或限制本公开。在不脱离本公开的精神和范围的情况下,其他改变、替换和改变也是可能的。
Claims (20)
1.一种系统包括:
数据库系统,包括:
当前共享数据库容器,用于存储多个租户可访问的数据,所述多个租户包括第一租户;
租户数据库容器,用于存储第一租户的数据;
逻辑本地表,用于存储第一租户的第一可写数据,所述逻辑本地表实施为所述租户数据库容器中的本地物理表;
逻辑共享只读表,用于存储由所述多个租户可访问的第一只读数据,所述逻辑共享只读表实施为共享数据库容器中的只读物理表和租户数据库容器中的只读视图;和
逻辑分割表,用于存储由多个租户可访问的第二只读数据和由第一租户可访问的第二可写数据,所述逻辑分割表实施为共享数据库容器中的只读部分物理表、租户数据库容器中的可写部分物理表、以及租户数据库容器中的只读部分物理表和可写部分物理表上的联合视图;
至少一个应用,被配置为向数据库系统提交查询,每个查询包括对逻辑本地表、逻辑共享只读表或逻辑分割表中的一个或多个的引用;
用于所述逻辑分割表的当前键模式配置,所述当前键模式配置描述用于所述逻辑分割表的可写部分物理表中包括的记录的键;和
转换工具,被配置为:
接收新共享数据库容器,所述新共享数据库容器包括用于逻辑分割表的新键模式配置和用于所述逻辑分割表的更新的只读部分物理表,其中更新的只读部分物理表包括与所述新键模式配置的补充匹配的记录;
在所述当前共享数据库容器中的逻辑分割表的只读部分物理表中识别与所述新键模式配置匹配的第一记录;
将第一记录从所述当前共享数据库容器中的逻辑分割表的只读部分物理表移动到所述租户数据库容器中的逻辑分割表的可写部分物理表;并且
从所述租户数据库容器中的逻辑分割表的可写部分物理表删除与所述新键模式配置不匹配的第二记录。
2.如权利要求1所述的系统,其中,第二记录在删除时被移动到隔离位置。
3.如权利要求1所述的系统,其中,对于更新的共享数据库容器中的给定更新的逻辑表,所述转换工具被配置为:
识别给定更新的逻辑表的更新的表共享类型;
识别所述当前共享数据库容器中的对应的当前逻辑表的当前表共享类型,其中更新的表共享类型和当前表共享类型各自为本地、分割、或共享只读中的一个;
当当前表共享类型为本地并且更新的表共享类型为共享只读时,将当前逻辑表从本地类型转换为逻辑共享只读表的新实施方式;
当当前表共享类型为本地并且更新的表共享类型为分割时,将当前逻辑表从本地类型转换为逻辑分割表的新实施方式;
当当前表共享类型为分割并且更新的表共享类型为共享只读时,将当前逻辑表从分割类型转换为逻辑共享只读表的新实施方式;
当当前表共享类型为分割并且更新的表共享类型为本地时,将当前逻辑表从分割类型转换为逻辑本地表的新实施方式;
当当前表共享类型为共享只读并且更新的表共享类型为分割时,将当前逻辑表从共享只读类型转换为逻辑分割表的新实施方式;并且
当当前表共享类型为共享只读并且更新的表共享类型为本地时,将当前逻辑表从共享只读类型转换为逻辑本地表的新实施方式。
4.如权利要求3所述的系统,其中,更新的共享数据库容器包括用于逻辑共享只读表的新实施方式的新只读表,并且将当前逻辑表从本地类型转换为逻辑共享只读表的新实施方式包括:
丢弃当前逻辑表的本地物理表;和
创建租户数据库容器中对新只读表的新只读视图。
5.如权利要求3所述的系统,其中,更新的共享数据库容器包括用于逻辑分割表的新实施方式的新只读部分物理表,并且将当前逻辑表从本地类型转换为逻辑分割表的新实施方式包括:
在租户数据库容器中为逻辑分割表的新实施方式创建新可写部分物理表;
将当前逻辑表的可写物理表中与更新的键配置匹配的记录复制到新可写部分物理表;
丢弃当前逻辑表的可写物理表;和
创建对更新的共享数据库容器中的新只读部分物理表和租户数据库容器中的新可写部分物理表的新联合视图。
6.如权利要求3所述的系统,其中,更新的共享数据库容器包括用于逻辑共享只读表的新实施方式的新只读物理表,并且将当前逻辑表从分割类型转换为逻辑共享只读表的新实施方式包括:
丢弃租户数据库容器中的当前逻辑表的联合视图;
丢弃当前逻辑表的可写部分物理表;和
创建租户数据库容器中对新只读物理表的视图。
7.如权利要求3所述的系统,其中,将当前逻辑表从分割类型转换为逻辑本地表的新实施方式包括:
将记录从当前共享数据库容器中的当前逻辑表的只读部分物理表复制到租户数据库容器中的当前逻辑表的可写部分物理表;
丢弃租户数据库容器中的当前逻辑表的联合视图;和
重命名当前逻辑表的可写部分物理表以匹配给定更新的逻辑表的名称。
8.如权利要求3所述的系统,其中,更新的共享数据库容器包括用于逻辑分割表的新实施方式的新只读部分物理表,并且将当前逻辑表从共享只读类型转换为逻辑分割表的新实施方式包括:
丢弃租户数据库容器中的当前逻辑表的只读视图;
为租户数据库容器中的逻辑分割表的新实施方式创建新可写部分物理表;和
创建对更新的共享数据库容器中的新只读部分物理表和租户数据库容器中的新可写部分物理表的新联合视图。
9.如权利要求3所述的系统,其中,将当前逻辑表从共享只读类型转换为逻辑本地表的新实施方式包括:
从租户数据库容器丢弃当前逻辑表的只读视图;
为租户数据库容器中的逻辑本地表的新实施方式创建新本地表;和
将记录从当前共享数据库容器中的当前逻辑表的只读表复制到新本地表。
10.一种方法,包括:
在数据库系统中识别用于存储多个租户可访问的数据的当前共享数据库容器,所述多个租户包括第一租户;
识别用于存储第一租户的数据的租户数据库容器;
识别用于存储第一租户的第一可写数据的逻辑本地表,所述逻辑本地表实施为租户数据库容器中的本地物理表;
识别用于存储由多个租户可访问的第一只读数据的逻辑共享只读表,所述逻辑共享只读表实施为共享数据库容器中的只读物理表和租户数据库容器中的只读视图;
识别用于存储由多个租户可访问的第二只读数据和由第一租户可访问的第二可写数据的逻辑分割表,所述逻辑分割表实施为共享数据库容器中的只读部分物理表、租户数据库容器中的可写部分物理表、以及租户数据库容器中的只读部分物理表和可写部分物理表上的联合视图;
识别用于所述逻辑分割表的当前键模式配置,所述当前键模式配置描述用于所述逻辑分割表的可写部分物理表中包括的记录的键;
接收新共享数据库容器,所述新共享数据库容器包括用于逻辑分割表的新键模式配置和用于所述逻辑分割表的更新的只读部分物理表,其中更新的只读部分物理表包括与新键模式配置的补充匹配的记录;
在当前共享数据库容器中的逻辑分割表的只读部分物理表中识别与新键模式配置匹配的第一记录;
将第一条记录从当前共享数据库容器中的逻辑分割表的只读部分物理表移动到租户数据库容器中的逻辑分割表的可写部分物理表;和
从租户数据库容器中的逻辑分割表的可写部分物理表删除与新键模式配置不匹配的第二记录。
11.如权利要求10所述的方法,还包括第二记录在删除时被移动到隔离位置。
12.如权利要求10所述的方法,还包括对于更新的共享数据库容器中的给定更新的逻辑表:
识别给定更新的逻辑表的更新的表共享类型;
识别当前共享数据库容器中的对应的当前逻辑表的当前表共享类型,其中更新的表共享类型和当前表共享类型各自为本地、分割、或共享只读中的一个;
当当前表共享类型为本地并且更新的表共享类型为共享只读时,将当前逻辑表从本地类型转换为逻辑共享只读表的新实施方式;
当当前表共享类型为本地并且更新的表共享类型为分割时,将当前逻辑表从本地类型转换为逻辑分割表的新实施方式;
当当前表共享类型为分割并且更新的表共享类型为共享只读时,将当前逻辑表从分割类型转换为逻辑共享只读表的新实施方式;
当当前表共享类型为分割并且更新的表共享类型为本地时,将当前逻辑表从分割类型转换为逻辑本地表的新实施方式;
当当前表共享类型为共享只读并且更新的表共享类型为分割时,将当前逻辑表从共享只读类型转换为逻辑分割表的新实施方式;和
当当前表共享类型为共享只读并且更新的表共享类型为本地时,将当前逻辑表从共享只读类型转换为逻辑本地表的新实施方式。
13.如权利要求12所述的方法,其中,更新的共享数据库容器包括用于逻辑共享只读表的新实施方式的新只读表,并且将当前逻辑表从本地类型转换为逻辑共享只读表的新实施方式包括:
丢弃当前逻辑表的本地物理表;和
创建租户数据库容器中对新只读表的新只读视图。
14.如权利要求12所述的方法,其中,更新的共享数据库容器包括用于所述逻辑分割表的新实施方式的新只读部分物理表,并且将当前逻辑表从本地类型转换为所述逻辑分割表的新实施方式包括:
在租户数据库容器中为所述逻辑分割表的新实施方式创建新可写部分物理表;
将当前逻辑表的可写物理表中与更新的键配置匹配的记录复制到新可写部分物理表;
丢弃当前逻辑表的可写物理表;和
创建对更新的共享数据库容器中的新只读部分物理表和租户数据库容器中的新可写部分物理表的新联合视图。
15.如权利要求12所述的方法,其中,更新的共享数据库容器包括用于逻辑共享只读表的新实施方式的新只读物理表,并且将当前逻辑表从分割类型转换为逻辑共享只读表的新实施方式包括:
丢弃租户数据库容器中的当前逻辑表的联合视图;
丢弃当前逻辑表的可写部分物理表;和
创建租户数据库容器中对新只读物理表的视图。
16.如权利要求12所述的方法,其中,将当前逻辑表从分割类型转换为逻辑本地表的新实施方式包括:
将记录从当前共享数据库容器中的当前逻辑表的只读部分物理表复制到租户数据库容器中的当前逻辑表的可写部分物理表;
丢弃租户数据库容器中的当前逻辑表的联合视图;和
重命名当前逻辑表的可写部分物理表以匹配给定更新的逻辑表的名称。
17.如权利要求12所述的方法,其中,更新的共享数据库容器包括用于逻辑分割表的新实施方式的新只读部分物理表,并且将当前逻辑表从共享只读类型转换为逻辑分割表的新实施方式包括:
丢弃租户数据库容器中的当前逻辑表的只读视图;
为租户数据库容器中的逻辑分割表的新实施方式创建新可写部分物理表;和
创建对更新的共享数据库容器中的新只读部分物理表和租户数据库容器中的新可写部分物理表的新联合视图。
18.如权利要求12所述的方法,其中,将当前逻辑表从共享只读类型转换为逻辑本地表的新实施方式包括:
从租户数据库容器丢弃当前逻辑表的只读视图;
为租户数据库容器中的逻辑本地表的新实施方式创建新本地表;和
将记录从当前共享数据库容器中的当前逻辑表的只读表复制到新本地表。
19.一种或多种存储指令的计算机可读介质,当由至少一个处理器执行时,使得所述至少一个处理器执行包括以下的操作:
在数据库系统中识别用于存储多个租户可访问的数据的当前共享数据库容器,所述多个租户包括第一租户;
识别用于存储第一租户的数据的租户数据库容器;
识别用于存储第一租户的第一可写数据的逻辑本地表,所述逻辑本地表实施为租户数据库容器中的本地物理表;
识别用于存储由多个租户可访问的第一只读数据的逻辑共享只读表,所述逻辑共享只读表实施为共享数据库容器中的只读物理表和租户数据库容器中的只读视图;
识别用于存储由多个租户可访问的第二只读数据和由第一租户可访问的第二可写数据的逻辑分割表,所述逻辑分割表实施为共享数据库容器中的只读部分物理表、租户数据库容器中的可写部分物理表、以及租户数据库容器中的只读部分物理表和可写部分物理表上的联合视图;
识别用于所述逻辑分割表的当前键模式配置,所述当前键模式配置描述用于所述逻辑分割表的可写部分物理表中包括的记录的键;
接收新共享数据库容器,所述新共享数据库容器包括用于逻辑分割表的新键模式配置和用于逻辑分割表的更新的只读部分物理表,其中更新的只读部分物理表包括与新键模式配置的补充匹配的记录;
在当前共享数据库容器中的逻辑分割表的只读部分物理表中识别与新键模式配置匹配的第一记录;
将第一条记录从当前共享数据库容器中的逻辑分割表的只读部分物理表移动到租户数据库容器中的逻辑分割表的可写部分物理表;和
从租户数据库容器中的逻辑分割表的可写部分物理表中删除与新键模式配置不匹配的第二记录。
20.如权利要求19所述的计算机可读介质,其中所述操作还包括第二记录在删除时被移动到隔离位置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/794,381 | 2017-10-26 | ||
US15/794,381 US10733168B2 (en) | 2017-10-26 | 2017-10-26 | Deploying changes to key patterns in multi-tenancy database systems |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947773A true CN109947773A (zh) | 2019-06-28 |
CN109947773B CN109947773B (zh) | 2023-09-12 |
Family
ID=63035899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811055009.7A Active CN109947773B (zh) | 2017-10-26 | 2018-09-11 | 在多租户数据库系统中部署对键模式的改变 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10733168B2 (zh) |
EP (1) | EP3477488B1 (zh) |
CN (1) | CN109947773B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737670A (zh) * | 2019-10-21 | 2020-01-31 | 中国民航信息网络股份有限公司 | 一种集群数据一致性的保障方法、装置及系统 |
CN111522869A (zh) * | 2020-03-26 | 2020-08-11 | 中国南方电网有限责任公司 | 适用于多租户的整定计算云数据管理方法和整定计算系统 |
US20210318998A1 (en) * | 2020-04-10 | 2021-10-14 | International Business Machines Corporation | Dynamic schema based multitenancy |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10872066B2 (en) * | 2017-06-27 | 2020-12-22 | Salesforce.Com, Inc. | Systems and methods of database tenant migration |
US10657276B2 (en) | 2017-10-26 | 2020-05-19 | Sap Se | System sharing types in multi-tenancy database systems |
US10740318B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Key pattern management in multi-tenancy database systems |
US10740315B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Transitioning between system sharing types in multi-tenancy database systems |
US10621167B2 (en) | 2017-10-26 | 2020-04-14 | Sap Se | Data separation and write redirection in multi-tenancy database systems |
US10713277B2 (en) | 2017-10-26 | 2020-07-14 | Sap Se | Patching content across shared and tenant containers in multi-tenancy database systems |
US10452646B2 (en) | 2017-10-26 | 2019-10-22 | Sap Se | Deploying changes in a multi-tenancy database system |
US10482080B2 (en) | 2017-10-26 | 2019-11-19 | Sap Se | Exchanging shared containers and adapting tenants in multi-tenancy database systems |
US11061897B2 (en) | 2018-05-07 | 2021-07-13 | Sap Se | Materializable database objects in multitenant environments |
US10915551B2 (en) | 2018-06-04 | 2021-02-09 | Sap Se | Change management for shared objects in multi-tenancy systems |
US10977268B2 (en) * | 2019-05-31 | 2021-04-13 | Snowflake Inc. | Data exchange |
US10983762B2 (en) | 2019-06-27 | 2021-04-20 | Sap Se | Application assessment system to achieve interface design consistency across micro services |
US11249812B2 (en) | 2019-07-25 | 2022-02-15 | Sap Se | Temporary compensation of outages |
US11269717B2 (en) | 2019-09-24 | 2022-03-08 | Sap Se | Issue-resolution automation |
US11551141B2 (en) | 2019-10-14 | 2023-01-10 | Sap Se | Data access control and workload management framework for development of machine learning (ML) models |
CN111026405B (zh) * | 2019-12-02 | 2023-04-28 | 中移物联网有限公司 | 软件部署方法、装置及相关节点 |
US11379211B2 (en) | 2019-12-05 | 2022-07-05 | Sap Se | Fencing execution of external tools during software changes |
US11561836B2 (en) | 2019-12-11 | 2023-01-24 | Sap Se | Optimizing distribution of heterogeneous software process workloads |
US11030343B1 (en) * | 2020-01-28 | 2021-06-08 | Snowflake Inc. | System and method for creating a global data sharing listing |
US11354302B2 (en) | 2020-06-16 | 2022-06-07 | Sap Se | Automatic creation and synchronization of graph database objects |
CN113965582B (zh) * | 2020-07-20 | 2024-04-09 | 中移(苏州)软件技术有限公司 | 一种模式转换方法和系统,及存储介质 |
US11640289B2 (en) * | 2020-08-24 | 2023-05-02 | Rockwell Collins, Inc. | Microservices cloud-native architecture for ubiquitous simulation as a service |
CN112231300A (zh) * | 2020-10-21 | 2021-01-15 | 北京人大金仓信息技术股份有限公司 | 一种函数的分析方法、装置及电子设备 |
US11354337B1 (en) * | 2021-01-12 | 2022-06-07 | International Business Machines Corporation | Online reorganization of database tables with concurrent updates using virtual partitions |
US11366658B1 (en) | 2021-01-19 | 2022-06-21 | Sap Se | Seamless lifecycle stability for extensible software features |
US20230068864A1 (en) * | 2021-09-01 | 2023-03-02 | Sap Se | Shared data for network tenants |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080162509A1 (en) * | 2006-12-29 | 2008-07-03 | Becker Wolfgang A | Methods for updating a tenant space in a mega-tenancy environment |
US20150026131A1 (en) * | 2013-07-19 | 2015-01-22 | Sap Ag | Data availability during columnar table merges |
CN105989195A (zh) * | 2015-03-23 | 2016-10-05 | 国际商业机器公司 | 用于处理数据库数据的方法和系统 |
Family Cites Families (216)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070060609A1 (en) | 2000-02-01 | 2007-03-15 | Anderson Maibritt B | Identification and Use of Growth Hormone Secretagogue Receptor Type 1A Antagonists |
DE10113577A1 (de) | 2001-03-20 | 2003-01-09 | Sap Ag | Verfahren, Computerprogrammprodukt und Computersystem zur Unterstützung mehrerer Anwendungssysteme mittels eines einzelnen Datenbank-Systems |
EP1395919B1 (en) | 2001-05-30 | 2006-02-08 | Sap Ag | Method and computer program for migrating content from source database to target database |
AU2002351911A1 (en) | 2001-11-07 | 2003-05-19 | Harald Kuck | Providing isolation through process attachable virtual machines |
US7523142B2 (en) | 2001-12-17 | 2009-04-21 | Sap Ag | Systems, methods and articles of manufacture for upgrading a database with a shadow system |
US7689709B2 (en) | 2002-12-13 | 2010-03-30 | Sap Ag | Native format tunneling |
US7788319B2 (en) | 2003-05-16 | 2010-08-31 | Sap Ag | Business process management for a message-based exchange infrastructure |
US7457828B2 (en) | 2003-08-29 | 2008-11-25 | Sap Ag | System and method for synchronizing distributed buffers when committing data to a database |
US20050052150A1 (en) | 2003-09-08 | 2005-03-10 | Bender Paul T. | Failsafe operation of active vehicle suspension |
US7302678B2 (en) | 2003-09-10 | 2007-11-27 | Sap Aktiengesellschaft | Symmetric transformation processing system |
US7421437B2 (en) | 2003-11-10 | 2008-09-02 | Sap Ag | System and method for a data dictionary cache in a distributed system |
US7191160B2 (en) | 2003-11-10 | 2007-03-13 | Sap Ag | Platform-independent data dictionary |
US7631303B2 (en) | 2004-06-07 | 2009-12-08 | Sap Aktiengesellschaft | System and method for a query language mapping architecture |
US7490102B2 (en) | 2004-06-07 | 2009-02-10 | Sap Ag | System and method for interacting with a persistence layer |
US7774319B2 (en) | 2004-08-11 | 2010-08-10 | Sap Ag | System and method for an optimistic database access |
US7571164B2 (en) | 2004-10-01 | 2009-08-04 | Sap Ag | System and method for deferred database connection configuration |
US7480681B2 (en) | 2004-12-06 | 2009-01-20 | Sap Ag | System and method for a transaction manager |
US7720992B2 (en) | 2005-02-02 | 2010-05-18 | Sap Aktiengesellschaft | Tentative update and confirm or compensate |
US7587705B2 (en) | 2005-04-29 | 2009-09-08 | Sap (Ag) | Calls and return calls using client interfaces |
US7634771B2 (en) | 2005-04-29 | 2009-12-15 | Sap (Ag) | Object generation in packages |
US7669181B2 (en) | 2005-04-29 | 2010-02-23 | Sap (Ag) | Client interfaces for packages |
US7934219B2 (en) | 2005-12-29 | 2011-04-26 | Sap Ag | Process agents for process integration |
US7693851B2 (en) | 2005-12-30 | 2010-04-06 | Sap Ag | Systems and methods for implementing a shared space in a provider-tenant environment |
US7689593B2 (en) | 2005-12-30 | 2010-03-30 | Sap Ag | Systems and methods for accessing a shared space in a provider-tenant environment |
US20070156849A1 (en) | 2005-12-30 | 2007-07-05 | Wolfgang Becker | Systems and methods for delivering software upgrades in a provider-tenant environment |
US7657575B2 (en) | 2005-12-30 | 2010-02-02 | Sap Ag | Sequencing updates to business objects |
US20070162512A1 (en) | 2006-01-10 | 2007-07-12 | Microsoft Corporation | Providing reporting database functionality using copy-on-write technology |
US7894602B2 (en) | 2006-03-31 | 2011-02-22 | Sap Ag | System and method for generating pseudo-random numbers |
US7844659B2 (en) | 2006-04-03 | 2010-11-30 | Sap Ag | Process integration persistency |
US7647251B2 (en) | 2006-04-03 | 2010-01-12 | Sap Ag | Process integration error and conflict handling |
US7734648B2 (en) | 2006-04-11 | 2010-06-08 | Sap Ag | Update manager for database system |
EP2076874A4 (en) | 2006-05-13 | 2011-03-09 | Sap Ag | DERIVED CONSISTENT SET OF INTERFACES DERIVED FROM A BUSINESS OBJECT MODEL |
US7797708B2 (en) | 2006-06-26 | 2010-09-14 | Sap Ag | Simulating actions on mockup business objects |
US20080059489A1 (en) | 2006-08-30 | 2008-03-06 | International Business Machines Corporation | Method for parallel query processing with non-dedicated, heterogeneous computers that is resilient to load bursts and node failures |
US8484167B2 (en) | 2006-08-31 | 2013-07-09 | Sap Ag | Data verification systems and methods based on messaging data |
US8315988B2 (en) | 2006-08-31 | 2012-11-20 | Sap Ag | Systems and methods for verifying a data communication process |
US7519614B2 (en) | 2006-08-31 | 2009-04-14 | Sap Ag | Data verification systems and methods using business objects |
US9262763B2 (en) | 2006-09-29 | 2016-02-16 | Sap Se | Providing attachment-based data input and output |
US7962920B2 (en) | 2006-12-22 | 2011-06-14 | Sap Ag | Providing a business logic framework |
US7739348B2 (en) | 2006-12-29 | 2010-06-15 | Sap Ag | Systems and methods for accessing a shared space in a provider-tenant environment by using middleware |
US8069184B2 (en) | 2006-12-29 | 2011-11-29 | Sap Ag | Systems and methods to implement extensibility of tenant content in a provider-tenant environment |
US20080162536A1 (en) | 2006-12-29 | 2008-07-03 | Becker Wolfgang A | Systems and methods for extending shared data structures with tenant content in a provider-tenant environment |
US7739387B2 (en) | 2007-03-08 | 2010-06-15 | Sap Ag | System and method for message packaging |
US7702696B2 (en) | 2007-04-16 | 2010-04-20 | Sap Ag | Emulation of empty database tables using database views |
US7971209B2 (en) | 2007-05-18 | 2011-06-28 | Sap Ag | Shortcut in reliable communication |
US8005779B2 (en) | 2007-09-12 | 2011-08-23 | Sap Ag | System and method for designing a workflow |
US8407297B2 (en) | 2007-10-22 | 2013-03-26 | Sap Ag | Systems and methods to receive information from a groupware client |
US8225303B2 (en) | 2007-11-30 | 2012-07-17 | Sap Ag | System and method for providing software upgrades |
US8429668B2 (en) | 2007-12-07 | 2013-04-23 | Sap Ag | Workflow task re-evaluation |
US8683436B2 (en) | 2007-12-19 | 2014-03-25 | Sap Ag | Timer patterns for process models |
US8719826B2 (en) | 2007-12-21 | 2014-05-06 | Sap Ag | Work flow model processing with weak dependencies that allows runtime insertion of additional tasks |
US8504980B1 (en) | 2008-04-14 | 2013-08-06 | Sap Ag | Constraining data changes during transaction processing by a computer system |
CN101639835A (zh) | 2008-07-30 | 2010-02-03 | 国际商业机器公司 | 多租户场景中应用数据库分区的方法和装置 |
US8108433B2 (en) | 2008-08-26 | 2012-01-31 | Sap Ag | Dynamic extension fields for business objects |
US8356056B2 (en) | 2008-08-26 | 2013-01-15 | Sap Ag | Functional extensions for business objects |
US8108434B2 (en) | 2008-08-26 | 2012-01-31 | Sap Ag | Dynamic node extensions and extension fields for business objects |
US9122669B2 (en) | 2008-08-29 | 2015-09-01 | Sap Se | Flat schema integrated document oriented templates |
US20100070336A1 (en) | 2008-09-18 | 2010-03-18 | Sap Ag | Providing Customer Relationship Management Application as Enterprise Services |
US8200634B2 (en) | 2008-10-08 | 2012-06-12 | Sap Ag | Zero downtime maintenance using a mirror approach |
US8301583B2 (en) | 2008-10-09 | 2012-10-30 | International Business Machines Corporation | Automated data conversion and route tracking in distributed databases |
US8458166B2 (en) | 2008-10-09 | 2013-06-04 | International Business Machines Corporation | Dynamic context definitions in distributed databases |
US8214382B1 (en) | 2008-11-25 | 2012-07-03 | Sprint Communications Company L.P. | Database predicate constraints on structured query language statements |
US8473942B2 (en) | 2008-11-28 | 2013-06-25 | Sap Ag | Changable deployment conditions |
US8996466B2 (en) | 2008-12-01 | 2015-03-31 | Sap Se | Extend crud to support lifecyle management and business continuity |
US8479187B2 (en) | 2008-12-02 | 2013-07-02 | Sap Ag | Adaptive switch installer |
US9361326B2 (en) | 2008-12-17 | 2016-06-07 | Sap Se | Selectable data migration |
US9229707B2 (en) | 2008-12-18 | 2016-01-05 | Sap Se | Zero downtime mechanism for software upgrade of a distributed computer system |
US20100161648A1 (en) | 2008-12-19 | 2010-06-24 | Peter Eberlein | Flexible multi-tenant support of metadata extension |
US9020881B2 (en) | 2008-12-19 | 2015-04-28 | Sap Se | Public solution model in an enterprise service architecture |
US20100299664A1 (en) | 2009-05-21 | 2010-11-25 | Salesforce.Com, Inc. | System, method and computer program product for pushing an application update between tenants of a multi-tenant on-demand database service |
US8291038B2 (en) | 2009-06-29 | 2012-10-16 | Sap Ag | Remote automation of manual tasks |
US8413150B2 (en) | 2009-07-31 | 2013-04-02 | Sap Ag | Systems and methods for data aware workflow change management |
US8572369B2 (en) | 2009-12-11 | 2013-10-29 | Sap Ag | Security for collaboration services |
US8863005B2 (en) | 2009-12-21 | 2014-10-14 | Sap Se | Propagating business object extension fields from source to target |
US9009708B2 (en) | 2010-03-31 | 2015-04-14 | Sap Se | Method and system to effectuate recovery for dynamic workflows |
US8473515B2 (en) | 2010-05-10 | 2013-06-25 | International Business Machines Corporation | Multi-tenancy in database namespace |
US8386471B2 (en) | 2010-05-27 | 2013-02-26 | Salesforce.Com, Inc. | Optimizing queries in a multi-tenant database system environment |
US8386431B2 (en) | 2010-06-14 | 2013-02-26 | Sap Ag | Method and system for determining database object associated with tenant-independent or tenant-specific data, configured to store data partition, current version of the respective convertor |
US9032406B2 (en) | 2010-07-01 | 2015-05-12 | Sap Se | Cooperative batch scheduling in multitenancy system based on estimated execution time and generating a load distribution chart |
US8694557B2 (en) | 2010-07-02 | 2014-04-08 | Sap Ag | Extensibility of metaobjects |
US8560876B2 (en) | 2010-07-06 | 2013-10-15 | Sap Ag | Clock acceleration of CPU core based on scanned result of task for parallel execution controlling key word |
US8250135B2 (en) | 2010-07-09 | 2012-08-21 | Sap Ag | Brokered cloud computing architecture |
US8489640B2 (en) | 2010-07-19 | 2013-07-16 | Sap Ag | Field extensibility using generic boxed components |
US8301610B2 (en) | 2010-07-21 | 2012-10-30 | Sap Ag | Optimizing search for insert-only databases and write-once data storage |
US8819075B2 (en) | 2010-07-26 | 2014-08-26 | Sap Ag | Facilitation of extension field usage based on reference field usage |
US9021392B2 (en) | 2010-07-26 | 2015-04-28 | Sap Se | Managing extension projects with repository based tagging |
US8880486B2 (en) | 2010-07-27 | 2014-11-04 | Sap Ag | Distributed database system utilizing an extended two-phase-commit process |
US8392573B2 (en) | 2010-07-30 | 2013-03-05 | Sap Ag | Transport of customer flexibility changes in a multi-tenant environment |
US9244697B2 (en) | 2010-07-30 | 2016-01-26 | Sap Se | Stable anchors in user interface to support life cycle extensions |
US8924384B2 (en) | 2010-08-04 | 2014-12-30 | Sap Ag | Upgrading column-based databases |
US9965507B2 (en) | 2010-08-06 | 2018-05-08 | At&T Intellectual Property I, L.P. | Securing database content |
US8380667B2 (en) | 2010-08-11 | 2013-02-19 | Sap Ag | Selectively upgrading clients in a multi-tenant computing system |
US8356010B2 (en) | 2010-08-11 | 2013-01-15 | Sap Ag | Online data migration |
US8434060B2 (en) | 2010-08-17 | 2013-04-30 | Sap Ag | Component load procedure for setting up systems |
US8868582B2 (en) | 2010-08-23 | 2014-10-21 | Sap Ag | Repository infrastructure for on demand platforms |
US8769704B2 (en) | 2010-09-10 | 2014-07-01 | Salesforce.Com, Inc. | Method and system for managing and monitoring of a multi-tenant system |
US8886596B2 (en) | 2010-10-11 | 2014-11-11 | Sap Se | Method for reorganizing or moving a database table |
US8751573B2 (en) | 2010-11-23 | 2014-06-10 | Sap Ag | Cloud-processing management with a landscape directory |
US8604973B2 (en) | 2010-11-30 | 2013-12-10 | Sap Ag | Data access and management using GPS location data |
US8555249B2 (en) | 2010-12-13 | 2013-10-08 | Sap Ag | Lifecycle stable user interface adaptations |
US8762929B2 (en) | 2010-12-16 | 2014-06-24 | Sap Ag | System and method for exclusion of inconsistent objects from lifecycle management processes |
US8375130B2 (en) | 2010-12-16 | 2013-02-12 | Sap Ag | Shared resource discovery, configuration, and consumption for networked solutions |
US8972934B2 (en) | 2010-12-20 | 2015-03-03 | Sap Ag | Support for temporally asynchronous interface extensions |
US9508048B2 (en) | 2010-12-23 | 2016-11-29 | Sap Se | System and method for integrated real time reporting and analytics across networked applications |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
US20120173488A1 (en) | 2010-12-29 | 2012-07-05 | Lars Spielberg | Tenant-separated data storage for lifecycle management in a multi-tenancy environment |
US8863097B2 (en) | 2010-12-29 | 2014-10-14 | Sap Ag | Providing code list extensibility |
US9460176B2 (en) | 2010-12-29 | 2016-10-04 | Sap Se | In-memory database for multi-tenancy |
US9436515B2 (en) | 2010-12-29 | 2016-09-06 | Sap Se | Tenant virtualization controller for exporting tenant without shifting location of tenant data in a multi-tenancy environment |
US8706772B2 (en) | 2010-12-30 | 2014-04-22 | Sap Ag | Strict tenant isolation in multi-tenant enabled systems |
US8875122B2 (en) | 2010-12-30 | 2014-10-28 | Sap Se | Tenant move upgrade |
US9009105B2 (en) | 2010-12-30 | 2015-04-14 | Sap Se | Application exits for consistent tenant lifecycle management procedures |
US8818940B2 (en) | 2011-03-29 | 2014-08-26 | Salesforce.Com, Inc. | Systems and methods for performing record actions in a multi-tenant database and application system |
US8467817B2 (en) | 2011-06-16 | 2013-06-18 | Sap Ag | Generic business notifications for mobile devices |
US10324946B2 (en) | 2011-06-23 | 2019-06-18 | Salesforce.Com Inc. | Methods and systems for caching data shared between organizations in a multi-tenant database system |
US8595267B2 (en) | 2011-06-27 | 2013-11-26 | Amazon Technologies, Inc. | System and method for implementing a scalable data storage service |
US8612927B2 (en) | 2011-07-05 | 2013-12-17 | Sap Ag | Bulk access to metadata in a service-oriented business framework |
US8566784B2 (en) | 2011-09-22 | 2013-10-22 | Sap Ag | Business process change controller |
US9137130B2 (en) | 2011-09-22 | 2015-09-15 | Sap Se | Dynamic network load forecasting |
US8892667B2 (en) | 2011-09-29 | 2014-11-18 | Sap Se | Systems and methods for sending and receiving communications |
US9542432B2 (en) | 2011-09-30 | 2017-01-10 | Oracle International Corporation | Systems and methods for multitenancy data |
US8805986B2 (en) | 2011-10-31 | 2014-08-12 | Sap Ag | Application scope adjustment based on resource consumption |
US8645483B2 (en) | 2011-11-15 | 2014-02-04 | Sap Ag | Groupware-integrated business document management |
US9256840B2 (en) | 2011-12-01 | 2016-02-09 | Sap Se | Establishing business networks using a shared platform |
US9069984B2 (en) | 2011-12-21 | 2015-06-30 | Sap Se | On-demand authorization management |
US8930413B2 (en) | 2012-01-03 | 2015-01-06 | International Business Machines Corporation | Dynamic structure for a multi-tenant database |
US8762408B2 (en) | 2012-03-07 | 2014-06-24 | Sap Ag | Optimizing software applications |
US9244951B2 (en) | 2012-03-08 | 2016-01-26 | International Business Machines Corporation | Managing tenant-specific data sets in a multi-tenant environment |
US8812554B1 (en) | 2012-03-22 | 2014-08-19 | Projectx, International Ltd. | Method and system for storing shared data records in relational database |
US9307006B2 (en) | 2012-04-11 | 2016-04-05 | Salesforce.Com, Inc. | System and method for synchronizing data objects in a cloud based social networking environment |
US20130282761A1 (en) | 2012-04-18 | 2013-10-24 | Salesforce.Com, Inc. | System and method for entity shape abstraction in an on demand environment |
US11373734B2 (en) * | 2012-05-18 | 2022-06-28 | Georgetown University | Methods and systems for populating and searching a drug informatics database |
US8612406B1 (en) | 2012-05-22 | 2013-12-17 | Sap Ag | Sharing business data across networked applications |
US9275120B2 (en) | 2012-05-30 | 2016-03-01 | Sap Se | Easy query |
US8904402B2 (en) | 2012-05-30 | 2014-12-02 | Red Hat, Inc. | Controlling capacity in a multi-tenant platform-as-a-service environment in a cloud computing system |
US8850432B2 (en) | 2012-05-30 | 2014-09-30 | Red Hat, Inc. | Controlling utilization in a multi-tenant platform-as-a-service (PaaS) environment in a cloud computing system |
US20130325672A1 (en) | 2012-05-31 | 2013-12-05 | Sap Ag | Mobile forecasting of sales using customer stock levels in a supplier business system |
US9116906B2 (en) | 2012-06-12 | 2015-08-25 | Sap Se | Centralized read access logging |
US9183540B2 (en) | 2012-07-03 | 2015-11-10 | Sap Se | Mobile device analytics engine |
US8856727B2 (en) | 2012-07-16 | 2014-10-07 | Sap Se | Generation framework for mapping of object models in a development environment |
US9182994B2 (en) | 2012-07-18 | 2015-11-10 | Sap Se | Layering of business object models via extension techniques |
CN103577457B (zh) | 2012-07-31 | 2017-09-08 | 国际商业机器公司 | 用于对多租户数据库进行操控的方法和系统 |
US20140047319A1 (en) | 2012-08-13 | 2014-02-13 | Sap Ag | Context injection and extraction in xml documents based on common sparse templates |
US8949789B2 (en) | 2012-08-13 | 2015-02-03 | Sap Se | Adaptable business objects |
US9038021B2 (en) | 2012-08-15 | 2015-05-19 | Sap Ag | Naming algorithm for extension fields in de-normalized views |
US8978035B2 (en) | 2012-09-06 | 2015-03-10 | Red Hat, Inc. | Scaling of application resources in a multi-tenant platform-as-a-service environment in a cloud computing system |
US8762731B2 (en) | 2012-09-14 | 2014-06-24 | Sap Ag | Multi-system security integration |
US8938645B2 (en) | 2012-09-19 | 2015-01-20 | Sap Se | Invalidation of metadata buffers |
US9720994B2 (en) | 2012-10-04 | 2017-08-01 | Sap Se | Replicated database structural change management |
US9075633B2 (en) | 2012-10-12 | 2015-07-07 | Sap Se | Configuration of life cycle management for configuration files for an application |
US9015212B2 (en) | 2012-10-16 | 2015-04-21 | Rackspace Us, Inc. | System and method for exposing cloud stored data to a content delivery network |
US9026857B2 (en) | 2012-10-19 | 2015-05-05 | Sap Se | Method and system for postponed error code checks |
US8793230B2 (en) | 2012-10-23 | 2014-07-29 | Sap Ag | Single-database multiple-tenant software system upgrade |
US8751437B2 (en) | 2012-11-01 | 2014-06-10 | Sap Ag | Single persistence implementation of business objects |
US9077717B2 (en) | 2012-11-30 | 2015-07-07 | Sap Se | Propagation and adoption of extensions across applications in networked solutions |
US20140164963A1 (en) | 2012-12-11 | 2014-06-12 | Sap Ag | User configurable subdivision of user interface elements and full-screen access to subdivided elements |
US9417917B1 (en) | 2012-12-14 | 2016-08-16 | Amazon Technologies, Inc. | Equitable resource allocation for storage object deletion |
US9069832B2 (en) | 2012-12-21 | 2015-06-30 | Sap Ag | Approach for modularized sychronization and memory management |
US9590872B1 (en) | 2013-03-14 | 2017-03-07 | Ca, Inc. | Automated cloud IT services delivery solution model |
US9182979B2 (en) | 2013-04-29 | 2015-11-10 | Sap Se | Social coding extensions |
US11050820B2 (en) | 2013-04-29 | 2021-06-29 | Sap Se | Cloud sharing system |
US9372880B2 (en) | 2013-04-29 | 2016-06-21 | International Business Machines Corporation | Reclamation of empty pages in database tables |
CN104216725B (zh) | 2013-06-04 | 2019-04-19 | Sap欧洲公司 | 用于软件解决方案托管的存储库层策略调整 |
US9031910B2 (en) | 2013-06-24 | 2015-05-12 | Sap Se | System and method for maintaining a cluster setup |
US9189520B2 (en) | 2013-06-24 | 2015-11-17 | Sap Se | Methods and systems for one dimensional heterogeneous histograms |
US9721116B2 (en) | 2013-06-24 | 2017-08-01 | Sap Se | Test sandbox in production systems during productive use |
US9189226B2 (en) | 2013-06-25 | 2015-11-17 | Sap Se | Software logistics protocols |
US9026502B2 (en) | 2013-06-25 | 2015-05-05 | Sap Se | Feedback optimized checks for database migration |
US10291704B2 (en) | 2013-06-26 | 2019-05-14 | Sap Se | Networked solutions integration using a cloud business object broker |
US9659050B2 (en) | 2013-08-06 | 2017-05-23 | Sybase, Inc. | Delta store giving row-level versioning semantics to a non-row-level versioning underlying store |
US9575819B2 (en) | 2013-09-06 | 2017-02-21 | Sap Se | Local buffers for event handlers |
US9442977B2 (en) | 2013-09-06 | 2016-09-13 | Sap Se | Database language extended to accommodate entity-relationship models |
US9619552B2 (en) | 2013-09-06 | 2017-04-11 | Sap Se | Core data services extensibility for entity-relationship models |
US9430523B2 (en) | 2013-09-06 | 2016-08-30 | Sap Se | Entity-relationship model extensions using annotations |
US9176801B2 (en) | 2013-09-06 | 2015-11-03 | Sap Se | Advanced data models containing declarative and programmatic constraints |
US9126265B2 (en) | 2013-09-06 | 2015-09-08 | North American Refractories Co. | Refractory component for lining a metallurgical vessel |
US9361407B2 (en) | 2013-09-06 | 2016-06-07 | Sap Se | SQL extended with transient fields for calculation expressions in enhanced data models |
US9639572B2 (en) | 2013-09-06 | 2017-05-02 | Sap Se | SQL enhancements simplifying database querying |
US9354948B2 (en) | 2013-09-06 | 2016-05-31 | Sap Se | Data models containing host language embedded constraints |
US9734230B2 (en) | 2013-09-12 | 2017-08-15 | Sap Se | Cross system analytics for in memory data warehouse |
US20150095283A1 (en) | 2013-09-27 | 2015-04-02 | Microsoft Corporation | Master schema shared across multiple tenants with dynamic update |
US9336227B2 (en) | 2013-10-07 | 2016-05-10 | Sap Se | Selective synchronization in a hierarchical folder structure |
US9223985B2 (en) | 2013-10-09 | 2015-12-29 | Sap Se | Risk assessment of changing computer system within a landscape |
US9547689B2 (en) * | 2013-10-24 | 2017-01-17 | Salesforce.Com, Inc. | Security descriptors for record access queries |
US9378233B2 (en) | 2013-11-26 | 2016-06-28 | Sap Se | For all entries processing |
US9507810B2 (en) | 2013-12-10 | 2016-11-29 | Sap Se | Updating database schemas in a zero-downtime environment |
US9274757B2 (en) | 2013-12-19 | 2016-03-01 | Sap Se | Customer tailored release master plan generation for hybrid networked solutions |
US10061788B2 (en) | 2013-12-19 | 2018-08-28 | Sap Se | Transformation of document flow to contributors network |
CN104866513B (zh) | 2014-02-26 | 2018-09-11 | 国际商业机器公司 | 用于跨租户数据访问的系统和方法 |
US9471353B1 (en) | 2014-03-21 | 2016-10-18 | Amazon Technologies, Inc. | Isolating tenants executing in multi-tenant software containers |
CN106165004B (zh) | 2014-04-08 | 2019-01-18 | 夏普株式会社 | 显示装置 |
US10061808B2 (en) | 2014-06-03 | 2018-08-28 | Sap Se | Cached views |
US9846567B2 (en) * | 2014-06-16 | 2017-12-19 | International Business Machines Corporation | Flash optimized columnar data layout and data access algorithms for big data query engines |
US10382537B2 (en) | 2014-09-25 | 2019-08-13 | Oracle International Corporation | System and method for use of a global runtime in a multitenant application server environment |
US9641529B2 (en) | 2014-11-10 | 2017-05-02 | Coastal Federal Credit Union | Methods, systems and computer program products for an application execution container for managing secondary application protocols |
US10599423B2 (en) | 2014-11-20 | 2020-03-24 | Red Hat, Inc. | Source code management for a multi-tenant platform-as-a-service (PaaS) system |
US9513811B2 (en) | 2014-11-25 | 2016-12-06 | Sap Se | Materializing data from an in-memory array to an on-disk page structure |
US20160224594A1 (en) | 2015-02-03 | 2016-08-04 | Simba Technologies Inc. | Schema Definition Tool |
US9990224B2 (en) * | 2015-02-23 | 2018-06-05 | International Business Machines Corporation | Relaxing transaction serializability with statement-based data replication |
US10726371B2 (en) * | 2015-06-08 | 2020-07-28 | Sap Se | Test system using production data without disturbing production system |
US9619261B2 (en) | 2015-06-29 | 2017-04-11 | Vmware, Inc. | Method and system for anticipating demand for a computational resource by containers running above guest operating systems within a distributed, virtualized computer system |
US10346434B1 (en) | 2015-08-21 | 2019-07-09 | Amazon Technologies, Inc. | Partitioned data materialization in journal-based storage systems |
US10846411B2 (en) | 2015-09-25 | 2020-11-24 | Mongodb, Inc. | Distributed database systems and methods with encrypted storage engines |
US10248336B1 (en) | 2016-09-30 | 2019-04-02 | Tintri By Ddn, Inc. | Efficient deletion of shared snapshots |
US20180096165A1 (en) | 2016-09-30 | 2018-04-05 | Salesforce.Com, Inc. | Provisioning for multi-tenant non-relational platform objects |
US10380142B2 (en) | 2016-11-28 | 2019-08-13 | Sap Se | Proxy views for extended monitoring of database systems |
US10452682B2 (en) | 2017-01-05 | 2019-10-22 | International Business Machines Corporation | Accelerator based data integration |
US20190042660A1 (en) * | 2017-08-01 | 2019-02-07 | salesforce.com,inc. | Mechanism for providing multiple views in a multi-tenant data structure |
US10713277B2 (en) | 2017-10-26 | 2020-07-14 | Sap Se | Patching content across shared and tenant containers in multi-tenancy database systems |
US10740318B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Key pattern management in multi-tenancy database systems |
US10621167B2 (en) | 2017-10-26 | 2020-04-14 | Sap Se | Data separation and write redirection in multi-tenancy database systems |
US10740315B2 (en) | 2017-10-26 | 2020-08-11 | Sap Se | Transitioning between system sharing types in multi-tenancy database systems |
US10657276B2 (en) | 2017-10-26 | 2020-05-19 | Sap Se | System sharing types in multi-tenancy database systems |
US10452646B2 (en) | 2017-10-26 | 2019-10-22 | Sap Se | Deploying changes in a multi-tenancy database system |
US10482080B2 (en) | 2017-10-26 | 2019-11-19 | Sap Se | Exchanging shared containers and adapting tenants in multi-tenancy database systems |
US10915551B2 (en) | 2018-06-04 | 2021-02-09 | Sap Se | Change management for shared objects in multi-tenancy systems |
-
2017
- 2017-10-26 US US15/794,381 patent/US10733168B2/en active Active
-
2018
- 2018-07-23 EP EP18184931.6A patent/EP3477488B1/en active Active
- 2018-09-11 CN CN201811055009.7A patent/CN109947773B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080162509A1 (en) * | 2006-12-29 | 2008-07-03 | Becker Wolfgang A | Methods for updating a tenant space in a mega-tenancy environment |
US20150026131A1 (en) * | 2013-07-19 | 2015-01-22 | Sap Ag | Data availability during columnar table merges |
CN105989195A (zh) * | 2015-03-23 | 2016-10-05 | 国际商业机器公司 | 用于处理数据库数据的方法和系统 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110737670A (zh) * | 2019-10-21 | 2020-01-31 | 中国民航信息网络股份有限公司 | 一种集群数据一致性的保障方法、装置及系统 |
CN111522869A (zh) * | 2020-03-26 | 2020-08-11 | 中国南方电网有限责任公司 | 适用于多租户的整定计算云数据管理方法和整定计算系统 |
US20210318998A1 (en) * | 2020-04-10 | 2021-10-14 | International Business Machines Corporation | Dynamic schema based multitenancy |
Also Published As
Publication number | Publication date |
---|---|
US20190129985A1 (en) | 2019-05-02 |
EP3477488A1 (en) | 2019-05-01 |
US10733168B2 (en) | 2020-08-04 |
CN109947773B (zh) | 2023-09-12 |
EP3477488B1 (en) | 2020-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109947773A (zh) | 在多租户数据库系统中部署对键模式的改变 | |
CN109947767B (zh) | 多重租赁数据库系统中的系统共享类型 | |
CN110147369A (zh) | 多重租赁数据库系统中的数据分离和写入重新定向 | |
CN110019215A (zh) | 多重租赁数据库系统中的键模式管理 | |
US10740315B2 (en) | Transitioning between system sharing types in multi-tenancy database systems | |
US10482080B2 (en) | Exchanging shared containers and adapting tenants in multi-tenancy database systems | |
US10713277B2 (en) | Patching content across shared and tenant containers in multi-tenancy database systems | |
EP3477500B1 (en) | Deploying changes in a multi-tenancy database system | |
US8769494B2 (en) | Globally sound and consistent configuration management for distributed datacenter components | |
CN110457385A (zh) | 多租户环境中的可实体化的数据库对象 | |
Schneller et al. | Mysql Admin Cookbook Lite: Replication and Indexing | |
CN108073635A (zh) | 一种电力信息系统数据场景加载的系统及其加载方法 | |
Paz | Microsoft Azure Cosmos DB Revealed | |
Hasegawa | Oracle Fusion Middleware Migration Guide for Oracle Application Integration Architecture, 11g Release 1 (11.1. 1.4. 0) E17361-02 | |
Miquel | Oracle Fusion Middleware Developer's Guide for Oracle Data Integrator, 11g Release 1 (11.1. 1) E12643-03 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |