• Oracle 19c 可插拔数据库PDB的创建方式


    多租户容器数据库架构图总览

    多租户容器数据库组成部分

    1.有且仅有一个CDB Root(CDB$ROOT),它包含了Root和所有PDB数据库的元数据和数据字典信息。

    2.有且仅有一个Seed PDB(PDB$SEED),它的作用是创建其他PDB的模板,它是只读库,不能做任何修改。

    3.0个或多个应用程序容器Application Container,每个Application Container包含一个Application Root,以及插在这个root上的Application PDBs,Application Root属于CDB Root。

    4.0个或多个用户创建的PDB,每个PDB和12c之前的普通数据功能基本一样,在CDB创建之初,是没有PDB的,PDB根据用户业务需求后创建。

    5.0个或1个Application Seed,它是应用程序容器里面用来创建Application PDBs的模板,是可选的,如果没有,则Application PDBs可以以第2条的PDB$SEED为模板创建。

    创建PDB的几种方式总览

    技术方式描述
    Create a PDB from scratch通过pdb seed或者application seed作为模版创建

    Clone an existing PDB or non-CDB

    通过源pdb或者源non-cdb克隆。

    源数据库可以是本地/远程cdb里面的普通pdb

    或者本地/远程cdb里application container里面的application pdb

    或者是non-cdb

    Relocate a PDB to a different

    CDB

    从一个cdb里面搬迁pdb到另外一个cdb

    Plug an unplugged PDB into a

    CDB

    通过源pdb的元数据xml文件来把pdb插入现有cdb

    Reference a PDB as a proxy PDB

    通过本地/远程cdb里面的普通pdb

    或者本地/远程cdb里application container里面的application pdb来创建一个代理pdb

    一、 通过种子PDB创建标准PDB(Create a PDB from scratch)

    或者

    需注意的几点:

    1.注意当前是在cdb root还是application root,如果是cdb root,创建的就是标准pdb,如果在application root下,创建的是application pdb。

    2.通过命令CREATE PLUGGABLE DATABASE创建,并指定本地pdb管理员账户,如果还需要其他子句可以添加,pdb刚创建完成后是mount模式,要打开到read write模式,默认会创建一个和pdb同名的服务,注意在网络配置文件中配置好以供客户端正常访问。

    操作命令:

    1. CREATE PLUGGABLE DATABASE salespdb
    2. ADMIN USER salesadm
    3. IDENTIFIED BY password
    4. STORAGE (MAXSIZE 2G)
    5. DEFAULT TABLESPACE sales
    6. DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
    7. PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
    8. FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/','/disk1/oracle/dbs/salespdb/');

     需注意pdbseed的大小写。

    二、通过本地PDB复制新的PDB

    或者:

    需满足的前提条件:

    1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
    2. 源PDB不能关闭。
    3. 如果CDB不是local undo 模式,源PDB得处于open read only模式。如果CDB是local undo,源PDB没有这个限制,如下查询是否是local undo 模式:
      1. SYS@PRODCDB>SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'LOCAL_UNDO_ENABLED';
      2. PROPERTY_NAME PROPERTY_VALUE
      3. -------------------- --------------------
      4. LOCAL_UNDO_ENABLED TRUE
    4. 如果CDB不是归档模式,源PDB得处于open read only模式。如果CDB是归档模式,源PDB没有这个限制,如下查询是否是归档模式:

            SYS@PRODCDB>archive log list;
            Database log mode           No Archive Mode
            Automatic archival           Disabled

          5.如果创建的是application pdb,需要和application container保持一样的字符集

    操作命令: 

    以通过PDBPROD1复制一个PDBPROD3为例,因为实验库没开归档,需要源pdb read only,创建完后确保两个库都是打开状态

    1. SYS@PRODCDB>show pdbs;
    2. CON_ID CON_NAME OPEN MODE RESTRICTED
    3. ---------- ------------------------------ ---------- ----------
    4. 2 PDB$SEED READ ONLY NO
    5. 3 PDBPROD1 READ WRITE NO
    6. SYS@PRODCDB>alter pluggable database PDBPROD1 close;
    7. Pluggable database altered.
    8. SYS@PRODCDB>alter pluggable database PDBPROD1 open read only;
    9. Pluggable database altered.
    10. SYS@PRODCDB>create pluggable database PDBPROD3 FROM PDBPROD1 FILE_NAME_CONVERT=('PDBPROD1','PDBPROD3');
    11. Pluggable database created.
    12. SYS@PRODCDB>alter pluggable database PDBPROD1 close;
    13. Pluggable database altered.
    14. SYS@PRODCDB>show pdbs;
    15. CON_ID CON_NAME OPEN MODE RESTRICTED
    16. ---------- ------------------------------ ---------- ----------
    17. 2 PDB$SEED READ ONLY NO
    18. 3 PDBPROD1 MOUNTED
    19. 6 PDBPROD3 MOUNTED
    20. SYS@PRODCDB>alter pluggable database all open;
    21. Pluggable database altered.
    22. SYS@PRODCDB>show pdbs;
    23. CON_ID CON_NAME OPEN MODE RESTRICTED
    24. ---------- ------------------------------ ---------- ----------
    25. 2 PDB$SEED READ ONLY NO
    26. 3 PDBPROD1 READ WRITE NO
    27. 6 PDBPROD3 READ WRITE NO

    可根据业务情况选择是否加其他子句: PATH_PREFIX 、STORAGE、 NO DATA等。

    三、通过远程PDB复制新的PDB

    需满足的前提条件:

    1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
    2. 源数据库安装平台和目标数据库安装平台须具有同样的字节序endianness,源库安装选项必须和目标库安装选项相同或者是目标库的子集。
    3. 如果创建的是application pdb,源pdb的应用程序名称和版本须和目标application container的程序名称和版本保持一致。
    4. 如果目标CDB字符集不是AL32UTF8,则需要和源CDB兼容,且目标CDB所有application pdb需要和application container保持一样的字符集,如果CDB字符集是AL32UTF8,则没有要求。
    5. 源库不能关闭。
    6. 如果目标CDB不是local undo 模式,源PDB得处于open read only模式。
    7. 如果目标CDB不是归档模式,源PDB得处于open read only模式。
    8. 如果创建的是refreshable pdb,则源pdb得处于归档和local undo模式。
    9. 创建的database link连接用户须具有CREATE PLUGGABLE DATABASE和sysoper权限。

    操作命令: 

    CREATE PLUGGABLE DATABASE pdb2 FROM pdb1@pdb1_link;

    四、通过19c非容器数据库复制新的PDB

    需满足的前提条件:

    1. 用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
    2. 源数据库安装平台和目标数据库安装平台须具有同样的字节序endianness,源库安装选项必须和目标库安装选项相同或者是目标库的子集。
    3. 两边版本要在12.1.0.2及以上,且版本要一致。
    4. 新建的PDB数据块大小要和cdb保持一致。
    5. 如果non-cdb不是归档模式,要打开为read only。
    6. 字符集和dblink要求同上。

    操作命令: 

    1. CREATE PLUGGABLE DATABASE pdb2 FROM mydb@mydb_link; --mydb是non-cdb的名字
    2. CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link;--用NON$CDB代替。
    3. 执行后在打开新建的pdb之前需要执行转换脚本 :ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

    五、通过relocate迁移PDB

    从一个CDB Root到另一个CDB Root

    或从一个Application Root 到另一个Application Root

    通过dblink复制源pdb的数据块,undo块,redo块到新的位置,是一种几乎没有downtime的数据库迁移方式,不需要更改网络连接串等,新库打开后,源库就会自动删除。

    需满足的前提条件:

    1.源库处于local undo模式。

    2.目标CDB如果不是归档模式,需要处于read only状态。

    3.用户,dblink,字符集的前提条件同上。

    操作命令: 

    CREATE PLUGGABLE DATABASE ... FROM src_pdb_name@link2src... RELOCATE AVAILABILITY [MAX | NORMAL]

    使用AVAILABILITY NORMAL(默认),源和目标共享同一个LISTENER。


    六、通过XML元数据文件或者.pdb压缩归档文件导入非插入PDB

    在CDB Root创建PDB

    在application root创建pdb:

    源库不能比新库版本更高,当用.pdb的归档文件创建时,不必指定源数据库的文件地址,当用XML的文件创建时,需指定SOURCE_FILE_NAME_CONVERT或 SOURCE_FILE_DIRECTORY

    操作命令:

    1. CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/salespdb.xml' SOURCE_FILE_NAME_CONVERT = ('/disk1/oracle/sales/', '/disk2/oracle/sales/') NOCOPY STORAGE (MAXSIZE 2G) TEMPFILE REUSE;
    2. 用.pdb文件:
    3. CREATE PLUGGABLE DATABASE salespdb USING '/disk1/usr/sales.pdb' STORAGE (MAXSIZE 2G);

    七、代理PDB

    在CDB Root创建代理PDB

    在Application Container创建代理PDB

    代理PDB实现的是像访问本地CDB中的PDB一样访问远程的PDB,只复制源PDB的 SYSTEM 和 SYSAUX 表空间。

    需满足的前提条件:

    1.用户得在根容器数据库和源PDB数据库中有CREATE PLUGGABLE DATABASE的系统权限。
    2.本地CDB必须为归档模式和LOCAL UNDO模式。
    3.创建Proxy PDB时,远程PDB必须为OPEN READ/WRITE 模式。

    操作命令:

    CREATE PLUGGABLE DATABASE pdb1 AS PROXY FROM pdb1@pdb1_link;

  • 相关阅读:
    apache commons-dbcp Apache Commons DBCP 软件实现数据库连接池 commons-dbcp2
    原码、反码、补码(8位二进制数)
    python之元组相关知识
    最新最管用的nvm安装步骤及nvm报443超时解决方案
    喜报!第四期21位学员通过研发效能(DevOps)工程师认证考试,全员通过,恭喜!
    项目管理工具dhtmlxGantt入门教程(二):如何初始化dhtmlxGantt(上)
    聚星文社怎么下载聚星文社ai工具安装教程
    spark(HA)集群安装
    移动通信网络规划:无线设备参数
    HiveQL
  • 原文地址:https://blog.csdn.net/u010184335/article/details/134171006