Oracle® Multitenant
Administrator’s Guide
Part I Multitenant Architecture
2 Overview of the Multitenant Architecture
2.1 Overview of Containers in a CDB
2.2 Overview of Commonality in the CDB
2.3 Overview of Applications in an Application Container
2.4 Overview of Services in a CDB
2.5 Overview of Tablespaces and Database Files in a CDB
2.6 Overview of Availability in a CDB
2.7 Overview of Oracle Resource Manager in a CDB
Part I
多租户体系结构概述
本章描述了多租户体系结构中最重要的组件。
2.4
CDB
中服务的概述
客户端必须使用services
连接到PDBs
或application roots
。
使用service name
的连接在PDB
或应用程序root
中启动新会话。前台进程和会话在其生命周期的每个时刻都有一个惟一定义的当前容器。
下面的图形显示了使用两个不同的侦听器连接到PDBs
的两个客户机。
2.4.1 CDB
中的
Service
创建
当您执行CREATE PLUGGABLE DATABASE
语句来创建PDB
时,数据库会自动在CDB
内创建并启动一个service
。
默认service
具有一个属性,该属性将PDB
标识为service
的初始当前容器。该属性显示在DBA_SERVICES.PDB
列中。
2.4.1.1 CDB
的默认
Services
默认service
与PDB
同名。PDB
名称必须是有效的服务名称,在CDB
中必须是唯一的。
创建应用程序容器(需要指定AS application container
子句)时,Oracle
数据库会自动为应用程序root
创建新的默认服务。服务与应用程序容器同名。必须正确配置Oracle Net
服务,客户端才能访问此服务。类似地,每个应用程序PDB
都有自己的默认服务名,应用程序种子PDB
也有自己的默认服务名。
示例2-17
使用默认服务切换到PDB
此示例使用与PDB
同名的默认服务切换到PDB
名称salespdb
:
ALTER
SESSION
SET
CONTAINER
=
salespdb
;
2.4.1.2 CDB
的非默认服务
您可以为每个PDB
创建附加服务,每个CDB
最多10000
个。每个附加服务都将其PDB
表示为初始的当前容器。
在图2-9
中,存在用于erppdb
和hrpdb
的非默认服务。例如,在图2-9
中,名为hrpdb
的PDB
有一个名为hrpdb
的默认服务。无法删除默认服务。
当您使用ALTER SESSION SET container
切换到容器时,会话将使用容器的默认服务。或者,可以通过指定service=service_name
为容器使用其他服务,其中service_name
是服务的名称。您可能希望使用特定的服务,以便会话可以利用其服务属性和功能,例如服务度量、负载平衡、资源管理器设置等。
例2-18
使用非默认服务切换到PDB
在本例中,hrpdb
的缺省服务不支持所有服务属性和特性,如服务指标、FAN
、负载平衡、Oracle
数据库资源管理器、事务保护、应用程序连续性等。你切换到一个非默认的服务如下:
ALTER
SESSION
SET
CONTAINER
=
hrpdb SERVICE
=
hrpdb_full
;
2.4.2
连接
CDB
中的容器
通常,CDB
管理员必须具有提供pdb
和连接各种容器的适当权限。CDB
管理员是公共用户。
CDB
管理员可以使用以下任何一种技术:
•直接连接到PDB
或应用程序root
。
用户需要容器中的CREATE SESSION
特权。
•使用ALTER SESSION SET CONTAINER
语句在容器之间切换,这对于连接池和高级CDB
管理都很有用。语法是ALTER SESSION SET CONTAINER = container_name [SERVICE = service_name]
。
例如,CDB
管理员可以在一个会话中连接到root
,然后在同一个会话中切换到PDB
。在这种情况下,用户需要容器中的SET
容器系统特权。
下表描述了图2-9
中涉及CDB
的场景。每行描述在前一行的操作之后发生的操作。公共用户系统查询当前容器的名称和CDB
中PDBs
的名称。
Table 2-8 Services in a CDB
操作:
SQL
>
CONNECT
SYSTEM
@
prod
Enter
password
:
********
Connected.
描述:
CDB
中所有容器都使用的SYSTEM
用户使用名为prod
的服务连接到root
。
操作:
SQL
>
SHOW
CON_NAME
CON_NAME
--------
CDB$ROOT
描述:
系统使用SQL*Plus
命令SHOW CON_NAME
列出用户当前连接到的容器的名称。
CDB$ROOT
是根容器的名称。
操作:
SQL
>
SELECT
NAME
,
PDB
FROM
V$SERVICES
ORDER
BY
PDB
,
NAME
;
NAME
PDB
---------------------- --------
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
prod.example.com CDB$ROOT
erppdb.example.com ERPPDB
erp.example.com ERPPDB
hr.example.com HRPDB
hrpdb.example.com HRPDB
salespdb.example.com SALESPDB
8
rows
selected.
描述:
对V$SERVICES
的查询显示,存在三个PDB
,其服务名称与PDB
名称匹配。hrpdb
和erppdb
都有附加服务。
操作:
SQL
>
ALTER
SESSION
SET
CONTAINER
=
hrpdb
;
Session
altered.
描述:
系统使用ALTER SESSION
连接到hrpdb
。
操作:
SQL
>
SELECT
SYS_CONTEXT
(
'USERENV'
,
'CON_NAME'
)
AS
CUR_CONTAINER
FROM
DUAL
;
CUR_CONTAINER
-------------
HRPDB
描述:
查询确认当前容器现在是hrpdb
。
欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!