zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle Database 12C 学习之多租户(连载一)

DatabaseOracle学习 连载 12C 租户 之多
2023-09-11 14:16:10 时间

关于可插拔数据库,或者叫做多租户环境这一部分的内容,在oracle 12c的官方文档Database Administrators Guide中,其第六部分即为多租户环境管理。

从第36到第46章,一共用了11章的内容来详细介绍其内容和相关操作实验。链接如下:

https://docs.oracle.com/database/121/ADMIN/toc.htm

另外,在oracle官方网站上,也有关于多租户的白皮书,链接如下:

http://www.oracle.com/technetwork/database/multitenant/overview/index.html

可见,这一部分的内容,可以算得上是12c中最重要的新特性之一了,甚至几乎木有之一。因此,这块的内容,我把它作为Oracle Database 12C 学习系列的最后一部分内容,算作压轴了吧。当然,12c新特性细节太多,比如说em12c等等,后面我们会继续深入研究。

这一系列的内容,以多租户白皮书为主,参考12c官方文档中的管理员手册,以及Darl Kuhn的《深入理解Oracle 12c 数据库管理》第2版,同时再间以查阅网上诸多的文章整理而成。当然,中间会有不少实验。数据库版本为12.1.0.2,os为rhel6.4 64位。

Oracle Multitenant(多租户)为oracle数据库12c企业版中的一个新特性,它可以通过简化集成、配置以及升级等多方面的工作来帮助用户降低IT成本。该架构允许使用一个容器数据库(container database)来管理多个可插拔数据。同时还照旧支持oracle的其他功能,比如说RAC,或者ADG等。一个现有的数据库,可以经过简单的调整,就能够成为一个可插拔数据库。并且不需要对连接到该数据库上的应用程序做任何改动。

使用该架构,可以有如下好处:

1,高整合密度。

连接在一个容器数据库上的多个可插拔数据库能够共享内存及后台进程。从而可以让你在单一平台上管理并维护多个数据库。

2,使用SQL实现快速配置与克隆

一个可插拔数据库能够被从一个容器数据库上拔出,然后插到另外一个容器数据库上。当然,你还可以克隆这个可插拔数据库。这些操作都可以通过sql完成,并且只需要数秒钟就可以搞定。

3,快速打补丁及升级

给一个容器数据库打补丁,可以让该补丁在所有连接到该容器数据库的可插拔数据库上生效。如果只想给一个可插拔数据库打补丁,你只需要将其拔出即可。

4,像管理一个数据库那样来管理多个数据库

通过将现有的多个数据库整合到一起,我们管理这些数据库的时候,就像是在管理一个数据库。比如,备份操作和灾难恢复等可以在容器数据库级别完成。

5,可插拔数据库之间的动态资源管理

12c中,资源管理器(Resource Manager)可以在一个容器数据库中的多个可插拔数据库之间动态管理资源分配。

在多租户架构中,将会有如下三个组成部分:

1,ROOT

一个名为CDB$ROOT的根容器。该容器包含有主数据字典视图,内容为与根容器有关的元数据和所有插在其上的可插拔数据库的信息。

2,Seed

一个名为PDB$SEED的种子容器。用来提供数据文件和元数据模板,从而创建新的可插拔数据库。

3,PDBs

0个,1个或者多个可插拔数据库。(12.1中,最多可以到252个)。每个可插拔数据库都是独立的,功能与非CBD数据库一样。每个可插拔数据库都会有自己的数据文件和对象。当用户连接到可插拔数据库时,不会感觉到CDB中的根容器和其他可插拔数据库的存在。也就是物理集中,逻辑隔离。

例如我们当前的实验环境:

SYS@ora12c show pdbs;


--当前操作的数据库为根容器数据库。

基于这种多租户的环境,oracle从12c开始引入了CDB级别的数据字典。也就是说,在原有的DBA_,ALL_,USER_级别的数据字典之上,又新添加了一个级别。CDB级别的视图,含有CDB中所有容器(根,种子,以及所有可插拔数据库)的信息。例如,CDB_USERS。

解释:

1,连接到CDB,实际上就是连接到CDB$ROOT。根容器主要作用,就是容纳所有相关PDB的元数据。

2,可以使用sys用户访问根容器,跟访问非CDB数据库一样。

3,种子容器只是用于创建可插拔数据库。你可以连接种子容器,但是其本身是read only的。你不能使用它执行任何事务。

4,可插拔数据库需要使用独立的命名空间。在CDB中,每个可插拔数据库都必须拥有唯一的名称。但是在可插拔数据库内部,可以使用非CDB数据库的命名规则。比如,在某一个可插拔数据库中,表空间和用户必须拥有唯一的名称。

5,每个可插拔数据库都拥有自己的system以及sysaux,以及临时表空间。

6,如果某一个可插拔数据库没有自己的临时表空间,可以使用根容器的temp文件。

7,每个可插拔数据库都有自己的DBA/ALL/USER视图。

8,在CDB中定义的字符集也可应用于它含有的所有的PDB。

9,可以为CDB和所有PDB设置统一的时区时间,也可以为每个PDB单独设置。

10,使用sys连接根容器后,可以启动和停止CDB,也可以操作任意PDB。但是连接到某一PDB之后,就只能操作该PDB。

11,在启动时实例会读取初始化参数文件。使用特权用户连接到根容器可以修改所有初始化参数。连接到某一可插拔数据库之后,则只能修改该数据库的参数。v$parameter视图新添加了ispdb_modifiable列,用于指定当特权用户连接到可插拔数据库时可以修改的参数。

12,应用程序只能通过网络连接数据库。所以,如果想连接到某一可插拔数据库,则监听也需要处理与该可插拔数据库相关的服务。

13,单个可插拔数据库不能单独启动和停止。更确切点说,可插拔数据库只有打开和关闭两种状态。

14,CDB有一组控制文件,当特权用户连接到根容器时,可以管理这些控制文件。

15,CDB有一个UNDO表空间,所有可插拔数据库都使用同一个UNDO表空间。

16,只有使用特权用户连接到根容器时,才能够进行启用归档和切换日志操作。

17,CDB有一个告警日志和一组跟踪文件,所有的PDB都会写入同一个告警日志。

18,每个容器都有自己唯一的ID。根容器为1,种子容器为2,其他PDB以此类推。

19,如果设置闪回区的话,则无法在闪回区中为单个PDB创建目录。闪回区中存储的是CDB的备份文件,控制文件以及联机日志。不会将PDB分别存储到不同的目录中。

20,连接到根容器上,可以启用和禁用闪回,但是无法启用可插拔数据库级别的闪回。

21,AWR,ADDH,ASH报告可以反映CDB中所有PDB的信息。

22,v$sql以及v$sqlarea都包含有con_id列,可以用来查看某一PDB的信息。


本文来自云栖社区合作伙伴“DBGEEK”


界面1:Configure Security Updates 取消选择“I wish to receive security updates via My Oracle Support”, 点击“next” 弹出的提示框选择“Yes” 界面2:Installation Option ...