Oracle 数据库架构—数据库与实例
数据库服务器是信息管理的关键 。
通常,服务器可靠地管理多用户环境中的大量数据,以便用户可以同时访问相同的数据。数据库服务器还可以防止未经授权的访问,并为故障恢复提供有效的解决方案。
数据库和实例
Oracle 数据库服务器由一个数据库和至少一个数据库实例组成,通常简称为一个实例。
因为实例和数据库的联系如此紧密,所以Oracle 数据库这个术语有时指的是实例和数据库。在最严格的意义上,这些术语具有以下含义:
数据库
数据库是位于磁盘上的一组文件,用于存储用户数据。这些数据文件可以独立于数据库实例而存在。从 Oracle Database 21c 开始,“数据库”特指多租户容器数据库 (CDB)、可插拔数据库 (PDB)或应用程序容器的数据文件。
数据库实例
实例是一组命名的内存结构,用于管理数据库文件。一个数据库实例由一个共享内存区域(称为系统全局区域 (SGA))和一组后台进程组成。实例可以独立于数据库文件而存在。
多租户架构
多租户架构使 Oracle 数据库成为 CDB。
每个 Oracle 数据库都必须包含或能够被另一个数据库包含。例如,CDB 包含 PDB,应用程序容器包含应用程序 PDB。PDB 包含在 CDB 或应用程序容器中,应用程序容器包含在 CDB 中。
从 Oracle Database 21c 开始,多租户容器数据库是唯一受支持的架构。在以前的版本中,Oracle 支持非容器数据库(非 CDB)。
CDBS
CDB 包含一个或多个用户创建的 PDB 和应用程序容器。
在物理级别,CDB 是一组文件:控制文件、在线重做日志文件和数据文件。数据库实例管理构成 CDB 的文件。
下图显示了一个 CDB 和一个关联的数据库实例。

PDB
PDB是模式、模式对象和非模式对象的可移植集合,在应用程序中显示为单独的数据库。
在物理级别,每个 PDB 都有自己的一组数据文件,用于存储 PDB 的数据。CDB 包括其中包含的 PDB 的所有数据文件,以及一组存储 CDB 本身元数据的系统数据文件。
要移动或归档 PDB,您可以拔下它。未插入的 PDB 由 PDB 数据文件和元数据文件组成。未插入的 PDB 在插入 CDB 之前无法使用。
下图显示了一个名为MYCDB.

从物理上讲,MYCDB它是一个 Oracle 数据库,在与实例关联的一组数据文件的意义上。MYCDB有一个数据库实例,尽管在 Oracle Real Application Clusters 中可能有多个实例,以及一组数据库文件。
MYCDB包含两个 PDB:hrpdb和salespdb. 如图 1-2 所示,这些 PDB 在它们各自的应用程序中表现为独立的数据库。应用程序不知道它是连接到 CDB 还是 PDB。
要管理 CDB 本身或其中的任何 PDB,您可以连接到CDB 根目录。根是所有 PDB 和应用程序容器所属的模式、模式对象和非模式对象的集合。
应用程序容器
应用程序容器是 CDB 中用户创建的可选容器,用于存储一个或多个应用程序的数据和元数据。
在这种情况下,应用程序(也称为主应用程序定义)是存储在应用程序根目录中的一组命名的、版本化的通用数据和元数据。例如,应用程序可能包括一组 PDB 共有的表、视图、用户帐户和 PL/SQL 包的定义。
在某些方面,应用程序容器在 CDB 中充当特定于应用程序的CDB。一个应用程序容器,就像 CDB 本身一样,可以包含多个应用程序 PDB,并使这些 PDB 能够共享元数据和数据。在物理级别,应用程序容器有自己的一组数据文件,就像 PDB 一样。
例如,SaaS 部署可以使用多个应用程序 PDB,每个 PDB 用于一个单独的客户,它们共享应用程序元数据和数据。比如下图中,sales_app就是应用根目录下的应用模型。命名的应用程序 PDBcust1_pdb仅包含客户 1 的销售数据,而命名的应用程序 PDBcust2_pdb仅包含客户 2 的销售数据。插入、拔出、克隆和其他 PDB 级别的操作可用于单个客户 PDB。

分片架构
Oracle Sharding 是一种基于跨多个 PDB 的数据水平分区的数据库扩展技术。 应用程序将 PDB 池视为单个逻辑数据库。
对 OLTP 应用程序进行分片的主要好处包括线性可扩展性、故障控制和地理数据分布。分片非常适合在 Oracle 云中部署。 与实现分片的 NoSQL 数据存储不同,Oracle Sharding 在不牺牲企业 RDBMS 功能的情况下提供分片的好处。
在分片架构中,每个CDB 都托管在具有自己本地资源的专用服务器上:CPU、内存、闪存或磁盘。 您可以将 PDB 指定为shard。 来自不同 CDB 的 PDB 分片组成一个逻辑数据库,称为分片数据库。 同一个 CDB 中的两个分片不能是同一个分片数据库的成员。但是,在同一个 CDB 中,一个 PDB 可以在一个分片数据库中,而另一个 PDB 可以在单独的分片数据库中。
水平分区涉及跨分片拆分数据库表,以便每个分片包含具有相同列但行的不同子集的表。以这种方式拆分的表也称为分片表。下图显示了一个跨三个分片水平分区的分片表,每个分片是一个单独的 CDB 中的 PDB。
跨分片的表水平分区

一个用例是跨多个 CDB 分发客户帐户数据。例如,ID 为 28459361 的客户可能会查找他的记录。下图显示了一种可能的架构。客户请求通过连接池路由,其中分片控制器(网络侦听器)将请求定向到适当的 PDB 分片,其中包含所有客户行。
图-Oracle分片架构、





