掌桥专利:专业的专利平台
掌桥专利
首页

多租户数据库的隔离分层运行时环境

文献发布时间:2023-06-19 11:55:48


多租户数据库的隔离分层运行时环境

技术领域

本发明涉及为CDB内保持的可插拔数据库隔离系统资源。更具体而言,本发明涉及单节点和多节点数据库管理系统,该系统允许可插拔数据库即使在多个可插拔数据库被单个CDB保持时也可通过其自身的容器化数据库嵌套被访问。

背景技术

本节中描述的方法是可以采用的方法,但不一定是先前已经设想或采用的方法。因此,除非另有说明,否则不应仅由于将本节中所述的任何方法包括在本节中而认为本节中的任何方法有资格作为现有技术。

发明内容

数据库管理系统(DBMS)管理数据库。DBMS可以包含一个或多个数据库服务器。数据库包括数据库数据和数据库字典,它们被存储在诸如硬盘集合之类的持久性存储器机制上。数据库数据可以被存储在一个或多个数据容器中。每个容器包含记录。每个记录中的数据被组织到一个或多个字段中。在关系型DBMS中,数据容器被称为表,记录被称为行,并且字段被称为列。在面向对象的数据库中,数据容器被称为对象类,记录被称为对象,并且字段被称为属性。其它数据库体系架构可能使用其它术语。

用户通过向数据库服务器提交使数据库服务器对存储在数据库中的数据执行操作的命令来与DBMS的数据库服务器进行交互。用户可以是在与数据库服务器交互的客户端计算机上运行的一个或多个应用。多个用户在本文中也可以被统称为用户。

数据库命令可以是符合数据库语言的数据库语句的形式。用于表达数据库命令的数据库语言是结构化查询语言(SQL)。SQL有许多不同的版本,一些版本是标准版本,一些是专有版本,并且有多种扩展。数据定义语言(“DDL”)命令被发出到数据库服务器以创建或配置数据库对象,诸如表、视图或复杂数据类型。SQL/XML是在对象关系数据库中操纵XML数据时使用的SQL的常见扩展。

客户端可以通过建立数据库会话来向DBMS发出一系列请求,诸如用于执行查询的请求。数据库会话包括为客户端建立的到数据库服务器的特定连接,客户端可以通过该连接发出一系列请求。数据库会话进程在数据库会话中执行,并处理由客户端通过数据库会话发出的请求。数据库会话可以为数据库会话客户端发出的查询生成执行计划,并编组从属进程以执行该执行计划。

数据库服务器可以维护关于数据库会话的会话状态数据。会话状态数据反映了会话的当前状态,并且可以包含为其建立会话的用户的身份、由用户使用的服务、对象类型的实例、语言和字符集数据、关于会话的资源使用的统计信息、由会话中执行软件的进程生成的临时变量值、游标的存储、变量和其它信息。

数据库服务器包括多个数据库进程。数据库进程在数据库服务器的控制下运行(即,可以由数据库服务器创建或终止),并执行各种数据库服务器功能。数据库进程包括在为客户端建立的数据库会话中运行的进程。

数据库进程是执行单元。数据库进程可以是操作系统进程或操作系统线程或用户定义的执行上下文,诸如用户线程或纤程(fiber)。数据库进程还可以包括代表整个数据库服务器提供服务和/或执行功能的“数据库服务器系统”进程。这样的数据库服务器系统进程包括侦听器、垃圾收集器、日志写入器和恢复进程。

多节点数据库管理系统由互连的节点组成,每个互连的节点运行共享对同一数据库的访问的数据库服务器。通常,节点经由网络互连,并在不同程度上共享对共享存储的访问,例如,对盘驱动器集合和存储在其上的数据块的共享访问。多节点数据库系统中的节点可以采用经由网络互连的一组计算机(例如,工作站、个人计算机)的形式。替代地,节点可以是网格的节点,其由与机架上的其它服务器刀片互连的服务器刀片形式的节点组成。

多节点数据库系统中的每个节点都托管数据库服务器。服务器(诸如,数据库服务器)是集成软件组件和计算资源(诸如,存储器、节点以及节点上用于在处理器上执行集成软件组件的进程)的分配的组合,软件和计算资源的组合专用于代表一个或多个客户端执行特定功能。

来自多节点数据库系统中的多个节点的资源可以被分配给运行特定数据库服务器的软件。软件和来自节点的资源分配的每种组合都是在本文中被称为“服务器实例”或“实例”的服务器。数据库服务器可以包括多个数据库实例,它们中的一些或全部在包括单独的服务器刀片的单独的计算机上运行。

数据库字典可以包括存储数据库元数据的多个数据结构。数据库字典可以例如包括多个文件和表。数据结构的各部分可以被高速缓存在数据库服务器的主存储器中。

当数据库对象被称为由数据库字典定义时,该数据库字典包含定义数据库对象的特性的元数据。例如,定义数据库表的数据库字典中的元数据可以指定列名称和列的数据类型,以及存储表的数据的一个或多个文件或其部分。数据库字典中定义过程的元数据可以指定过程的名称、过程的参数以及返回数据类型和参数的数据类型,并且可以包括源代码及其编译版本。

数据库对象可以由数据库字典定义,但是数据库字典本身中的元数据可以仅部分地指定数据库对象的特性。其它特性可以由可能不被视为数据库字典的一部分的数据结构定义。例如,JAVA类中实现的用户定义的函数可以部分地由数据库字典通过指定用户定义函数的名称以及通过指定对包含Java类源代码的文件(即,.java文件)和类的编译版本(即,.class文件)的引用来定义。

多租户体系架构

容器DBMS是用于数据库整合的强大机制。容器DBMS提供了高度的计算机资源共享,同时还提供了高度的隔离。容器DBMS基于“容器”。容器是多租户容器数据库(CDB)中的模式、对象和相关结构的集合,其在逻辑上对应用看起来是单独的数据库。在CDB内,每个容器具有唯一的ID和名称。根数据库和每个可插拔数据库(PDB)被视为容器。容器DBMS可以包含许多PDB。PDB隔离数据和操作,使得从用户或应用的角度来看,每个PDB看起来都像是传统的非CDB。每个PDB由其自己的单独的数据库字典定义,从而定义PDB内的数据库对象。用户可以通过为PDB建立数据库会话来访问容器DBMS内的PDB。

容器DBMS存储管理容器DBMS内的所有PDB所需的系统元数据。在一些实施方式中,容器DBMS的根数据库存储在容器DBMS的PDB之间通用的数据,诸如针对普通用户和角色的定义、共享表、代码包等。PDB包含用户创建的模式、对象和相关结构的集合,其在逻辑上对于应用像是单独的数据库。因此,每个PDB可以潜在地用于存储与不同应用相关的数据,诸如一个PDB专用于托管人力资源应用,而另一个PDB专用于托管销售应用。但是,由于共享数据库资源仅在根数据库中被存储一次,并由PDB的数据库字典链接,因此与使用完全单独的传统数据库托管每个应用相比,避免了数据的重复。此外,由于PDB本质上凭自身是自包含的数据库,因此PDB可以轻松地在不同的CDB之间传输,以用于升级或负载平衡目的。

CDB启用计算机资源摊销(“资源摊销”)。供给和托管PDB所需的计算机资源实际上在CDB内的多个PDB之间摊销。从而减少了每个PDB所需的计算机资源。

在容器DBMS中,数据库服务器系统进程不是基于每个PDB专用的,而是为CDB内的多个PDB服务。因此,数据库服务器系统进程的开销在CDB中的多个PDB之间摊销。

容器DBMS至少在一定程度上提供隔离。为PDB建立的数据库会话可以仅限于访问或以其它方式查看由PDB专用数据库字典为PDB定义的数据库对象。

容器DBMS可以实现各种级别的隔离。虽然可以在PDB的数据库会话之间隔离数据库对象,但是可以在PDB的数据库会话之间共享各种计算资源。因此,在同一数据库服务器上托管多个PDB可以使数据库服务器或实例的计算资源在多个PDB之间共享。

使用多租户体系架构,单个操作系统实例内的服务器用于运行多个CDB和PDB。通过使用单个操作系统实例,可以共享由操作系统管理的资源,包括计算资源、文件系统和网络资源。但是,在多个租户之间共享此类资源会将漏洞暴露给恶意租户。属于一个租户的进程可能潜在地访问其它租户数据库进程、篡改租户的资源并干扰执行。本文描述了用于隔离多租户容器DBMS中的运行时环境的技术。

附图说明

在附图中:

图1图示了可以在其上实现实施例的示例计算机联网环境。

图2是描绘根据本发明的实施例的CDB的图。

图3图示了根据本发明的实施例的数据库嵌套层次结构的示例图。

图4图示了根据本发明的实施例的数据库嵌套执行模型的示例结构。

图5描绘了包括为建立可插拔数据库的数据库会话而执行的操作的过程。

图6是描绘可以在其上实现本发明的实施例的软件系统的图。

图7是描绘可以在本发明的实施例中使用的计算机系统的图。

具体实施方式

在下面的描述中,出于解释的目的,阐述了许多具体细节以便提供对本发明的透彻理解。但是,将显而易见的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,以框图形式示出了众所周知的结构和设备,以避免不必要地使本发明晦涩难懂。

为了向驻留在多租户CDB体系架构中的租户提供更高的安全性,可插拔数据库的数据库会话在“数据库嵌套”内运行。数据库嵌套是操作系统计算机资源集合,特定数据库的数据库会话对其的访问是受限的。当数据库会话内执行的数据库会话进程被数据库嵌套限制到操作系统资源集合时,该数据库会话被限于该操作系统资源集合。数据库会话进程包括被编组以执行在数据库会话中发出的查询的从属进程。

操作系统计算机资源是可以经由操作系统访问和/或由操作系统管理的计算机资源。操作系统计算机资源包括进程、存储器、网络资源、文件系统、其中的子目录,以及CPU。

根据实施例,为每个可插拔数据库建立数据库嵌套。每个数据库嵌套包含单独的计算机资源集合。可插拔数据库的数据库会话可以访问可插拔数据库的相应数据库嵌套的资源,但是不能访问另一个可插拔数据库的数据库嵌套的资源。以这种方式,可插拔数据库的租户的操作系统资源与其它可插拔数据库的其它租户的操作系统计算机资源隔离。

多个容器DBMS可以被托管在数据库服务器及其操作系统上。每个容器DBMS可以被限制到相应的单独的数据库嵌套。每个容器DBMS及其中的PDB的数据库会话都与容器DBMS的数据库嵌套隔离,并且与其它容器DBMS的数据库嵌套的计算机资源隔离。每个容器DBMS的数据库服务过程也被隔离到相应的数据库嵌套。

可以将PDB添加到容器DBMS,这可能需要为PDB创建数据库嵌套。为新的PDB创建的数据库嵌套仅限于容器DBMS的数据库嵌套的计算机资源。

分层数据库嵌套和隔离

在实施例中,容器DBMS可以包括使用本文称为“应用根”的PDB的类型的PDB的层次结构。与容器DBMS的根数据库类似,应用根存储在应用根的成员PDB之间共享的数据和元数据。应用根及其成员PDB被统称为“应用容器”。应用使用的公共数据和元数据可以被存储在应用根中,而不是单独在每个成员PDB中。本文进一步描述应用根。

应用根可以具有数据库嵌套。应用根的成员PDB也可以具有数据库嵌套,该数据库嵌套被限制为应用根的数据库嵌套的计算机资源。

容器DBMS、应用根及其成员PDB形成层次结构。容器DBMS中的数据库对象、应用根和成员PDB之间的隔离镜像这种层次结构。给定应用根内包含的给定PDB的数据库会话无法访问另一个应用根中的数据对象或另一个应用根的其它成员PDB。此外,包含在给定应用根内的给定PDB的数据库会话无法访问应用根的成员PDB中的数据对象。

为容器DBMS、应用根和成员PDB建立的数据库嵌套也形成数据库嵌套的层次结构,其镜像容器DBMS内的PDB的层次结构。数据库嵌套层次结构提供的计算机资源之间的隔离也镜像容器DBMS内PDB之间的层次结构提供的数据库对象之间的隔离层次结构。

每个PDB/嵌套操作系统配置

此外,为了进一步启用安全计算,具有单独的数据库嵌套使得可以在不使用单独的虚拟机的情况下为每个数据库嵌套具有自定义的操作系统限制和设置。例如,每个数据库嵌套可以具有其自己的系统调用白名单或黑名单,这些白名单或黑名单仅允许用于由相应数据库嵌套限制的可插拔数据库。

如前所述,本发明的实施例在容器DBMS内实现。因此,对容器DBMS的简短描述是有用的。

一般操作环境

图1图示了可以在其上实现实施例的示例计算机联网环境。虽然图1仅描绘了特定数量的每个元素,但实际环境中可能有更多(也许数百或数千个)图1中所示的每个元素。

在图1中,数据库服务器100表示一个或多个计算设备上的软件和资源的组合,该一个或多个计算设备通信地耦合到数据库(CDB 103、CDB 104)并且经由网络106彼此以及与数据库客户端107通信地耦合。数据库服务器100运行操作系统实例。下面在“软件概述”中描述操作系统实例的示例。CDB 103和CDB 104被统称为“CDB”。下面在“硬件概述”中描述可以在其上实现数据库服务器的计算设备的示例。

在实施例中,网络106表示一个或多个局域网、广域网、互联网络或服务提供商网络。在一些实施例中,网络106表示互联网。

在实施例中,数据库客户端107表示一个或多个计算设备上的软件和资源的组合,其实现一个或多个应用,该一个或多个应用向数据库服务器发送命令以检索、修改、删除或提交由CDB存储的数据。下面在“硬件概述”中描述可以在其上实现数据库服务器的计算设备的示例。

CDB

图2图示了根据实施例的用于通用容器DBMS的示例结构。为了图示清楚的示例,相对于CDB 103描述图2,但是该描述也适用于CDB 104。

CDB 103包含由数据库服务器100托管和管理的多个数据库。数据库包括可插拔数据库PDA 220和可插拔数据库PDB 230,以及根数据库210,根数据库210与可插拔数据库PDA230和可插拔数据库PDB 230相关联,如将在下面更详细说明的。在其它实施例中,CDB 103可以包含比图2中描绘的可插拔数据库的数量更多的可插拔数据库。

可插拔数据库PDA 220包括数据库字典221。用于可插拔数据库PDA 220的数据库对象的数据被存储在表空间文件226中。

可插拔数据库PDB 230包括数据库字典231。表空间文件236存储用于可插拔数据库PDB 230的数据库对象的数据。

负责CDB 103的数据库服务器100可以为根数据库210或任何成员可插拔数据库建立数据库会话。为其建立数据库会话的PDB的数据库字典确定数据库客户端107发出的命令的范围(例如,命令将在哪个(些)数据库上执行)、检查哪些权限、哪些数据库字典将用于会话,等等。为PDB建立的数据库会话在本文中可以被称为在PDB内运行。为根数据库建立的数据库会话在本文中被称为与CDB或CDB的容器DBMS一起运行。

根数据库

根数据库210是数据库服务器100用于全局管理CDB 103的数据库。根数据库210促进的重要功能是在CDB 103内定义可插拔数据库。类似于可插拔数据库,根数据库210包括数据库字典211。根数据库的数据库字典在本文中可以被称为根数据库字典。数据库字典211包含定义管理CDB 103所需的CDB 103的各个方面的元数据以及包含在其中的可插拔数据库。由数据库字典211定义的数据库对象的数据被存储在表空间文件216中。

数据库字典211在CDB 103方面或可插拔数据库的特性内定义可插拔数据库。属性可插拔DB是可插拔数据库的名称或标签。

数据库字典211中的记录定义可插拔数据库,以及每个可插拔数据库指派给哪个数据库嵌套。例如,数据库字典211中的一个记录定义可插拔数据库PDA 220及其数据库嵌套NEST A。数据库字典211中的另一个记录定义可插拔数据库PDB 230及其数据库嵌套NESTB。可插拔数据库和对应的数据库嵌套指派也可以被存储在字典存储文件中,诸如PDA.DBIDC和PDB.DBIDC。数据库字典221、231还可以定义每个可插拔数据库指派给哪个数据库嵌套。在实施例中,可以将两个或更多个可插拔数据库指派给单个数据库嵌套。

可插拔数据库会话

用户可以通过提交识别PDB的连接请求来访问CDB 103中的PDB。响应于接收到请求,数据库服务器100为PDB建立数据库会话。为PDB建立数据库会话需要将PDB的数据库字典建立为数据库会话的数据库字典。一旦将PDB字典建立为PDB的数据库字典,就将隔离对PDB的数据库对象以及对根数据库的公共数据库对象的访问,如将进一步详细描述的。将PDB字典建立为数据库会话的数据库字典在本文中可以被称为将数据库字典附加到数据库会话。

关于CDB的一个或多个PDB中的PDB对象,执行发出到附加到PDB字典的数据库会话的数据库命令只能访问由PDB字典定义的PDB对象。因此,数据库会话的用户的访问可能被限制为访问由附加的PDB字典定义的PDB对象,从而将对PDB对象的数据库访问与相应PDB中的访问隔离。这种隔离不仅适用于最终用户,而且还适用于PDB的管理员。

例如,响应于对访问可插拔数据库PDA 220的连接请求,数据库字典221被附加到数据库会话。在数据库会话中发出的数据库命令是针对数据库字典221执行的。通过数据库会话中发出的数据操纵语言(DML)命令对可插拔数据库对象的访问被隔离到由数据库字典221定义的可插拔数据库对象。通过与可插拔数据库PDA或可插拔数据库B并发执行数据库会话来进行隔离是以相同的方式实现的。

图3图示了CDB的示例图,该CDB包括应用根,从而形成PDB的层次结构。数据库层次结构302描绘了这样的层次结构。如图所示,CDB 304包含两个直接子级—应用根306和应用根308。应用根306和应用根308中的每一个包含两个直接子级—分别为应用PDB 310、应用PDB 213和应用PDB 314、应用PDB 316。如关于图2所讨论的,每个根数据库,诸如应用根306和应用根308,包括数据库字典,该数据库字典定义可插拔数据库以及每个可插拔数据库指派给哪个数据库嵌套。

数据库嵌套的层次结构

数据库层次结构302的数据库嵌套层次结构反映了数据库层次结构的分层结构。父CDB嵌套322包含分别对应于应用根306和应用根308的应用根嵌套324和应用根嵌套326。父应用根嵌套324和应用根嵌套326中的每一个包含两个直接子级—分别为应用PDB嵌套328、应用PDB嵌套330和应用PDB嵌套332、应用PDB嵌套334。应用PDB嵌套328、应用PDB嵌套330、应用PDB嵌套332、应用PDB嵌套334中的每一个都是分别对应于数据库层次结构图中的应用PDB 310、应用PDB 312、应用PDB 314和应用PDB 316的数据库嵌套。

父数据库嵌套包含任何子数据库嵌套和后代数据库嵌套的资源。CDB嵌套322的计算机资源包含应用根嵌套324和应用根嵌套326的计算机资源。应用根嵌套324包含应用PDB嵌套328和应用PDB嵌套330的计算机资源。

可以为每个数据库嵌套指派其自己的进程、文件、存储器和系统调用限制集合。可以使用下面描述的操作系统名称空间来实现这种系统资源隔离。在数据库嵌套中运行的PDB的数据库会话无法访问另一个PDB的另一个数据库嵌套中的进程和资源。

此外,数据库嵌套采用分层特权结构。一般而言,后代数据库嵌套与其它后代数据库嵌套完全隔离,而祖先数据库嵌套允许对从祖先数据库嵌套继承的任何数据库嵌套有特权。例如,CDB 304的容器DBMS的数据库服务器进程和数据库会话在CDB嵌套322内运行。因为CDB嵌套322是应用根嵌套324、应用根嵌套326、应用pdb嵌套328、应用pdb嵌套330、应用pdb嵌套332和应用pdb嵌套334的祖先,因此容器DBMS的数据库服务器进程和数据库会话具有访问指派给后代数据库嵌套(诸如应用根嵌套324、应用根嵌套326、应用pdb嵌套328、应用pdb嵌套330、应用pdb嵌套332和应用pdb嵌套334)的所有资源的特权。

此外,被指派嵌套应用pdb嵌套324的应用根306的数据库会话具有访问应用PDB嵌套328和应用pdb嵌套330的计算机资源的特权,但是没有访问应用根嵌套326及其后代的应用PDB嵌套332和应用PDB嵌套334的计算机资源的特权。被指派嵌套应用pdb嵌套328的应用PDB 310的数据库会话不具有访问数据库嵌套层次结构320的任何其它数据库嵌套的计算机资源的特权。

名称空间

根据实施例,通过使用操作系统名称空间来实现数据库嵌套。诸如Linux之类的操作系统支持诸如名称空间之类的隔离特征。名称空间是许多操作系统(诸如,Linux)支持的特征,用于将多个进程的运行与同一计算机系统内运行的其它进程隔离开。操作系统内核(诸如,Linux)提供了以编程方式创建不同类型的“名称空间”(诸如,“进程标识”名称空间和“网络”名称空间)的能力。例如,在创建“进程标识”或“PID”名称空间时,属于名称空间的进程只能看到已在同一名称空间中创建的其它进程。其它操作系统也支持隔离特征,诸如名称空间。包括网络隔离特征(诸如名称空间)的操作系统的附加非限制性示例是Solaris区域和Windows服务器容器。

类似地,在创建“网络”名称空间时,属于该名称空间的进程只能看到为该名称空间定义的网络套接字、绑定的端口、接口、路由表等。实际上创建名称空间会创建网络堆栈。网络名称空间内的进程限于为该名称空间定义的其自己的一组网络套接字、绑定的端口、接口、路由表等。

网络名称空间将网络的使用—设备、地址、端口、路由、防火墙规则等—划分为单独的逻辑盒,实质上是在单个运行的内核实例内虚拟化网络。每个网络名称空间都有其自己的网络设备、IP地址、TCP/UDP端口和路由表。每个网络名称空间可以被配置有唯一的路由表和/或防火墙规则。如本文所述,每个网络名称空间提供网络堆栈的副本。

网络名称空间之外的其它进程无法访问这些网络资源,甚至不知道这些网络资源存在。此外,被指派名称空间的进程无法监视或查看与另一个网络名称空间相关的流量。

诸如Linux之类的操作系统提供了几种其它类型的名称空间。例如,安装名称空间将进程与安装的文件系统隔离开。安装名称空间是进程可以访问的安装文件系统集合。该集合可能不同于在主机上本地运行的进程或在另一个名称空间中运行的进程,后者可能具有其自己的已安装文件系统集合。安装名称空间内的进程可以更改其安装文件系统集合,而不会影响在名称空间外部运行的进程。

UTS名称空间允许单个系统对于不同的进程看起来具有不同的主机名和域名。UTS名称空间隔离了主机名和网络信息服务(NIS)域名。可以更改名称空间中的主机名,而不会影响主机本身的主机名。UTS名称空间可以用于隔离主机名。

IPC名称空间隔离某些进程间通信资源,诸如便携式操作系统接口(POSIX)消息队列和系统V进程间通信(IPC)机制。IPC名称空间将进程与系统V样式的进程间通信隔离开。这可以防止不同IPC名称空间中的进程使用例如共享存储器(SHM)系列功能在两个进程之间建立一定范围的共享存储器。替代地,每个进程可以对共享存储器区域使用相同的标识符,并产生两个这样的独特区域。

PID名称空间隔离了进程ID号空间,这意味着不同PID名称空间中的进程可以具有相同的PID。使用PID名称空间,单个进程可以具有多个与其相关联的PID,它所属的每个名称空间一个PID。PID名称空间是嵌套的,这意味着在创建新进程时,它将为从其当前名称空间直到初始PID名称空间的每个名称空间具有一个PID。因此,初始PID名称空间能够看到所有进程,尽管将看到进程具有与其它名称空间不同的PID。PID名称空间提供诸如挂起/恢复容器中的进程集合以及将容器迁移到新主机,同时容器内部的进程维持相同的PID的功能。

用户名称空间在主机和容器之间隔离用户ID和组ID。用户名称空间允许进程在名称空间内具有根特权,而无需授予其对名称空间外部进程的访问权限。此外,用户名称空间在多个进程集合之间提供特权隔离和用户标识分离。与PID名称空间类似,用户名称空间是嵌套的,并且每个新的用户名称空间都被视为创建它的用户名称空间的子级。用户名称空间包含映射表,该映射表将用户ID从容器的视点转换成系统的视点。这允许例如根用户在容器中具有用户ID 0,但实际上被系统视为用户ID 1,800,000,以进行所有权检查。

数据库嵌套资源

数据库嵌套可以提供文件系统隔离,诸如限制与PDB相关联的进程可以访问的(一个或多个)文件系统。名称空间可以用作实现这种隔离的机制。例如,可以为数据库嵌套指派其自己的安装名称空间,该名称空间限制了在数据库嵌套中运行的进程可以访问的已安装文件系统。

数据库嵌套可以提供进程间通信隔离,诸如隔离资源,诸如POSIX消息队列和进程之间的系统V IPC机制。

数据库嵌套可以提供存储器隔离,诸如限制在数据库嵌套中运行的进程可以访问哪些存储器段。

数据库嵌套也可以提供用于执行系统调用的系统限制。例如,数据库嵌套可以阻止执行某些系统调用,并且也可以仅允许执行某些系统调用。

图4图示了根据实施例的数据库嵌套执行模型的示例结构。为了图示清楚的示例,关于CDB 404描述图4。

CDB嵌套402包含由数据库服务器100托管和管理的多个数据库。数据库包括CDB404、可插拔数据库PDA 406和可插拔数据库PDB 408。在其它实施例中,CDB 103可以包含比图4中描绘的可插拔数据库的数量更多的可插拔数据库。但是,由于固有的硬件限制,一些实现可能会设置CDB 103可以支持的可插拔数据库的数量上限。

每个数据库CDB 404、PDA 406、PDB 408被一个或多个数据库嵌套包含。例如,CDB404由CDB嵌套402包含,可插拔数据库PDA 406由PDA嵌套410包含,并且可插拔数据库PDB408由PDB嵌套412包含。此外,CDB嵌套402包含可插拔数据库PDA 406和可插拔数据库PDB408,作为关于图3所讨论的数据库嵌套层次结构的一部分。

在每个数据库嵌套CDB嵌套402、PDA嵌套410、PDB嵌套412中,使用各种名称空间限制系统资源并将其与操作系统414隔离开。例如,CDB嵌套402将数据库进程416、418、420限于由CDB 404独占访问。PDA嵌套410将数据库进程422、424、426、PDB文件系统428、系统限制430、CPU 432、存储器434和网络436限于由可插拔数据库PDA 406以及与父嵌套CDB嵌套402(诸如CDB 404)相关联的任何数据库独占访问。类似地,PDB嵌套将数据库进程440、442、444、PDB文件系统446、系统限制448、CPU 450、存储器452和网络454限于由可插拔数据库PDB 408和与父嵌套CDB嵌套402(诸如CDB 404)相关联的任何数据库独占访问。

如上面关于图3所讨论的,分层特权结构限制了在可插拔数据库PDA 406和可插拔数据库PDB 408内运行的数据库进程访问未隔离到其自己相应指派的嵌套的资源。此外,因为CDB嵌套402是PDA嵌套410和PDB嵌套412的祖先嵌套,因此可插拔数据库PDA 406和可插拔数据库PDB 408内运行的数据库进程被限制访问隔离到CDB嵌套402的资源。但是,在CDB404内运行的数据库进程不被限制访问由PDA嵌套410和PDB嵌套412隔离的资源,因为CDB嵌套402是PDA嵌套410和PDB嵌套412两者的分层祖先,如上面关于图3所讨论的。

建立数据库嵌套

当创建CDB或应用容器的成员PDB时,创建PDB的数据库嵌套。可以通过向容器DBMS发出DDL命令来创建成员PDB。创建的数据库嵌套将访问限于父级数据库嵌套的资源的适当子集。

根据实施例,与数据库嵌套特性相关联名称空间、属性和特性被捕获为持久存储在数据库嵌套基础设施内的简档。当建立数据库嵌套时,可以应用默认简档。数据库管理员可以通过数据库参数和配置文件来定制该简档。

数据库服务器可以存储将CDB和每个应用根以及每个成员PDB映射到相应的运行时简档的映射。在实施例中,数据库字典可以存储每个运行时简档和映射。此外,特定CDB、应用根目录或PDB的运行时简档的名称被存储在CDB、应用根或PDB的相应数据库字典中。

连接到数据库嵌套

使用如在“名称空间”部分中描述的操作系统名称空间,系统资源可以通过一个或多个名称空间被限于数据库嵌套。数据库嵌套然后可以被指派或附加到一个或多个CDB和/或PDB。

用户可以通过在托管可插拔数据库的DBMS上为可插拔数据库建立数据库会话来访问可插拔数据库。在描述如何为可插拔数据库建立数据库会话之前,对数据库会话进行进一步描述是有用的。

数据库会话包括为客户端建立的到数据库服务器(诸如数据库实例)的特定连接,客户端通过该连接发出一系列请求(例如,用于执行数据库语句的请求)。数据库服务器可以维护关于会话的会话状态数据。会话状态数据反映了数据库会话的当前状态,并且可以包含为其建立数据库会话的用户的身份、由用户使用的服务、对象类型的实例、语言和字符集数据、关于会话的资源使用的统计信息、由数据库会话中执行软件的进程生成的临时变量值,以及游标的存储和变量及其它信息。如果数据库字典已附加到数据库会话,那么数据库会话的会话状态包括访问附加数据库字典所需的一个或多个引用或链接。

根据实施例,连接管理器用于路由客户端连接请求并协助建立到PDB的数据库会话,但是不为特定的CBD或PDB建立数据库会话。用户可以为CDB内特定PDB提交连接请求。连接管理器接收到该请求,然后将其路由到PDB中的侦听器进程。

CDBMS为每个PDB产生“PDB侦听器”,使得操作系统将PDB侦听器限于此类PDB的数据库嵌套。操作系统将由PDB侦听器产生的任何进程限于此类PDB的数据库嵌套。当PDB侦听器为新的数据库会话产生新的数据库进程时,该数据库进程只能访问由PDB的数据库嵌套隔离的资源。

图5描绘了包括特别为建立可插拔数据库的数据库会话而执行的操作的过程。参考图5,在502处,托管CDB的数据库服务器接收连接请求,并与该连接请求一起接收包括数据库标识符的参数值。数据库标识符可以是可用于识别请求对其访问的数据库的任何信息。在实施例中,数据库标识符可以是可插拔数据库的名称。在另一个实施例中,数据库标识符可以是与可插拔数据库相关联的数据库服务。

在504处,确定数据库连接请求是针对可插拔数据库的数据库会话的请求。例如,可以通过确定数据库标识符识别可插拔数据库PDA来做出该确定。

在506处,响应于确定数据库连接请求是对可插拔数据库的请求,建立用于可插拔数据库的数据库会话。建立用于可插拔数据库的数据库会话包括附加可插拔数据库的数据库嵌套。在当前示例中,扫描数据库字典221,即用于可插拔数据库PDA 220的数据库字典,以确定哪个数据库嵌套被映射到可插拔数据库PDA 220。映射到可插拔数据库PDA 220的数据库嵌套被建立为数据库会话的数据库嵌套。

为用户建立数据库会话需要比图3中具体描绘的更多的操作。这样的操作包括但不限于发出连接请求的用户的认证和会话状态的初始化。

软件概述

图6是可以用于控制图7的计算系统700的操作的基本软件系统600的框图。软件系统600及其组件,包括它们的连接、关系和功能,仅仅是示例性的,并且不意味着限制(一个或多个)示例实施例的实现。适于实现(一个或多个)示例实施例的其它软件系统可以具有不同的组件,包括具有不同的连接、关系和功能的组件。

提供软件系统600用于指导计算系统700的操作。可以存储在系统存储器(RAM)706和固定存储装置(例如,硬盘或闪存)710上的软件系统600包括内核或操作系统(OS)610。

OS 610管理计算机操作的低级方面,包括管理进程的执行、存储器分配、文件输入和输出(I/O)以及设备I/O。表示为602A、602B、602C...602N的一个或多个应用可以被“加载”(例如,从固定存储装置710传送到存储器706中)以供系统600执行。意图在计算机系统700上使用的应用或其它软件也可以被存储为可下载的计算机可执行指令集,例如,用于从互联网位置(例如,Web服务器、app商店或其它在线服务)下载和安装。

软件系统600包括图形用户界面(GUI)615,用于以图形(例如,“点击”或“触摸手势”)方式接收用户命令和数据。进而,这些输入可以由系统600根据来自操作系统610和/或(一个或多个)应用602的指令来操作。GUI 615还用于显示来自OS 610和(一个或多个)应用602的操作结果,用户可以提供附加的输入或终止会话(例如,注销)。

OS 610可以直接在计算机系统700的裸硬件620(例如,(一个或多个)处理器704)上执行。可替代地,管理程序或虚拟机监视器(VMM)630可以插入在裸硬件620和OS 610之间。在这个配置中,VMM 630充当OS 610与计算机系统700的裸硬件620之间的软件“缓冲”或虚拟化层。

VMM 630实例化并运行一个或多个虚拟机实例(“访客机”)。每个访客机包括“访客”操作系统(诸如OS 610),以及被设计为在客户操作系统上执行的一个或多个应用(诸如(一个或多个)应用602)。VMM 630向访客操作系统呈现虚拟操作平台并管理访客操作系统的执行。

在一些情况下,VMM 630可以允许访客操作系统如同其直接在计算机系统700的裸硬件620上运行一样运行。在这些实例中,被配置为直接在裸硬件620上执行的访客操作系统的相同版本也可以在VMM 630上执行而无需修改或重新配置。换句话说,VMM 630可以在一些情况下向访客操作系统提供完全硬件和CPU虚拟化。

在其它情况下,访客操作系统可以被专门设计或配置为在VMM 630上执行以提高效率。在这些实例中,访客操作系统“意识到”它在虚拟机监视器上执行。换句话说,VMM 630可以在某些情况下向客户操作系统提供半虚拟化。

计算机系统进程包括硬件处理器时间的指派,以及存储器的指派(物理和/或虚拟)、用于存储由硬件处理器执行的指令的存储器的指派,用于存储由硬件处理器执行指令所生成的数据,和/或用于当计算机系统进程未运行时在硬件处理器时间的指派之间存储硬件处理器状态(例如,寄存器的内容)。计算机系统进程在操作系统的控制下运行,并且可以在计算机系统上执行的其它程序的控制下运行。

多个线程可以在进程中运行。每个线程还包括硬件处理时间的指派,但共享对指派给该进程的存储器的访问。当线程未运行时,存储器用于存储指派之间的处理器的内容。术语线程也可以用于指多个线程未运行时的计算机系统进程。

云计算

本文一般地使用术语“云计算”来描述计算模型,该计算模型使得能够按需访问计算资源的共享池,诸如计算机网络、服务器、软件应用和服务,并且允许以最少的管理工作或服务提供商交互来快速提供和释放资源。

云计算环境(有时称为云环境或云)可以以各种不同方式实现,以最好地适应不同要求。例如,在公共云环境中,底层计算基础设施由组织拥有,该组织使其云服务可供其它组织或公众使用。相反,私有云环境一般仅供单个组织使用或在单个组织内使用。社区云旨在由社区内的若干组织共享;而混合云包括通过数据和应用可移植性绑定在一起的两种或更多种类型的云(例如,私有、社区或公共)。

一般而言,云计算模型使得先前可能由组织自己的信息技术部门提供的那些职责中的一些替代地作为云环境内的服务层来输送,以供消费者使用(根据云的公共/私人性质,在组织内部或外部)。取决于特定实现,由每个云服务层提供或在每个云服务层内提供的组件或特征的精确定义可以有所不同,但常见示例包括:软件即服务(SaaS),其中消费者使用在云基础设施上运行的软件应用,同时SaaS提供者管理或控制底层云基础设施和应用。平台即服务(PaaS),其中消费者可以使用由PaaS的供应者支持的软件编程语言和开发工具,以开发、部署和以其它方式控制它们自己的应用,同时PaaS提供者管理或控制云环境的其它方面(即,运行时执行环境下的一切)。基础设施即服务(IaaS),其中消费者可以部署和运行任意软件应用,和/或提供进程、存储装置、网络和其它基础计算资源,同时IaaS提供者管理或控制底层物理云基础设施(即,操作系统层下面的一切)。数据库即服务(DBaaS),其中消费者使用在云基础设施上运行的数据库服务器或数据库管理系统,同时DbaaS提供者管理或控制底层云基础设施、应用和服务器,包括一个或多个数据库服务器。

为了说明可以用于实现(一个或多个)示例实施例的基本底层计算机组件而呈现的上述基本计算机硬件和软件以及云计算环境。但是,(一个或多个)示例实施例不必限于任何特定的计算环境或计算设备配置。替代地,根据本公开,(一个或多个)示例实施例可以在本领域技术人员将理解为能够支持本文呈现的(一个或多个)示例实施例的特征和功能的任何类型的系统体系架构或处理环境中实现。

硬件概述

根据一个实施例,本文描述的技术由一个或多个专用计算设备来实现。专用计算设备可以是硬连线的以执行本技术,或者可以包括被永久性地编程以执行本技术的数字电子设备,诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA),或者可以包括被编程为根据固件、存储器、其它存储装置或组合中的程序指令执行本技术的一个或多个通用硬件处理器。这种专用计算设备还可以将定制的硬连线逻辑、ASIC或FPGA与定制的编程组合来实现本技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或结合硬连线和/或程序逻辑来实现技术的任何其它设备。

例如,图7是图示可以在其上实现本发明的实施例的计算机系统700的框图。计算机系统700包括总线702或用于传送信息的其它通信机制以及与总线702耦合用于处理信息的硬件处理器704。硬件处理器704可以是例如通用微处理器。

计算机系统700还包括耦合到总线702用于存储信息和要由处理器704执行的指令的主存储器706,诸如随机存取存储器(RAM)或其它动态存储设备。主存储器706也可以用于存储在要由处理器704执行的指令的执行期间的临时变量或其它中间信息。当这种指令被存储在处理器704可访问的非暂态存储介质中时,这种指令使计算机系统700成为被定制用于执行指令中指定的操作的专用机器。

计算机系统700还包括耦合到总线702用于存储静态信息和处理器704的指令的只读存储器(ROM)708或其它静态存储设备。诸如磁盘或光盘之类的存储设备710被提供并且被耦合到总线702,以用于存储信息和指令。

计算机系统700可以经由总线702耦合到用于向计算机用户显示信息的显示器712,诸如阴极射线管(CRT)。包括字母数字键和其它键的输入设备714耦合到总线702,用于将信息和命令选择传送到处理器704。另一种类型的用户输入设备是光标控件716,诸如鼠标、轨迹球或光标方向键,用于向处理器704传送方向信息和命令选择并且用于控制显示器712上的光标移动。这种输入设备典型地具有两个轴(第一轴(例如,x)和第二轴(例如,y))上的两个自由度,以允许设备在平面中指定位置。

计算机系统700可以使用定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文描述的技术,所述定制的硬连线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑与计算机系统结合使计算机系统700成为专用机器或将计算机系统700编程为专用机器。根据一个实施例,本文的技术由计算机系统700响应于处理器704执行主存储器706中包含的一条或多条指令的一个或多个序列而执行。这些指令可以从另一个存储介质(诸如存储设备710)读取到主存储器706中。在主存储器706中包含的指令序列的执行使处理器704执行本文描述的处理步骤。在替代实施例中,可以使用硬连线电路系统代替软件指令或与软件指令组合使用。

如本文使用的术语“存储介质”是指存储有使机器以特定方式操作的数据和/或指令的任何非暂态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备710。易失性介质包括动态存储器,诸如主存储器706。存储介质的常见形式包括例如软盘、柔性盘、硬盘、固态驱动器、磁带或任何其它磁性数据存储介质、CD-ROM、任何其它光学数据存储介质、具有孔模式的任何物理介质、RAM、PROM和EPROM、FLASH-EPROM、NVRAM、任何其它存储器芯片或盒式磁带。

存储介质与传输介质不同但可以与传输介质结合使用。传输介质参与在存储介质之间传递信息。例如,传输介质包括同轴电缆、铜线和光纤,包括包含有总线702的电线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外线数据通信期间生成的那些。

各种形式的介质可以涉及将一条或多条指令的一个或多个序列携带到处理器704以供执行。例如,指令最初可以在远程计算机的磁盘或固态驱动器上携带。远程计算机可以将指令加载到其动态存储器中,并使用调制解调器通过电话线发送指令。计算机系统700本地的调制解调器可以在电话线上接收数据并使用红外线发射器将数据转换为红外线信号。红外线检测器可以接收红外线信号中携带的数据,并且适当的电路系统可以将数据放置在总线702上。总线702将数据携带到主存储器706,处理器704从主存储器706中检索并执行指令。由主存储器706接收的指令可以可选地在由处理器704执行之前或之后存储在存储设备710上。

计算机系统700还包括耦合到总线702的通信接口718。通信接口718提供耦合到网络链路720的双向数据通信,其中网络链路720连接到本地网络722。例如,通信接口718可以是综合业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器、或向对应类型的电话线提供数据通信连接的调制解调器。作为另一个示例,通信接口718可以是提供到兼容的局域网(LAN)的数据通信连接的LAN卡。也可以实现无线链路。在任何这种实现中,通信接口718发送和接收携带表示各种类型信息的数字数据流的电信号、电磁信号或光信号。

网络链路720典型地通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路720可以通过本地网络722提供到主计算机724或到由互联网服务提供商(ISP)726操作的数据设备的连接。ISP 726又通过现在通常称为“互联网”728的全球分组数据通信网络提供数据通信服务。本地网络722和互联网728都使用携带数字数据流的电信号、电磁信号或光信号。通过各种网络的信号以及在网络链路720上并且通过通信接口718的信号是传输介质的示例形式,这些信号将数字数据携带到计算机系统700或携带来自计算机系统700的数字数据。

计算机系统700可以通过(一个或多个)网络、网络链路720和通信接口718发送消息和接收数据,包括程序代码。在互联网示例中,服务器730可以通过互联网728、ISP 726、本地网络722和通信接口718传输对于应用程序的所请求代码。

接收到的代码可以在它被接收时由处理器704执行,和/或存储在存储设备710或其它非易失性存储装置中以供以后执行。

在前面的说明书中,已经参考因实现而异的许多具体细节描述了实施例。因此,说明书和附图应当被认为是说明性的而不是限制性的。本发明的范围的唯一且排他的指标以及申请人预期作为本发明的范围的内容是从本申请中发出的权利要求集合的字面和等同范围,以这种权利要求发出的具体形式,包括任何后续的更正。

相关技术
  • 多租户环境中云缩放数据库的隔离分层运行时的智能池化
  • 多租户数据库的隔离分层运行时环境
技术分类

06120113106573