1.2
数据库和实例
Oracle
数据库服务器由一个数据库和至少一个数据库实例组成,通常简称为一个实例。
因为一个实例和一个数据库是如此紧密地联系在一起,所以
Oracle
数据库这个术语有时同时指实例和数据库。
最严格地说,这些术语有下列含义
:
l
数据库
数据库是一组位于磁盘上的文件,用于存储用户数据。
这些数据文件可以独立于数据库实例而存在。
从
Oracle
数据库
20c
开始,
“
数据库
”
特指多租户容器数据库
(CDB)
、可插拔数据库
(PDB)
或应用程序容器的数据文件。
l
实例
实例是一组命名的内存结构,用于管理数据库文件。
数据库实例由共享内存区域
(
称为系统全局区域
(SGA))
和一组后台进程组成。
实例可以独立于数据库文件而存在。
1.2.1
多租户架构
多租户体系结构使
Oracle
数据库成为
CDB
。
每个
Oracle
数据库必须包含或能够包含另一个数据库。
例如,
CDB
包含
pdb
,而应用程序容器包含应用程序
pdb
。
PDB
由
CDB
或应用程序容器包含,而应用程序容器由
CDB
包含。
从
Oracle Database 20c
开始,多租户容器数据库是唯一受支持的体系结构。
在以前的版本中,
Oracle
支持非容器数据库
(non-container databases, non-CDBs)
。
1.2.1.1
CDBs
一个
CDB
包含一个或多个用户创建的
pdb
和应用程序容器。
在物理级别上,
CDB
是一组文件
:
控制文件、在线重做日志文件和数据文件。
由数据库实例管理以上文件称为
CDB
。
下图显示了一个
CDB
和一个相关的数据库实例。
·
图
1-1
数据库实例与
CDB
1.2.1.2
PDBs
PDB
是
schemas
、
schema
对象和
nonschema
对象的可移动集合,在应用程序中作为单独的数据库出现。
在物理级别,每个
PDB
都有自己的一组数据文件,用于存储
PDB
的数据。
CDB
包括所有
pdb
数据文件,以及一组存储
CDB
本身元数据的系统数据文件。
要移动或存档
PDB
,可以拔掉它。
unplugged PDB
由
PDB
数据文件和元数据文件组成。
unplugged PDB
在插入到
CDB
之前是不可用的。
下图显示了一个名为
MYCDB
的
CDB
。
·
图
1-2 CDB
中的
PDBs
在物理上,
MYCDB
是一个
Oracle
数据库,即与一个实例关联的一组数据文件。
尽管在
Oracle Real
应用程序集群中可以有多个实例,但
MYCDB
只有一个数据库实例和一组数据库文件。
MYCDB
包含两个
pdb: hrpdb
和
salespdb
。
如图
1-2
所示,这些
pdb
在各自的应用程序中显示为单独的、独立的数据库。
应用程序不知道它是连接到
CDB
还是
PDB
。
要管理
CDB
本身或其中的任何
PDB
,您可以连接到
CDB root
。
root
是所有
pdb
和应用程序容器所属的模式、模式对象和非模式对象的集合。
·
1.2.1.3
应用程序容器
应用程序容器是
CDB
中一个可选的、用户创建的容器,用于存储一个或多个应用程序的数据和元数据。
application(
也称为主应用程序定义
)
是存储在
application root
中的一组已命名的、版本化的公共数据和元数据。
例如,
application
可能包括表、视图、用户帐户和
PL/SQL
包的定义,这些定义对于一组
pdb
是通用的。
在某些方面,应用程序容器充当
CDB
中的特定于应用程序的
CDB
。
与
CDB
本身一样,一个应用程序容器可以包含多个应用程序
pdb
,并允许这些
pdb
共享元数据和数据。
在物理级别上,应用程序容器
像
PDB
一样
,
具
有自己的一组数据文件。
例如,
SaaS
部署可以使用多个应用程序
pdb
,每个
pdb
用于一个单独的客户,该客户共享应用程序元数据和数据。
例如,在下面的图中,
sales_app
是应用程序根目录中的应用程序模型。
名为
cust1_pdb
的应用程序只包含客户
1
的销售数据,而名为
cust2_pdb
的应用程序只包含客户
2
的销售数据。
对于单个客户
PDBs
,可以进行插入、拨出、克隆和其他
pdb
级操作。
·
图
1-3 SaaS
用例
·
1.2.2
Sharding
架构
Oracle Sharding
是一种基于跨多个
pdb
的数据水平分区的数据库扩展技术。
应用程序将
PDBs
池视为单个逻辑数据库。
sharding
对于
OLTP
应用程序的主要好处包括线性可伸缩性、故障包容和地理数据分布。
sharding
非常适合在
Oracle
云中部署。
与实现
sharding
的
NoSQL
数据存储不同,
Oracle
sharding
提供了
sharding
的优点,同时又不牺牲企业
RDBMS
的功能。
在
sharding
架构中,每个
CDB
都托管在一个专用服务器上,服务器上有自己的本地资源
:CPU
、内存、
flash
或磁盘。
可以将
PDB
指定为
shard
。
来自不同
cdb
的
PDB
shard
组成一个逻辑数据库,称为
sharded
数据库。
同一个
CDB
中的两个
shard
不能是同一个
sharded
数据库的成员。
但是,在同一个
CDB
中,一个
PDB
可以在一个
sharded
数据库中,另一个
PDB
可以在一个单独的
sharded
数据库中。
水平分区将一个数据库表拆分,每个分片包含具有相同列但不同行的子集。
以这种方式分割的表也称为
sharded table
。
下图显示了一个经过水平分割的
sharded table
,它横跨三个
shards
,每个
shard
都是单独
CDB
中的
PDB
。
图
1-4
水平分区的
sharded table
以下示例是跨多个
CDBs
存储客户帐户数据。
例如,
ID
为
28459361
的客户可以查询他的记录。
下图显示了一种可能的结构。
客户请求通过连接池路由,其中分片控制器
(
网络监听器
)
将请求定向到适当的
PDB
分片,该分片包含所有客户行。
Figure 1-5 Oracle Sharding Architecture