多租户架构使Oracle 数据库能够充当多租户容器数据库 (CDB)。
CDB包括零个、一个或多个客户创建的可插拔数据库 (PDB)。PDB是模式、模式对象和非模式对象的可移植集合,在 Oracle Net 客户端中显示为非CDB。12c之后新功能。
非cd
b与cdb:
优点:
-
降低成本
通过将硬件和数据库基础设施整合到一组后台进程,并有效共享计算和内存资源,您可以降低硬件和维护成本。例如,一台服务器上的 100 个 PDB 共享一个数据库实例。
-
数据和代码的移动更轻松、更快速
根据设计,您可以快速将 PDB 插入到 CDB 中,从 CDB 中拔出 PDB,然后将此 PDB 插入到不同的 CDB 中。您还可以在 PDB 保持可用时对其进行克隆。您可以插入具有任何字符集的 PDB 并访问它,而无需进行字符集转换。如果CDB的字符集是AL32UTF8,则同一个CDB中可以存在不同数据库字符集的PDB。
-
更轻松地管理和监控物理数据库
可以通过对所有托管租户和 CDB 根执行单个操作(例如修补或执行 RMAN 备份)来管理整体环境。备份策略和灾难恢复得到简化。
-
数据和代码分离
尽管合并到单个物理数据库中,PDB 仍模仿非 CDB 的行为。例如,如果用户错误丢失了关键数据,那么 PDB 管理员可以使用 Oracle 闪回或时间点恢复来检索丢失的数据,而不会影响其他 PDB。
-
行政职责的安全分离
普通 可以连接到任何具有足够权限的容器,而 则仅限于特定的 PDB。管理员可以按如下方式划分职责:
-
管理员使用普通帐号来管理CDB或应用程序容器。由于权限包含在授予该权限的容器内,因此一个 PDB 上的本地用户不具有同一 CDB 中其他 PDB 的权限。
-
管理员使用本地帐户来管理单个 PDB。
-
-
易于性能调整
收集单个数据库的性能指标比收集多个数据库的性能指标更容易。调整一个 SGA 的大小比调整 100 个 SGA 的大小要容易。
-
更少的数据库补丁和升级
对一个数据库打补丁比对 100 个数据库打补丁要容易,升级一个数据库比升级 100 个数据库要容易。
使用dbca创建CDB:
创建pdb的几种方法:
使用 PDB$SEED 文件在 CDB 根目录中创建 PDB
--创建pdb
sql > CREATE PLUGGABLE DATABASE wypdb ADMIN USER wy IDENTIFIED BY wy ;
Pluggable database created.
--查看pdb
sql > show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WYCDB READ WRITE NO
4 WYPDB MOUNTED
--打开pdb
sql > alter pluggable database wypdb open ;
Pluggable database altered.
--查看pdb ,wypdb状态为read write
sql > show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WYCDB READ WRITE NO
4 WYPDB READ WRITE NO
克隆pdb:
sql > CREATE PLUGGABLE DATABASE wypdb2 FROM wypdb ;
Pluggable database created.
--查看pdb
sql > show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WYCDB READ WRITE NO
4 WYPDB READ WRITE NO
5 WYPDB2 MOUNTED
sql > alter pluggable database wypdb2 open ;
Pluggable database altered.
--wypdb2状态为read write
sql > show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WYCDB READ WRITE NO
4 WYPDB READ WRITE NO
5 WYPDB2 READ WRITE NO
可刷新pdb:
CREATE PLUGGABLE DATABASE wypdb_rf FROM testpdb@test_link REFRESH MODE EVERY 5 MINUTES;
通过非cdb环境创建pdb:
CREATE PLUGGABLE DATABASE pdb_rm FROM oradb@mydb_link
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
多租户环境常用语句:
--判断数据库是否为CDB
sql > SELECT CDB FROM V$DATABASE ;
CDB
---
YES
--查看当前容器
SELECT SYS_CONTEXT ( 'USERENV' , 'CON_NAME' ) FROM DUAL ;
SYS_CONTEXT ( 'USERENV' , 'CON_NAME' )
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CDB$ROOT
--查看CDB中每个容器的标识信息
sql > SELECT NAME , CON_ID , DBID , CON_UID , GUID FROM V$CONTAINERS ORDER BY CON_ID ;
NAME CON_ID DBID CON_UID GUID
-------- ---------- ---------- ---------- --------------------------------
CDB$ROOT 1 1677189295 1 86B637B62FDF7A65E053F706E80A27CA
PDB$SEED 2 3895022463 3895022463 06EDF68671E6813DE0631346A8C07D81
WYCDB 3 2480402145 2480402145 06EE0BF9A979EF8CE0631346A8C0DBED
WYPDB 4 2874969970 2874969970 07283B901AA41AA4E0631346A8C07F71
WYPDB2 5 3754183516 3754183516 07283B901AA71AA4E0631346A8C07F71
--查看状态信息
SELECT PDB_ID , PDB_NAME , STATUS FROM DBA_PDBS ORDER BY PDB_ID ;
PDB_ID PDB_NAME STATUS
---------- -------------------------------------------------------------------------------------------------------------------------------- ----------
2 PDB$SEED NORMAL
3 WYCDB NORMAL
4 WYPDB NORMAL
5 WYPDB2 NORMAL
--查看每个 PDB 的名称和打开模式
sql > SELECT NAME , OPEN_MODE , RESTRICTED , OPEN_TIME FROM V$PDBS ;
NAME OPEN_MODE RES OPEN_TIME
-------- ---------- --- ---------------------------------------------------------------------------
PDB$SEED READ ONLY NO 05 -OCT - 23 08.17.17.577 AM + 08 : 00
WYCDB READ WRITE NO 05 -OCT - 23 08.17.20.598 AM + 08 : 00
WYPDB READ WRITE NO 08 -OCT - 23 05.44.35.839 AM + 08 : 00
WYPDB2 READ WRITE NO 08 -OCT - 23 05.49.25.590 AM + 08 : 00
--显示多个 PDB 中的用户
> SELECT p .PDB_ID , p .PDB_NAME , u .USERNAME
FROM DBA_PDBS p , CDB_USERS u
WHERE p .PDB_ID > 2 AND
p .PDB_ID = u .CON_ID
ORDER BY p .PDB_ID ; 2 3 4 5
PDB_ID PDB_NAME
---------- --------------------------------------------------------------------------------------------------------------------------------
USERNAME
--------------------------------------------------------------------------------------------------------------------------------
3 WYCDB
SYS
3 WYCDB
ORDSYS
3 WYCDB
XS$NULL
3 WYCDB
LBACSYS
3 WYCDB
OUTLN
3 WYCDB
DBSNMP
--显示 CDB中每个PDB的数据文件
SELECT p .PDB_ID AS PID , p .PDB_NAME , d .FILE_ID , d .TABLESPACE_NAME , d .FILE_NAME
FROM DBA_PDBS p , CDB_DATA_FILES d
WHERE p .PDB_ID = d .CON_ID
ORDER BY p .PDB_ID ; 2 3 4
PID PDB_NAME FILE_ID TABLESPACE_NAME
---------- -------------------------------------------------------------------------------------------------------------------------------- ---------- ------------------------------
FILE_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3 WYCDB 9 SYSTEM
/u01/app/oracle/oradata/ORCL/06EE0BF9A979EF8CE0631346A8C0DBED/datafile/o1_mf_system_lkw04gbn_ .dbf
3 WYCDB 12 USERS
/u01/app/oracle/oradata/ORCL/06EE0BF9A979EF8CE0631346A8C0DBED/datafile/o1_mf_users_lkw04ndh_ .dbf
3 WYCDB 11 UNDOTBS1
/u01/app/oracle/oradata/ORCL/06EE0BF9A979EF8CE0631346A8C0DBED/datafile/o1_mf_undotbs1_lkw04gbr_ .dbf
3 WYCDB 10 SYSAUX
/u01/app/oracle/oradata/ORCL/06EE0BF9A979EF8CE0631346A8C0DBED/datafile/o1_mf_sysaux_lkw04gbr_ .dbf
4 WYPDB 13 SYSTEM
/u01/app/oracle/oradata/ORCL/07283B901AA41AA4E0631346A8C07F71/datafile/o1_mf_system_ll3n614m_ .dbf
4 WYPDB 14 SYSAUX
/u01/app/oracle/oradata/ORCL/07283B901AA41AA4E0631346A8C07F71/datafile/o1_mf_sysaux_ll3n614t_ .dbf
4 WYPDB 15 UNDOTBS1
/u01/app/oracle/oradata/ORCL/07283B901AA41AA4E0631346A8C07F71/datafile/o1_mf_undotbs1_ll3n614v_ .dbf
5 WYPDB2 16 SYSTEM
/u01/app/oracle/oradata/ORCL/07283B901AA71AA4E0631346A8C07F71/datafile/o1_mf_system_ll3nj1yy_ .dbf
5 WYPDB2 18 UNDOTBS1
/u01/app/oracle/oradata/ORCL/07283B901AA71AA4E0631346A8C07F71/datafile/o1_mf_undotbs1_ll3nj1z0_ .dbf
5 WYPDB2 17 SYSAUX
/u01/app/oracle/oradata/ORCL/07283B901AA71AA4E0631346A8C07F71/datafile/o1_mf_sysaux_ll3nj1yz_ .dbf
--显示 CDB 中的临时文件
sql > SELECT CON_ID , FILE_ID , TABLESPACE_NAME , FILE_NAME
FROM CDB_TEMP_FILES
ORDER BY CON_ID ;
CON_ID FILE_ID TABLESPACE_NAME FILE_NAME
------ ------- --------------- ---------------------------------------------
1 1 TEMP /u01/app/oracle/oradata/ORCL/datafile/o1_mf_t
emp_lkvzoq5y_ .tmp
3 3 TEMP /u01/app/oracle/oradata/ORCL/06EE0BF9A979EF8C
E0631346A8C0DBED/datafile/o1_mf_temp_lkw04gbs
_ .dbf
4 4 TEMP /u01/app/oracle/oradata/ORCL/07283B901AA41AA4
E0631346A8C07F71/datafile/o1_mf_temp_ll3n614v
_ .dbf
5 5 TEMP /u01/app/oracle/oradata/ORCL/07283B901AA71AA4
E0631346A8C07F71/datafile/o1_mf_temp_ll3nj1z1
_ .dbf
--查看 PDB 的历史记录
DB_NAME CON_ID PDB_NAME OPERATION OP_TIMESTA CLONED_FROM_PDB
---------- ------ --------------- ---------------- ---------- ---------------
SEEDDATA 3 PDB$SEED UNPLUG 2019 - 04 - 17
02 : 07 : 46
ORCL 3 WYCDB CREATE 2023 - 10 - 05 PDB$SEED
08 : 17 : 18
ORCL 3 PDB$SEED PLUG 2023 - 10 - 05 PDB$SEED
08 : 11 : 18
SEEDDATA 4 PDB$SEED UNPLUG 2019 - 04 - 17
02 : 07 : 46
ORCL 4 PDB$SEED PLUG 2023 - 10 - 05 PDB$SEED
08 : 11 : 18
ORCL 4 WYPDB CREATE 2023 - 10 - 08 PDB$SEED
05 : 42 : 24
SEEDDATA 5 PDB$SEED UNPLUG 2019 - 04 - 17
02 : 07 : 46
ORCL 5 WYPDB2 CLONE 2023 - 10 - 08 WYPDB
05 : 47 : 45
ORCL 5 WYPDB CREATE 2023 - 10 - 08 PDB$SEED
05 : 42 : 24
ORCL 5 PDB$SEED PLUG 2023 - 10 - 05 PDB$SEED
08 : 11 : 18