如下是12c多租户的体系结构简图:
关于这张图的解释:
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的信息。