将多个容器数据库分组为单个容器数据库集群的能力的制作方法

文档序号:15235231发布日期:2018-08-21 20:26阅读:199来源:国知局
本发明一般而言涉及用于缩放保持在容器数据库内的可插拔数据库的数量的技术。本发明更具体地涉及一种多节点数据库管理系统,该多节点数据库管理系统允许即使当可插拔数据库分布在多个容器数据库上时,可插拔数据库也能就像由单个容器数据库保持那样被访问。
背景技术
::本部分中描述的方法是可以被追寻的方法,但不一定是先前已被构思或追寻的方法。因此,除非另外指出,否则不应当假定在本部分中描述的方法中的任何方法仅仅因为其被包括在本部分中而被认为是现有技术。数据库系统数据库管理系统(dbms)管理数据库。dbms可以包括一个或多个数据库服务器。数据库包括存储在持久性存储器机构(诸如一组硬盘)上的数据库数据和数据库字典。数据库数据可以存储在一个或多个数据容器中。每个容器包含记录。每条记录内的数据被组织到一个或多个字段中。在关系型dbms中,数据容器被称为表,记录被称为行,并且字段被称为列。在面向对象的数据库中,数据容器被称为对象类,记录被称为对象,并且字段被称为属性。其它数据库体系架构可能使用其它术语。用户通过使用数据库客户端向数据库服务器提交命令来与dbms的数据库服务器交互,这些命令使数据库服务器对存储在数据库中的数据执行操作。用户可以是运行在与数据库服务器交互的客户端计算机上的一个或多个应用。多个用户在本文也可以被统称为用户。数据库命令可以是符合数据库语言的数据库语句的形式。用于表达数据库命令的数据库语言是结构化查询语言(sql)。存在许多不同的sql版本,一些版本是标准版本并且一些版本是专有版本,并且存在各种扩展。数据定义语言(“ddl”)命令被发到数据库服务器以创建或配置数据库对象,诸如表、视图或复杂数据类型。sql/xml是在操纵对象关系数据库中的xml数据时使用的sql的常见扩展。多节点数据库管理系统传统上由共享对相同数据库的访问的互连节点组成。典型地,节点经由网络互连并且以不同的程度共享对共享存储装置的访问,例如,对一组盘驱动器和其上存储的数据块的共享访问。多节点数据库系统中的节点可以是经由网络互连的一组计算机(例如,工作站、个人计算机)的形式。可替代地,节点可以是网格的节点,其中网格由节点组成,这些节点以服务器刀片的形式与机架上的其它服务器刀片互连。多节点数据库系统中的每个节点都托管数据库服务器。服务器(诸如数据库服务器)是集成的软件组件和计算资源分配的组合,计算资源诸如存储器、节点和用于在处理器上执行集成的软件组件的进程,软件和计算资源的组合专用于代表一个或多个客户端执行特定的功能。来自多节点数据库系统中的多个节点的资源可以被分配为运行特定数据库服务器的软件。软件和来自节点的资源分配的每种组合是在本文中被称为“服务器实例”的服务器。数据库服务器可以包括多个数据库实例,这些数据库实例中的一些或全部在分开的计算机上运行,包括分开的服务器刀片。多租户体系架构容器是多租户容器数据库(cdb)中的、在逻辑上对于应用看起来像单独的数据库的模式(schema)、对象和相关结构的集合。在cdb内,每个容器具有唯一的id和名称。根数据库和每个可插拔数据库(pdb)都被视为容器。pdb隔离数据和操作,使得从用户或应用的角度看,每个pdb看起来好像它是传统的非cdb一样。每个pdb都由其自己的单独的数据库字典定义。数据库字典包括定义包含在数据库中的数据库对象的元数据。实际上,数据库字典定义了数据库的总体。数据库对象包括表、表列和表空间。表空间是用于存储各种类型的数据库对象(诸如表)的数据的一个或多个文件的集合。如果数据库对象的数据存储在表空间中,则数据库字典会将数据库对象映射到保持该数据库对象的数据的一个或多个表空间。根容器(也称为“根”)是特定cdb内的所有pdb所属于的模式、模式对象和非模式对象的集合。每个cdb具有存储管理cdb内的所有pdb所需的系统元数据的一个根。在一些实施方式中,根不存储“用户”数据,而是存储跨cdb的pdb公共的数据,诸如对公共用户和角色、共享表、代码包等的定义。pdb是用户创建的在逻辑上对于应用看起来像单独的数据库的一组模式、对象和相关结构。因此,每个pdb可以潜在地用于存储与不同应用有关的数据,诸如一个pdb专用于托管人力资源应用,并且另一个pdb专用于托管销售应用。但是,由于共享资源在根数据库中仅存储一次,并且由pdb的数据库字典链接,因此与利用完全单独的传统数据库托管每个应用相比,避免了数据重复。此外,由于pdb本身本质上是自包含的数据库,因此为了升级或负载平衡的目的,pdb可以在不同的cdb之间容易地转移。多租户体系架构的缩放多节点数据库管理系统增加了对存储装置的访问的可缩放性,因为每个节点都可以并行接收和处理对于要对底层容器数据库执行的操作的请求。因此,系统可以承受大量的请求并且如果系统开始变得过载,那么添加附加的节点以减少压力。但是,实际上,由于各种硬件和软件的限制,存储在cdb内的pdb的数量是有限的。当需要超过最大数量的附加pdb时,必须建立新的cdb。但是,当添加新的cdb时,必须实现机制以允许数据库客户端能访问新的cdb。例如,客户端可能必须单独地连接到每个cdb,以便发出意图在该cdb上执行的命令。当用户意图在跨越不同cdb的pdb上执行命令时,这可能是低效的和不方便的。例如,管理员可能期望执行将从跨所有cdb的所有pdb收集性能信息或其它度量的命令。为了实现这种效果,管理员可能必须编写要在数据库客户端处执行的脚本,该脚本将依次连接到每个cdb、收集度量并存储度量以供分析。此外,即使在创建这样的脚本之后,如果pdb曾被移动到不同的cdb,那么脚本将需要被持续地维护。例如,为了更好地跨cdb分布负载,来自经历大量请求的容器cdb的pdb可以被移动到经历少量请求的cdb。但是,当移动pdb时,需要修改脚本内的命令以识别pdb的新位置,否则请求将发送到不再存储该pdb的原始cdb。因此,具有以下这样的dbms将是有益的,即,该dbms即使在pdb实际上可能跨多个cdb分布时,也能够访问pdb的集合,就好像它们被保持在单个cdb内一样。附图说明在附图中:图1示出了可以在其上实现实施例的操作环境。图2示出了根据实施例的容器数据库的示例逻辑结构。图3示出了根据实施例的表示用于启动用于包括在集群中的数据库服务器实例的处理的框图。图4示出了根据实施例的表示用于执行从数据库客户端接收到的命令的处理的框图。图5是示出可以在其上实现本发明的实施例的示例计算机系统的框图。具体实施方式在以下描述中,出于解释的目的,阐述了许多具体细节,以便提供对本发明的透彻理解。但是,将明显的是,可以在没有这些具体细节的情况下实践本发明。在其它情况下,公知的结构和设备以框图的形式示出,以避免不必要地模糊本发明。具体实施方式在以下部分中列出:1.0总体概述2.0操作环境3.0容器数据库3.1根数据库3.2撤消/重做记录4.0初始化处理流程5.0同步服务6.0命令处理流程7.0具有应用根的扩展8.0容器查询和优化8.1谓词的下推(pushdown)8.2本地连接(join)的下推8.3基于统计信息的本地连接的下推8.4统计信息收集技术8.5在远程pdb上执行查询9.0硬件概述10.0附加公开1.0总体概述如上文所讨论的,由于各种软件和/或硬件的限制,cdb被限制为最大数量的pdb。因此,当需要比cdb可以高效存储的pdb更多的pdb时,必须使新的cdb上线以保持额外的pdb。但是,对跨越多个cdb的一组pdb执行操作带来了重大挑战。例如,管理员可能希望经由数据库客户端来执行脚本,该脚本从存储在容器数据库1上的可插拔数据库a和b以及存储在容器数据库2上的可插拔数据库c收集性能度量。为了实现期望的效果,脚本将必须使得数据库客户端依次连接到每个cdb、从存储在该cdb内的pdb收集度量、并且然后将度量编译到表或其它数据结构中用于分析。但是,如果脚本中包含的命令通过连接到pdb相关联的cdb来访问pdb,那么移动pdb将导致客户端连接到pdb的旧位置,而不是新位置。例如,如果出于负载平衡的目的,可插拔数据库b后来被移动到容器数据库2,那么由于将可插拔数据库b引用为被保持在容器数据库1内,而实际上可插拔数据库b现在由容器数据库2保持,因此该脚本将不再工作。因此,将需要更新命令或命令集以在容器数据库2中可插拔数据库b的新位置处查找可插拔数据库b。执行这种维护可能是昂贵的,但是如果从用户的角度看,多个cdb在逻辑上被视为保持所有pdb的单个cdb,那么这种成本可以被减轻。在一些实施例中,多节点dbms包括多个数据库服务器,每个数据库服务器提供对相应cdb的访问。每个cdb存储根数据库和一个或多个pdb。根数据库存储跨pdb共享的数据和元数据,并且pdb中的每个pdb存储对于该特定pdb唯一的数据和元数据。根数据库和pdb中的每个pdb都存储数据库字典,该数据库字典定义由该相应的数据库保持的数据库对象。此外,dbms包括集群同步服务器,集群同步服务器维护将集群内的每个pdb映射到其相应的cdb的成员资格信息和元数据。在cdb的初始化期间,与容器数据库相关联的数据库服务器将消息中的集群标识符发送到集群同步服务器。假定集群同步服务器被配置为同时服务多个集群,那么集群标识符由集群同步服务器用于确定相关联的cdb所属的集群。在集群同步服务器仅支持一个集群的情况下,携带集群标识符的消息可以用“hello”消息或请求成员资格的其它握手讯息代替。当同步服务器接收到集群标识符时,同步服务器将cdb添加到集群。在一些实施例中,将新的cdb添加到集群涉及向数据库服务器发送管理将集群内的pdb映射到其相应的cdb的新的cdb映射信息。例如,映射信息可以包括用于每个pdb的记录,该记录包括pdb的名称、保持pdb的cdb的名称、提供对cdb的访问的数据库服务器的网络和/或端口地址等等。此外,集群同步服务器轮询数据库服务器以识别哪些pdb由相关联的cdb保持。集群同步服务器然后将这些映射发送到集群内的其它数据库服务器以供存储在其相应的cdb中。由集群中的每个数据库服务器接收到的映射例如作为数据库字典内的表或作为单独的控制文件被存储在其相应的cdb内。在一些实施例中,集群同步服务器继续维护映射并确保集群内的cdb具有关于哪些pdb由哪些cdb保持的一致且最新的视图。存在许多同步技术可用于此目的,诸如发送周期性的心跳消息以确保cdb上的所有信息都是最新的,或者每当相关联的cdb内的pdb的成员资格改变时,使数据库服务器向集群同步服务器发送更新消息。例如,数据库服务器可以从其相关联的cdb接收添加或移除pdb的命令。作为响应,数据库服务器向集群同步服务器发送更新消息,该集群同步服务器然后更新其自己的映射并将更新后的映射发送到集群内的其它数据库服务器以供存储在它们相应的cdb内。但是,在多节点dbms的节点之间执行同步的确切方式不是关键的,并且在不脱离本公开的范围的情况下,该同步可以以多种不同的方式来执行。为了执行针对cdb的命令,数据库客户端直接连接到根数据库或pdb中的一个pdb。如果数据库客户端连接到可插拔数据库中的一个可插拔数据库,那么由数据库客户端发出的命令通常仅限于该pdb内的数据。因此,从数据库客户端的角度来看,客户端连接到的pdb表现为传统数据库。但是,由于每个pdb“属于”根数据库,因此在根处执行的命令可能潜在地影响底层pdb中的任何pdb或所有pdb。例如,dbms可以实现命令的关键字,该关键字使得命令在cdb内的所有pdb上或在cdb内的指定的pdb子集上执行。在一些实施例中,前述功能是使用sql语句中的containers子句实现的,containers子句当围绕在数据库对象(诸如表)的周围时,指示该命令应当应用于跨cbd的容器的数据库对象的所有实例。例如,sql语句“selectenamfromcontainers(scott.emp)wherecon_idin(45,49)”指示应当从id为45或49的所有容器的表“scott.emp”中选择列“enam”。但是,命令(诸如containers子句)通常限于访问对其执行命令的cdb本地的pdb内的数据。为了解决这个问题,一些dbms实现了被称为“数据库链接”的特征。数据库链接是定义从一个数据库到另一个数据库的单向通信路径的指针。数据库链接允许第一数据库的用户访问和操纵存储在另一个数据库上的对象。数据库链接在数据库的数据字典表内定义,并且包含定位另一个数据库和连接到另一个数据库所需的信息。例如,到本地数据库(诸如同一cdb内的其它pdb)的链接可以指定目标数据库的id,而到远程数据库的链接可以指定负责的数据库服务器的网络信息(例如,域名、ip地址、端口号等等)以及远程cdb内的目标数据库的id号。数据库链接连接是单向的,是因为连接到本地数据库a的客户端可以使用存储在数据库a中的链接来访问远程数据库b中的信息,但连接到数据库b的用户不能使用相同的链接来访问数据库a中的数据。如果数据库b上的本地用户需要访问数据库a上的数据,那么在数据库b的数据字典中定义指向数据库a的链接。一旦建立了数据库链接,由sql语句引用的对象就可以用数据库链接的名称进行限定,以指示该命令要被转发到适当的数据库服务器以供在所链接的数据库上执行。虽然诸如containers子句和数据库链接之类的特征对于编译来自本地pdb和远程pdb的信息是有用的,但是上述特征缺乏位置透明性。换句话说,使用上述特征的sql语句必须明确指定特征正在被使用并且提供/引用识别如何到达目标数据库的信息。例如,containers子句通过id识别数据库,并且数据库链接使用当链接由管理员定义时被绑定到的网络信息/数据库id。因此,如果在利用上述特征的应用代码被编写之后,pdb的位置改变,那么应用代码必须被重新编写,以使用用于访问在pdb的新位置处的pdb的正确的机制和信息。例如,假定cdb1包括{pdb1,pdb2},并且应用代码包括使用containers子句访问这两个pdb的“emp”表的sql语句。如果在以后的某个时间点,出于负载平衡目的pdb1被重新定位到cdb2,那么应用代码将不再产生预期效果,因为pdb1不再是cdb1的成员,并且将不能使用上述sql语句访问。相反,将必须重新编写应用代码以使用到pdb1的数据库链接来达到预期效果。在一些实施例中,为了减轻上述问题,dbms按以下方式来配置,即,该方式允许从用户的角度来看所有pdb被视为就好像由单个cdb存储一样。因此,当接收到要在集群内的所有pdb或pdb的子集上执行的查询或其它命令时,数据库客户端连接到的数据库服务器检查从集群同步服务器接收到的映射信息。数据库服务器然后执行过滤步骤,该过滤步骤识别集群内的哪些cdb具有与命令相关或由命令“隐含”的pdb。例如,如果不具有将containers子句的应用限制为一组特定pdb的谓词的containers子句被执行,那么数据库服务器将咨询(consult)映射来确定集群内所有数据库服务器的网络地址、将命令发送到识别出的数据库服务器、接收该命令的执行结果、编译结果并将结果发送到数据库客户端。但是,如果containers子句包括将其应用限制于一组特定pdb的谓词,那么映射被咨询以识别包含实际上由命令隐含的pdb的cdb。数据库服务器然后将命令发送到提供对识别出的cdb的访问的数据库服务器。不包含与命令相关的任何pdb的cdb不需要接收和/或执行命令。因此,修剪命令的执行防止了负责不包含相关pdb的cdb的服务器处理将不会有实际效果的附加请求。由于上述特征,数据库客户端可以提交仅识别pdb的命令,而不管哪个cdb存储这些pdb或哪个数据库服务器提供对cdb的访问。因此,从用户的角度来看,用户直接与存储所有pdb的单个cdb进行交互,即使这些pdb事实上跨集群内的多个cdb分布。即使pdb要从一个cdb移动到另一个cdb,由集群同步服务器提供的同步服务也确保了集群中的每个数据库服务器都知道所有pdb的当前位置。由数据库客户端发出的命令可以与移动之前的命令相同,并且数据库服务器将内在地知道pdb在集群内的位置,并且可以相应地转发命令。此外,不需要对存储的命令/脚本执行维护,因为命令本身不需要更新以引用在传输之后的pdb的新位置。上述处理的一个附加说明是,每个pdb必须能够在集群内(诸如通过名称或标识号)唯一地识别,就像在单个cdb保持pdb集合的情况下需要唯一标识符一样。唯一标识符确保当命令引用特定pdb时,引用是明确的。2.0通用操作环境图1示出了实施例可以在其上实现的示例计算机联网环境。虽然图1仅描绘了特定数量的每个元件,但是实际环境可能具有多得多的(可能数百或数千个)图1中所示的每个元件。例如,实际的计算机联网环境可能包含发送命令以供多节点dbms118执行的多个数据库客户端,但是为了避免使图示模糊,图1中仅描绘了单个数据库客户端101。在图1中,多节点dbms118包括数据库服务器103、数据库服务器104和数据库服务器105(统称为“数据库服务器”),每个数据库服务器表示在一个或多个计算设备上的软件和资源的组合,该一个或多个计算设备通信地耦接到其相应的容器数据库(分别为容器数据库109、容器数据库110和容器数据库111,统称为“容器数据库”或“cdb”),并且经由网络102通信地耦接到彼此并且还通信地耦接到数据库客户端101和集群同步服务器112。其上可以实现数据库服务器的计算设备的示例在下面的“硬件概述”中描述。数据库服务器各自执行相应的数据库服务器实例(分别为数据库服务器实例106、数据库服务器实例107和数据库服务器实例108,统称为“数据库服务器实例”),每个数据库服务器实例表示在数据库服务器上执行的接受来自数据库客户端101的命令并在其相应的容器数据库上执行命令的程序的实例。为了简洁起见,数据库服务器在下面的示例中被描述为执行动作。但是,这种描述旨在作为由于执行实现其相应的数据库服务器实例的指令或逻辑而执行这些动作的数据库服务器的速写(shorthand)。此外,数据库服务器各自具有处理其相应的数据库服务器实例和客户端设备100、集群同步服务器112和其它数据库服务器之间经由网络102的通信的通信处理(分别为通信处理115、通信处理116和通信处理117,统称为“通信处理”)。为了简洁起见,数据库服务器在下面的示例中被描述为发送或接收消息。但是,上述描述旨在作为经由其相应的通信处理来接收和发送消息的数据库实例的速写。在一些实施例中,通信处理被称为“侦听器”,并且每个侦听器侦听特定端口上的消息并将这些消息传递给其对应的数据库服务器实例以供处理。此外,在一些实施例中,数据库服务器具有并行执行以发送和接收对应的数据库服务器实例的消息的多个侦听器。在实施例中,cdb中的每一个cdb表示存储设备,诸如硬盘驱动器、带存储装置、固态存储设备、raid存储装置、云存储系统等的集合。关于cdb结构的附加细节在下面第3.1部分“容器数据库”中描述。在实施例中,网络102表示一个或多个本地网络、广域网络、互联网络或服务提供商网络。在一些实施例中,网络102表示互联网。在实施例中,数据库客户端101表示在硬件客户端设备100上执行的软件程序,并且负责与数据库服务器对接以发送检索、修改、删除或提交由cdb存储的数据和/或元数据的命令。例如,数据库客户端101可以被配置为向数据库服务器提交sql命令,诸如dml、ddl和查询命令。其上可以实现客户端设备100的计算设备的示例在下面的“硬件概述”中描述。在实施例中,集群同步服务器112表示一个或多个计算设备上确保关键信息跨cdb同步的软件和硬件资源的组合。集群同步服务器112可通信地耦接到集群同步存储装置113,集群同步存储装置113表示一个或多个存储设备,诸如硬盘驱动器、带存储装置、固态存储设备、raid存储装置、云存储系统等的集合。集群同步存储装置113存储集群成员资格信息114,集群成员资格信息114表示作为集群成员的pdb与集群内的这些pdb的位置之间的映射。例如,集群成员资格信息114内的条目或记录可以指定pdb的标识符、存储pdb的cdb的标识符、提供对cdb的访问的数据库服务器的网络地址、在其上联系数据库服务器的端口地址,等等。集群成员资格信息114由集群同步服务器112复制到容器数据库109上以确保相关联的数据库服务器实例知道每个pdb在集群内的位置。集群同步服务器112还确保集群成员资格信息114是最新的并且跨集群内的所有cdb同步。3.0容器数据库图2示出了根据实施例的用于一般容器数据库的示例结构。为了示出清楚的示例,图2是针对容器数据库109描述的,但是该描述也适用于容器数据库110和容器数据库111。容器数据库109包含由数据库服务器103托管和管理的多个数据库。数据库包括可插拔数据库pda220、可插拔数据库pdb230和根数据库210。在其它实施例中,容器数据库109可以包含比图2中描绘的pdb的数量更多的pdb。但是,由于固有的硬件限制,一些实施方式设置了容器数据库109可以支持的pdb的数量的上限。根数据库210是由数据库服务器103用来全局地管理容器数据库109并且存储成员pdb的用户可访问的“公共数据库对象”的元数据和/或数据的数据库。可插拔数据库pda220包括数据库字典221。用于可插拔数据库pda220的数据库对象的数据存储在表空间文件226中。与用户数据类似,用于数据库字典的元数据被持久性地存储在字典存储库中。包含在数据库字典221中的元数据被存储在文件pda.dbdic中。可插拔数据库pdb230包括数据库字典231。表空间文件236存储可插拔数据库pdb230的数据库对象的数据。用于数据库字典231的元数据被持久性地存储在文件pdb.dbdic中。负责容器数据库109的数据库服务器103可以建立根数据库210或成员可插拔数据库中的任何成员可插拔数据库的数据库会话。数据库会话连接到的数据库确定由数据库客户端101发出的命令的范围(例如,命令将在哪个(哪些)数据库上执行)、哪些权限被检查、哪些数据库字典将用于会话,等等。3.1根数据库根数据库210是由数据库服务器103用来全局地管理容器数据库109的数据库。由根数据库210促进的重要功能是定义容器数据库109内保持的pdb。类似于pdb,根数据库210包括数据库字典211。根数据库的数据库字典在本文可以被称为根数据库字典。数据库字典211包含元数据,该元数据定义管理容器数据库109和其中包含的pdb所需的容器数据库109的各个方面。由数据库字典211定义的数据库对象的数据存储在表空间文件216中。数据库字典211包括数据库对象database_sys303,其可以被表示为表。database_sys203定义容器数据库109内的pdb,并且识别存储在同一集群内的其它容器数据库上的pdb。database_sys203的属性各自描述pdb的方面或属性。属性“可插拔db名称(pluggabledbname)”是可插拔数据库的名称或标签。属性“字典存储库(dictionarystore)”识别保持指向成员可插拔数据库的数据库字典的元数据的字典存储库。数据库字典211中的一条记录定义可插拔数据库pda220和它的字典存储文件pda.dbidc。数据库字典211中的另一条记录定义可插拔数据库pdb230和它的字典存储库pdb.dbidc。databases_sys203还识别不是容器数据库109的成员的可插拔数据库pdc。但是,字典存储库属性不仅识别pdc的字典的名称,而且还识别pdc驻留在其上的cdb。在这种情况下,cdb与标识符“c2”相关联。因此,当数据库服务器103接收到隐含pdc的命令时,可以咨询databases_sys204表以识别命令需要被转发到的cdb。例如,数据库字典211可以存储将cdb映射到其相应的数据库服务器的网络/端口地址的单独的表,该单独的表然后可以用于转发命令。作为另一个示例,databases_sys204表可以包括识别对应的cdb的网络地址/端口地址的附加属性。上述映射表示由集群同步服务器112跨cdb复制的集群成员资格信息114。但是,表示和存储pdb与其相应的cdb之间的映射的确切方式不是关键的,并且在不脱离本公开的范围的情况下,可以以许多不同的方式来实现。在实施例中,数据库字典211定义在容器数据库109中由pdb共享或共同使用的公共数据库对象。公共数据库对象在可插拔数据库字典中定义,可插拔数据库字典包括对相应的根数据库字典中的公共数据库对象的引用。公共数据库对象的示例包括供应商供应的函数、实用程序、表和视图。根据实施例,存在两种类型的公共数据库对象:元数据链接的对象和对象链接的对象。对于这两者,公共数据库对象的元数据存储在根数据库210中。但是,对于元数据链接的对象,公共数据库对象的数据(如果有的话)存储在可插拔数据库中。因此,对于元数据链接的对象,不同的可插拔数据库可以针对公共数据库对象的相同定义存储不同的数据。对于对象链接的对象,数据库对象的元数据和数据两者都被存储在根数据库210中。因此,这种类型的公共数据库对象的数据对于容器数据库109中的所有可插拔数据库是相同的。种子可插拔数据库290包含数据库对象和数据库字典。种子可插拔数据库290被克隆以快速创建初期的可插拔数据库,并且促进这种可插拔数据库的快速供给。种子可插拔数据库290包含公共地需要和/或使用的一组基本数据库对象。例如,种子可插拔数据库290可以包含到公共数据库对象的数据库对象链接和用于访问可插拔数据库字典和其它系统信息的视图。3.2撤销和重做记录根数据库210的表空间文件216包括撤销文件241,数据库服务器103使用该撤销文件241来存储与容器数据库109内包含的数据库上的事务相关的数据和/或元数据(“撤销记录”)。在一些实施例中,撤销记录存储在事务期间被修改的数据的前映像和后映像。例如,如果在事务期间数据库服务器350修改了特定行的“state(州)”列以将值从“ohio”改变为“california”,则数据库服务器103还在撤销文件341中存储指定在先值“ohio”、在后值“california”以及修改的位置(例如,被修改的一个或多个数据块)的撤销记录。如果事务需要被回滚,则数据库服务器103通过对撤销记录进行回溯以反转事务已执行的任何修改。撤销记录可以存储与对应事务的状态相关的元数据,诸如指示事务是否活动、是否已经提交或是否正在回滚过程中的元数据。撤销记录可以用于各种目的,诸如回滚事务、恢复数据库、提供读取一致性等。在一些实施例中,撤消文件241为有限大小,并且因此数据库服务器103可以覆写撤消记录以在事务发生时节省空间。例如,存储撤销记录的段可以在对应的事务(例如,通过提交或回滚)结束之后被重用。但是,在其它实施例中,数据库服务器103可以在对应的事务已经结束之后的一段时间内保留撤消记录。例如,可以保留撤消记录以便为长时间运行的查询提供读取一致性。容器数据库109还包括重做日志240,数据库服务器103使用重做日志240来存储与在容器数据库109上执行的修改有关的数据和/或元数据(“重做记录”)的。例如,每当数据库服务器103改变容器数据库109的数据块时,数据库服务器103还在重做日志240中存储识别被修改的(一个或多个)块并指定在先/在后值的重做记录。在一些实施例中,数据库服务器103基于被修改的数据库的状态来识别重做记录。例如,数据库服务器103可以维护容器数据库109的“系统更改编号”(scn)。每当事务在底层数据库之一上提交时,数据库服务器103递增scn。scn在根数据库210和可插拔数据库之间共享。当数据库服务器103生成重做记录时,该重做记录被标记或以其它方式与识别被修改的数据库和对应的scn的信息相关联。因此,scn用于识别在创建重做记录时的对应数据库的状态。在其它实施例中,时间戳可以用于相同的效果。因此,重做日志240存储重做记录的流,该重做记录的流可以由数据库服务器103使用以当需要恢复时重放对容器数据库109的修改。4.0初始化处理流程图3示出了根据实施例的用于数据库服务器的示例初始化处理流程。为了示出清楚的示例,将从数据库服务器103的角度并且在假定数据库服务器104和数据库服务器105已经被初始化并且是集群的成员的情况下来描述初始化处理。虽然参考图3描述的步骤可能以特定顺序呈现,但是在不脱离本公开的范围的情况下,其它实施例可以以不同的顺序执行步骤、合并步骤、将步骤划分为多个子步骤、并行执行步骤,等等。在图3中,在方框300处,数据库服务器103接收启动数据库服务器实例106的命令,该命令指定数据库服务器实例106将作为其成员的容器数据库集群。在实施例中,启动数据库服务器实例106的命令是命令行接口或图形用户界面命令,其允许用户指定数据库服务器103和相关联的容器数据库109将加入的集群的标识符。为了提供清楚的示例,假定使用的标识符是数据库服务器104和数据库服务器105已经加入的集群的标识符。在方框301处,数据库服务器103启动数据库服务器实例106。在实施例中,数据库服务器103执行实现数据库服务器实例106的一组指令。在执行数据库服务器实例106的处理中,数据库服务器103可以分配诸如存储器和处理器时间之类的资源来执行数据库服务器实例106。数据库服务器实例106被配置为从数据库客户端101接收命令(诸如sql命令),并对在方框300处指定的集群内的一个或多个可插拔数据库上执行命令。在方框302处,数据库服务器103向集群同步服务器112发送请求加入集群的消息。在实施例中,该消息包括在方框300处指定的集群的标识符。但是,在一些实施例中,集群同步服务器112可以仅服务一个集群。在这种情况下,供应集群的标识符可能是不必要的,并且携带标识符的消息可以用请求加入集群的“握手”消息或普通消息来替代。响应于接收到在方框302处的消息,集群同步服务器112向数据库服务器103发送消息,该消息包括在集群成员资格信息114中识别出的可插拔数据库和容器数据库之间的映射。例如,该消息可以识别集群内的每个可插拔数据库、保持可插拔数据库的对应容器数据库、支持容器数据库的数据库服务器的网络/端口信息,等等。在方框303处,数据库服务器103从集群同步服务器112接收映射。在方框304处,数据库服务器103将映射存储在数据库字典211的表中。在实施例中,映射被存储为图2的表database_sys203的一个或多个字段。但是,在其它实施例中,映射可以存储在单独的表中。可替代地,为了节省空间,映射可以跨多个表存储,所述多个表诸如识别集群中的每个可插拔数据库所属的容器数据库的一个表以及将容器数据库映射到提供对容器数据库的访问的数据库服务器的网络/端口地址的另一个表。上述技术防止容器数据库的网络/端口信息被存储多次。此外,映射信息可以作为跨成员可插拔数据库公共或共享的数据存储在根数据库210中。在还有的其它实施例中,映射可以作为元数据存储在根数据库210的数据库字典211外部或者甚至根数据库210的外部的数据结构中。存储映射的确切方式不是关键的,并且可以依据实施方式而不同。在实施例中,响应于接收到在方框302处的请求加入集群的消息,集群同步服务器112还向数据库服务器103发送请求识别由容器数据库109保持的可插拔数据库的消息。但是,在其它实施例中,该请求可以在与提供来自集群成员资格信息114的映射的消息相同的消息中发送。在方框305处,数据库服务器103接收请求识别由容器数据库109保持的可插拔数据库的消息。在方框306处,数据库服务器103向集群同步服务器112发送识别由容器数据库109保持的可插拔数据库的消息。例如,数据库服务器103可以发送识别由容器数据库109保持的每个可插拔数据库的名称或其它标识符的列表。例如,数据库服务器103可以发送识别可插拔数据库220和可插拔数据库pdb230的消息。响应于接收到识别由容器数据库109保持的可插拔数据库的消息,集群同步服务器112在集群成员信息114中存储用于识别出的可插拔数据库中的每个可插拔数据库的映射,该映射将可插拔数据库与容器数据库109和数据库服务器103相关联。在更新集群成员资格信息114之后,集群同步服务器112将更新后的映射发送到集群内的其它数据库服务器(数据库服务器104和数据库服务器105),这些数据库服务器然后相应地更新它们自己的数据库字典表。5.0同步服务在实施例中,集群同步服务器112为作为同一集群的一部分的数据库服务器/容器数据库运行同步服务。集群同步服务器112的主要工作是确保存储在集群成员资格信息114中的映射是最新的并且还跨容器数据库被复制。存在用于实现同步服务的许多不同的技术。在一些实施例中,集群同步服务器112向每个数据库服务器周期性地发出包括对集群成员资格信息114的更新的心跳消息,使得它们相应的数据库字典表可以被更新。在其它实施例中,每当数据库服务器中的一个数据库服务器经历可插拔数据库成员资格的变化(例如,可插拔数据库被添加到容器数据库或从容器数据库中移除)时,该数据库服务器向集群同步服务器112发送识别成员资格变化的消息。作为响应,集群同步服务器112更新集群成员资格信息114并在其余的数据库服务器当中传播这些变化。在一些实施例中,集群同步服务器112还跟踪哪些数据库服务器在线或离线。例如,上述心跳消息可以用于通过未能在阈值时间段内作出响应而确定数据库服务器是否已经离线。在这种情况下,集群同步服务器112可以移除涉及相关联的容器数据库的映射并且在其它数据库服务器当中传播这些变化。本文描述的技术相对于由集群同步服务器112提供的同步服务是透明的(agnostic)。只要服务跨集群内的容器数据库使集群成员资格信息114充分地保持同步,实现服务的确切方式就不是关键的,并且可以依据实施例而不同。6.0命令处理流程图4示出了根据实施例的用于处理由数据库服务器接收到的命令的示例处理流程。为了示出清楚的示例,将从数据库服务器103的角度并且在假定数据库服务器104和数据库服务器105已经被初始化并且是集群的成员的情况下来描述该处理。虽然参考图4描述的步骤可能以特定顺序呈现,但是在不脱离本公开的范围的情况下,其它实施例可以以不同的顺序执行步骤、合并步骤、将步骤划分为多个子步骤、并行执行步骤,等等。在图4中,在方框400处,数据库服务器103从数据库客户端101接收命令。在一些实施例中,从数据库服务器103接收到的命令包括指示该命令或该命令的部分要跨多个可插拔数据库来执行的关键字。例如,命令可以使用以上在1.0部分中描述的containers关键字来识别其相关联的动作意图在多个可插拔数据库上执行的数据库对象。此外,在一些实施例中,命令可以包括一个或多个谓词,该一个或多个谓词将命令的应用限制到集群内的可插拔数据库的特定子集。但是,命令还可以使用与containers子句不同的格式,诸如包括专门旨在查询元数据(诸如与容器数据库109内的容器中的每个容器相关联的度量)的关键字的命令。例如,度量可以包括访问某些列或记录的频率、处理不同类型命令的平均时间、在一段时间内服务的命令的量,等等。在方框401处,数据库服务器103识别负责由命令隐含的可插拔数据库的一个或多个数据库服务器。在实施例中,数据库服务器103首先识别命令所隐含的可插拔数据库。在一些情况下,所有可插拔数据库可以被隐含,诸如可能是其中使用了containers子句而没有将命令的影响限制到可插拔数据库的特定子集的任何谓词的情况。在其它情况下,命令可以指定应当在其上执行命令的可插拔数据库的子集。接下来,数据库服务器103咨询表示集群成员资格信息114的数据库字典211的表,以识别负责识别出的可插拔数据库的数据库服务器。例如,数据库字典211可以存储识别与识别出的可插拔数据库对应的数据库服务器实例的网络地址和端口地址的表。在方框402处,数据库服务器103将命令发送到在方框401处识别出的数据库服务器中的每个数据库服务器。在实施例中,数据库服务器103使用存储在数据库字典211中的与识别出的可插拔数据库相关联的数据库服务器的网络地址和端口地址将命令转发给这些数据库服务器。在一些实施例中,命令可以在转发之前被修改。例如,如果命令包括将命令的应用限制到可插拔数据库的子集的谓词,那么可以修改命令以将谓词改变为仅引用已知为与命令被发送到的数据库服务器实例相关联的容器数据库的成员的可插拔数据库。关于查询的潜在优化和变换的附加细节将在下面第8.0部分“容器数据库查询和优化”中更详细地讨论。在一些实施例中,数据库服务器可以执行负责不同容器数据库的多个数据库服务器实例。在这种情况下,映射信息还可以指定负责提供对给定可插拔数据库的访问的数据库服务器实例。在这样的实施例中,在方框402期间,命令被转发到相关的数据库服务器实例。例如,不同的数据库服务器可以具有在不同端口地址上侦听的侦听器。因此,可以使用端口地址来识别哪个数据库服务器实例是命令的预期接收者。在实施例中,数据库服务器在接收到来自数据库服务器103的命令时,在存储在其相应容器数据库上的适当可插拔数据库上执行命令。在一些情况下,诸如当命令是查询时,数据库服务器实例将向数据库服务器103发送回执行命令的结果。例如,在查询的情况下,结果可以是与由查询指定的一个或多个谓词匹配的行。在其它类型的命令(诸如dml或ddl命令)的情况下,结果可以是命令被成功执行的确认或者是指示命令未被成功执行的错误消息。在方框403处,数据库服务器103从在方框402处命令被发送到的数据库服务器中的每个数据库服务器接收执行命令的结果。在实施例中,取决于在方框400处接收到的命令的类型,数据库服务器103可以接收诸如满足查询的行、确认、否定确认等之类的结果。但是,如果实施例实现不返回结果的命令,那么可以跳过方框403处的步骤。在一些实施例中,在方框403处,数据库服务器103可以执行对从每个数据库服务器接收到的结果的过滤和/或聚合。例如,在命令是查询的情况下,如下面在第8.0部分“容器数据库查询和优化”中更详细解释的,在一些情况下,在数据库服务器103处而不是在命令被转发到的每个单独的数据库服务器处执行谓词过滤中的至少一些可能更高效。在许多情况下,数据库服务器103具有被称为“查询计划器”或“查询优化器”的组件,该组件基于各种因素来识别执行查询的最高效方式。因此,在方框403处,数据库服务器103可能必须应用作为查询的一部分但不由远程数据库服务器处理的谓词。此外,命令可以指定数据以特定格式返回,诸如对返回结果的一列或多列进行排序。因此,取决于情况,可以在其它数据库服务器实例处或在数据库服务器103处执行排序,这取决于哪条路径更高效。数据库服务器103然后聚合来自其它数据库服务器的结果和它自己的结果(如果适用的话)。在方框404处,数据库服务器103将结果发送到数据库客户端102。但是,在不存在通过执行命令生成的结果的情况下,可以跳过方框404处的步骤。7.0具有应用根的扩展在单个cdb内,一些实施例引入“应用根”的概念以同时管理由公共应用使用的多个pdb。关于应用根的附加细节可以在于2016年10月21日与本申请同时提交的由andrekruglikov等人所写的美国申请no.##/###,###“applicationcontainers”中找到,出于所有目的将该美国申请的全部内容通过引用结合于此,就像在本文完全陈述一样。类似于cdb的根,应用根分离出跨多个pdb共享的对象。虽然cdb的根存储对cdb的所有pdb公共的信息(诸如由dbms的开发人员供应的共享对象),但是应用根用于存储跨由同一应用使用的pdb共享的对象。这是通过使用“数据链接的”数据和“元数据链接的”数据完成的,其中在“数据链接的”数据中定义数据的元数据和数据本身驻留在应用根内,在“元数据链接的”数据中定义数据的元数据驻留在应用根内并且数据本身驻留在成员pdb内。例如,“数据链接的”数据可以表示跨所有成员pdb共享或公共的表,并且“元数据链接的”数据可以表示共享在应用根的数据库字典内定义的公共定义的表,但是表的记录在成员pdb之间是不同的。因此,cdb的根防止了跨所有pdb的共享定义和对象的重复,而应用根防止了跨由公共应用使用的pdb的共享定义和对象的重复。此外,类似于可以通过建立到根数据库的会话来访问cdb内的任何pdb的方式,建立到应用根的会话提供对作为应用根的成员的所有pdb的访问。例如,假定查询不包括限制查询应用到的pdbid的谓词,那么包括在应用根处执行的containers子句的查询将查询应用到跨应用根及其成员pdb的指定数据库对象的所有实例。在一些实施例中,为了继续用户正在与单个cdb对接的体验,在一个数据库上创建的应用根还在集群内的所有cdb上被镜像(mirror),以防止由于数据库服务器之间的延迟而导致的冗长查找时间。“applicationcontainers”申请还描述了可以用于维护跨多个cdb的应用根的一致性的应用根副本。这个特征与上文参考图3和图4描述的处理结合为用户提供了一种错觉,即,即使当命令在跨多个cdb复制的应用根上执行时,用户也感觉他们正在与单个cdb对接。此外,存储在应用根中的数据库对象的公共定义确保该应用根的成员具有可以使用containers关键字来查询的公共数据库对象。8.0容器查询和优化通过使用关键字(诸如以上讨论的containers子句),可以在与根数据库的数据库会话期间查询多个pdb中的数据。例如,以下查询将返回来自多个pdb的数据,qa1:selectenamefromcontainers(emp)wherecon_idin(45,49);在一些实施例中,containers子句的con_id列包括在由containers子句返回的每一行中,并且识别返回行中的每个行源自的pdb。在以上查询中,con_id识别与id45和49相关联的pdb。查询由在使用并行从属执行框架提供对容器数据库的访问的数据库服务器上运行的多个进程执行。这些进程包括查询协调器进程和一个或多个从属进程,该一个或多个从属进程在本文被称为pq(并行查询)从属进程。访问pdb的pq从属进程在pdb的会话上下文内执行;pdb的数据字典附加到pq从属进程的会话。此外,访问pdb的pq从属进程执行基于用于针对pdb执行的原始查询生成的递归查询。递归查询可能与原始查询不同(或者甚至语义上不等价)。在一些实施例中,递归查询去除与跨多个pdb执行查询相关联的谓词和/或关键词,并且替代地将原始查询变换为适合于在单个pdb上执行的递归查询。例如,以下递归查询qr1可以针对查询qa1生成并被交给pq从属进程,qr1:selectenamefromemp;然后,由一个或多个单独的从属进程集合针对与id45和49相关联的pdb执行上面的qr1。8.1谓词的下推在一些实施例中,通过将谓词并入到递归查询中来“下推”过滤谓词。例如,qa2:selectenamefromcontainers(emp)whereemp.age<18;qr2:selectenamefromempwhereemp.age<18qa2中的谓词“emp.age<18”在递归查询qr2中被下推。因此,谓词将由每个pq从属进程并行检查,而不是由查询协调器进程串行执行。由于原始查询缺少基于con_id的谓词,因此递归查询qr2在由原始查询所隐含的所有开放的pdb上执行。8.1本地连接的下推在另一个实施例中,pdb的上下文内的pq从属进程可以将连接操作下推以在pdb上执行。例如,当containers(dba_views)和containers(dba_tables)连接在一起时,假定行基于containers()的列con_id列的匹配进行连接,那么这些连接可以在pdb的上下文内本地完成。如果查询内不存在这样的相等谓词,那么不能下推连接,因为连接将必须跨从多个不同pdb获取的行执行,这是查询协调器进程在接收到来自pq从属进程的结果集之后将必须执行的。在一些实施例中,默认假定用于连接的列的con_id相等性,因为这种情况可以被并行地高效执行。因此,查询协调器进程可以隐含地添加con_id相等性,或者从属进程可以被配置为假定指定con_id相等性存在的谓词。但是,在这种情况下,可以支持关键字来专门指示con_id相等性谓词不存在,以便不限制用户可以执行的查询类型。例如考虑查询,qa3:select(*)fromcontainers(dba_tables)t,contianers(dba_views)vwheret.table_name=v.view_nameandt.con_id=v.con_id以上查询的替代表示是:qa3’:selectcount(*)fromcontainers(selectt.table_namefromdba_tablest,dba_viewsvwheret.table_name=v.view_name)容器子句内的语句被执行为pdb(用pdb的上下文执行的pq从属进程)内的递归查询,实际上导致对于“t.table_name=v.view_name”的本地连接并行地在每个pdb内本地执行。响应于在查询qa3中检测到基于con_id的连接而生成递归查询qa3'。8.2基于统计信息的本地连接的下推连接操作的下推可以基于为表收集到的优化器统计信息。在多节点dbms118的情况下,表的统计信息可以由其相关联的容器数据库的每个相应的数据库服务器上传到同步服务器112的集群成员资格信息114,并跨集群内的其它容器数据库复制。以下查询引用数据存储在应用根中的对象链接的表dep以及数据存储在每个单独的pdb中的元数据链接的表emp。假定优化器统计信息指示dep是小表,并且表emp是大表。基于优化器统计信息,本地连接被推送以在pdb的上下文内执行,如以下查询所示。qa4:selectemp.name,dep.namefromcontainers(emp),depwhereemp.dep=dep.idanddep.groupid=5这里,查询协调器进程确定dep是小表并且表emp是每个pdb中的大表。因此,至少部分地在每个pdb内本地执行连接是有利的。下面示出了可以针对执行本地连接而生成的示例递归查询:qr4:selectemp.namefromempwhereinemp.depin(list_of_deps)递归查询返回与dep中的“dep.groupid=5”的行连接的所有行。递归查询使用列出具有“dep.groupid=5”的行的每个部门的id的存储器中数据结构“list_of_deps”。list_of_deps的数据由应用根生成,并经由递归查询传入。由于多节点dbms118提供对多个容器数据库的访问,这些容器数据库中的每个容器数据库可以彼此远离地定位,因此降低结果的基数的下推连接使得较少的记录在网络102上传送。但是,下推连接并不总是使得结果的基数降低。例如,如果在具有1000条记录的表和具有2000条记录的表之间执行没有谓词的交叉连接,那么笛卡尔乘积将产生1000×2000=2000000条记录,这些记录将需要发回到转发命令的数据库服务器。在这种情况下,接收到命令的原始数据库服务器的查询优化器将选择不下推连接,而是在接收到结果后才执行连接。是否下推连接的决定取决于执行该连接的结果与原始表相比是增加还是减少了结果的基数。对于给定的查询,哪种情况正确取决于统计信息,诸如在下面的8.4部分“统计信息收集技术”中所描述的统计信息。8.3并行递归查询当查询协调器生成涉及交叉pdb查询的执行计划时,查询协调器确定并行度(dop,例如,从属进程的数量)。这些从属进程中的任何一个都可以被指派在pdb的上下文内执行递归查询的工作。由查询协调器指派的负责在pdb的上下文内执行递归查询的pq从属进程在本文被称为pdb从属进程(slave)。然后,pdb从属进程可以决定用于在pdb内执行递归查询的dop。如果决定了大于1的dop,那么pdb从属进程成为用于执行递归查询的多个pq从属进程的查询协调器。因此,在一个数据库服务器内,交叉pdb查询可以由多个查询协调器执行,一个查询协调器在根或应用根的上下文内操作,并且一个或多个查询协调器在pdb的上下文内作为协调递归查询的多个pdb从属进程的执行的查询协调器操作。8.4统计信息收集技术如上文所讨论的,查询协调器进程依赖准确的统计信息以便在查询计划期间做出确定,诸如确定本地连接是否应当被下推到递归查询中。但是,在远程pdb的情况下,通常会在每个相应的pdb内存储诸如表和其它数据库对象的大小和分布之类的统计信息。这造成数据库服务器需要在本地cdb内远程pdb的统计信息不可用的情况下做出决定(诸如决定是否下推连接)的问题。这个问题可以通过多种方式来解决。在一个实施例中,负责远程pdb的数据库服务器可以周期性地向集群同步服务器112推送统计信息以用于存储在集群成员资格信息114中,或响应于某些触发器(诸如记录被更新、删除或添加到数据库对象)将统计信息推送到集群同步服务器112。然后,集群同步服务器112确保统计信息被复制到集群内的所有容器数据库上,以确保每个数据库服务器都具有对上述统计信息的本地访问。取决于由实施例实现的技术,存储在每个容器数据库内的统计信息可能不完全同步。但是,即使在这种情况下,统计信息仍然会提供查询协调器可以依赖以制定查询计划的估计。8.5在远程pdb上执行查询在一些实施例中,当原始查询隐含位于远程cdb(由另一个数据库服务器管理的cdb)的一个或多个pdb时,数据库服务器将查询转发给负责提供对这些pdb的访问的数据库服务器,如以上参考图4所述。但是,取决于数据库服务器的实现,查询可以在被转发到其它数据库服务器之前被变换。具体而言,查询可以被变换以添加谓词,这些谓词将查询的应用限制到查询隐含的、驻留在由接收变换后的查询的数据库服务器管理的容器数据库上的pdb。这种变换防止了接收查询的数据库服务器试图在永不停止的循环中执行containers子句。例如,假定如图1所示的多节点dbms118并且考虑在数据库服务器103处接收到以下查询,qa2:selectenamefromcontainers(emp)whereemp.age<18;以上查询不包含将containers子句的应用限制到任何特定pdb的谓词。因此,当数据库服务器103首次接收到该查询时,数据库服务器103将咨询存储在其数据库字典211中的映射,以确定该查询需要被转发到数据库服务器104和数据库服务器105以便在它们对应的容器数据库中存储的pdb上执行。如果查询被“按原样”发送,那么该查询的处理将导致这些数据库服务器使用相同的进程依次将命令转发给其它数据库服务器。这可能潜在地造成永不停止的循环。但是,如果数据库服务器103通过附加将查询的应用显式地限制到存储在由数据库服务器104和数据库服务器105管理的相应容器数据库内的pdb的谓词来变换查询,那么这将防止这些服务器继续该循环。例如,数据库服务器103可以向查询添加谓词,这些谓词基于存储在数据库字典211中的映射将识别出的pdb的id显式地指定为分别属于数据库服务器104和数据库服务器105。作为另一个示例,谓词可以指定数据库服务器104和数据库服务器105的相应容器数据库的id,这将把查询的应用限制到它们自己相应的容器数据库内的pdb。上述变换使数据库服务器104和数据库服务器105以与从数据库客户端接收任何其它查询相同的方式来处理查询。因此,数据库服务器将不需要特殊的逻辑,该特殊的逻辑用于区分其中查询是从数据库客户端101接收到的原始查询并且必须潜在地被转发以在远程pdb上执行的情况与其中从另一个数据库服务器接收仅应当在本地pdb上执行的查询的情况。但是,其它实施例可以选择实现前述的特殊逻辑,例如维护其它已知数据库服务器的网络地址的列表,并使用该列表来确定查询应当何时被转发或者仅被本地执行。9.0硬件概述根据一个实施例,本文描述的技术由一个或多个专用计算设备或一个或多个通用计算设备来实现。专用计算设备可以是硬连线的以执行这些技术,或者可以包括诸如被永久性编程以执行这些技术的一个或多个专用集成电路(asic)或现场可编程门阵列(fpga)之类的数字电子设备,或者可以包括被编程为按照固件、存储器、其它存储装置或其组合中的程序指令来执行这些技术的一个或多个通用硬件处理器。这些专用计算设备还可以将定制的硬连线逻辑、asic或fpga与定制的编程组合来实现这些技术。专用计算设备可以是台式计算机系统、便携式计算机系统、手持式设备、联网设备或者合并硬连线逻辑和/或程序逻辑以实现这些技术的任何其它设备。通用计算设备可以包括一个或多个通用硬件处理器,该一个或多个通用硬件处理器被编程为按照固件、存储器、其它存储装置或其组合中的程序指令来执行这些技术。例如,图5是示出本发明的实施例可以在其上实现的示例计算机系统500的框图。计算机系统500包括用于传送信息的总线502或者其它通信机制,以及与总线502耦接以用于处理信息的硬件处理器504。硬件处理器504可以是例如通用微处理器。计算机系统500还包括耦接到总线502用于存储信息和要由处理器504执行的指令的主存储器506,诸如随机存取存储器(ram)或其它动态存储设备。主存储器506还可以用于在要由处理器504执行的指令执行期间存储临时变量或其它中间信息。当存储在处理器504可访问的非瞬态存储介质中时,这种指令使计算机系统500成为被定制为执行指令中所规定的操作的专用机器。计算机系统500还包括耦接到总线502的只读存储器(rom)508或者其它静态存储设备,以用于为处理器504存储静态信息和指令。诸如磁盘或光盘之类的存储设备510被提供,并且耦接到总线502,以用于存储信息和指令。计算机系统500可以经由总线502耦接到显示器512,诸如阴极射线管(crt),以用于向计算机用户显示信息。包括字母数字键和其它键的输入设备514耦接到总线502,以用于向处理器504传送信息和命令选择。另一种类型的用户输入设备是游标控制器516,诸如鼠标、轨迹球或者游标方向键,以用于向处理器504传送方向信息和命令选择以及用于控制显示器512上的游标移动。这种输入设备通常具有允许设备规定在平面中的位置的在两个轴(第一轴(例如,x)和第二轴(例如,y))上的两个自由度。计算机系统500可以利用与计算机系统相结合使得计算机系统500成为专用机器或者把计算机系统500编程为专用机器的定制的硬连线逻辑、一个或多个asic或fpga、固件和/或程序逻辑来实现本文所述的技术。根据一种实施例,本文的技术由计算机系统500响应于处理器504执行包含在主存储器506中的一条或多条指令的一个或多个序列而执行。这种指令可以从诸如存储设备510之类的另一存储介质读到主存储器506中。包含在主存储器506中的指令序列的执行使处理器504执行本文所述的处理步骤。在可替代实施例中,硬连线的电路系统可以代替软件指令或者与软件指令结合使用。如在本文所使用的,术语“存储介质”是指存储使机器以特定方式操作的数据和/或指令的任何非瞬态介质。这种存储介质可以包括非易失性介质和/或易失性介质。非易失性介质包括例如光盘或磁盘,诸如存储设备510。易失性介质包括动态存储器,诸如主存储器506。存储介质的常见形式包括,例如,软盘、柔性盘、硬盘、固态驱动器、磁带、或者任何其它磁性数据存储介质、cd-rom、任何其它光学数据存储介质、具有孔模式的任何物理介质、ram、prom和eprom、flash-eprom、nvram、任何其它存储器芯片或盒式磁带。存储介质与传输介质不同但是可以与传输介质结合使用。传输介质参与在存储介质之间传送信息。例如,传输介质包括同轴线缆、铜线和光纤,包括包含总线502的导线。传输介质还可以采取声波或光波的形式,诸如在无线电和红外数据通信期间产生的声波或光波。把一条或多条指令的一个或多个序列携带到处理器504以供执行可以涉及各种形式的介质。例如,指令最初可以在远端计算机的磁盘或固态驱动器上携带。远端计算机可以把指令加载到其动态存储器中并且利用调制解调器经电话线发送指令。位于计算机系统500本地的调制解调器可以接收电话线上的数据并且使用红外线发送器把数据转换成红外线信号。红外线检测器可以接收在红外线信号中携带的数据并且适当的电路系统可以把数据放在总线502上。总线502把数据携带到主存储器506,处理器504从主存储器506检索并执行指令。由主存储器506接收的指令可以可选地在被处理器504执行之前或之后被存储在存储设备510上。计算机系统500还包括耦接到总线502的通信接口518。通信接口518提供耦接到网络链路520的双向数据通信,其中网络链路520连接到本地网络522。例如,通信接口518可以是综合业务数字网络(isdn)卡、线缆调制解调器、卫星调制解调器、或者提供到对应类型的电话线的数据通信连接的调制解调器。作为另一个示例,通信接口518可以是提供到兼容的局域网(lan)的数据通信连接的lan卡。还可以实现无线链路。在任何此类实现中,通信接口518发送和接收携带表示各种类型的信息的数字信号流的电信号、电磁信号或光信号。网络链路520通常通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路520可以通过本地网络522提供到主机计算机524或者到由互联网服务提供商(isp)526操作的数据设备的连接。isp526又通过现在通常称为“互联网”528的全局分组数据通信网络提供数据通信服务。本地网络522和互联网528都使用携带数字数据流的电信号、电磁信号或光信号。把数字数据带到计算机系统500或者携带来自计算机系统500的数字数据的通过各种网络的信号以及在网络链路520上并通过通信接口518的信号是传输介质的示例形式。计算机系统500可以通过(一个或多个)网络、网络链路520和通信接口518发送消息和接收数据,包括程序代码。在互联网示例中,服务器530可以通过互联网528、isp526、本地网络522和通信接口518发送对于应用程序的所请求的代码。接收到的代码可以在其被接收到时由处理器504执行,和/或存储在存储设备510或其它非易失性存储装置中,以用于以后执行。在前面的说明书中,已经参考可以依据实施方式而不同的众多的具体细节描述了本发明的实施例。因此,说明书和附图将被认为是说明性的而不是限制性的。本发明的范围的唯一且排他的指示以及申请人旨在作为本发明的范围的内容是以权利要求发布的具体形式从本申请发布的权利要求集合的书面和等价范围,包括任何后续的补正。10.0附加公开在以下条款中描述了附加实施例:1.一种方法,包括:在多个数据库服务器中的数据库服务器处接收来自数据库客户端的命令以在多个可插拔数据库中的一个或多个可插拔数据库上执行,其中该多个可插拔数据库中的每个可插拔数据库由多个容器数据库中的相应容器数据库保持,其中该多个容器数据库中的每个容器数据库可经由该多个数据库服务器中的相应数据库服务器访问;由数据库服务器基于包含多条记录的映射信息来识别多个数据库服务器中提供对该一个或多个可插拔数据库的访问的一个或多个数据库服务器,其中该多条记录中的每条记录将多个可插拔数据库中的给定可插拔数据库映射到多个数据库服务器中提供对多个容器数据库中的保持给定可插拔数据库的容器数据库的访问的数据库服务器;由所述数据库服务器将命令发送到该一个或多个数据库服务器;在数据库服务器处接收来自该一个或多个数据库服务器的一个或多个响应,该一个或多个响应各自包括执行命令的结果;由数据库服务器向数据库客户端发送一个或多个消息,其中该一个或多个消息包括来自该一个或多个响应的数据。2.如条款1的方法,其中命令是查询并且方法还包括:对于该一个或多个数据库服务器中的每个特定数据库服务器,在将命令发送到特定数据库服务器之前,由数据库服务器变换命令,以添加将命令的应用限制到由数据库服务器的相应容器数据库保持的一个或多个可插拔数据库的一个或多个谓词。3.如条款1-2中任一项的方法,还包括:在接收到命令之前,由数据库服务器接收指定启动将是与特定标识符相关联的集群的成员的新数据库实例的第二命令;响应于接收到第二命令:由数据库服务器生成新的数据库实例;向集群同步服务器发送加入集群的请求,其中该请求指定特定标识符;由数据库服务器向集群同步服务器发送将由数据库服务器的相应容器数据库保持的可插拔数据库映射到集群同步服务器的第一信息;由数据库服务器从集群同步服务器接收第二信息,该第二信息映射作为集群成员的多个数据库服务器中的每个其它数据库服务器的相应容器数据库保持的可插拔数据库;由数据库服务器将第二信息存储为映射信息的至少一部分。4.如条款3的方法,其中映射信息被存储在数据库服务器的相应容器数据库内的根数据库的数据库字典内。5.如条款3的方法,还包括:响应于接收到第一信息,由集群同步服务器将第一信息发送到作为集群的成员的多个数据库服务器中的每个其它数据库服务器。6.如条款5的方法,还包括:由集群同步服务器将第二信息存储为集群成员资格信息的至少一部分,该集群成员资格信息为多个可插拔数据库中的每个可插拔数据库识别多个容器数据库中的对应容器数据库和多个数据库服务器中的对应数据库服务器,其中集群同步服务器跨作为集群成员的多个容器数据库中的每个容器数据库同步集群成员资格信息。7.如条款1-6中任一项的方法,其中该一个或多个可插拔数据库的数量少于该多个可插拔数据库的数量。8.如条款1-7中任一项的方法,其中命令包括指示命令要在多个可插拔数据库上执行的一个或多个关键字。9.如条款1-8中任一项的方法,其中命令是包括将命令的应用限制到该一个或多个可插拔数据库的一个或多个谓词的查询。10.如条款1至10中任一项的方法,还包括:响应于从数据库服务器接收到命令,由该一个或多个数据库服务器中的第二数据库服务器在一个或多个可插拔数据库中的由第二数据库服务器的相应容器数据库保持的一组可插拔数据库上执行命令。11.存储指令的一个或多个非瞬态计算机可读介质,所述指令当由一个或多个计算设备执行时使得如条款1-10中记载的方法中的任一种方法被执行。12.一种包括一个或多个计算设备的系统,该一个或多个计算设备包括至少部分地由计算硬件实现的、被配置为实现如条款1-10中记载的方法中的任一种方法的步骤的组件。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1