Oracle多租户架构:CDB和PDB的解析与实践

多租户概念:

多租户架构使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 管理员 可以通过对所有托管租户和 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





请使用浏览器的分享功能分享到微信等