zoukankan      html  css  js  c++  java
  • 在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB

    基于版本:19c (12.2.0.3) AskScuti

    创建方法:从零开始创建一个PDB(从PDB$SEED创建新的PDB)

    对应路径:Creating a PDB --> Creating From Scratch

     在容器数据库CDB里面如何创建PDB,官方文档给出了一张创建PDB技术选项图,图片如下:

    内容总览

    1. 概述

    2. 使用位置子句创建

      2.1 FILE_NAME_CONVERT

      2.2 CREATE_FILE_DEST

    3. 不使用位置子句创建

      3.1 定义传统OMF参数

      3.2 定义新参数

    1. 概述

    使用种子(PDB$SEED)创建新的PDB,过程是把PDB$SEED中的数据文件复制到 CREATE PLUGGABLE DATABASE 语句中定义的目标目录中。如下图:

    整体过程为:

    1). 从 PDB$SEED 中复制数据文件

    2). 创建 SYSTEM 和 SYSAUX 表空间

    3). 创建新目标目录,并在根容器中记录元数据进行关联

    4). 创建临时表空间 TEMP

    5). 创建公共用户 SYS 和 SYSTEM

    6). 创建默认服务

    2. 使用位置子句创建

    所谓使用位置子句的意思就是:在创建的语句中直接指定目标目录

    2.1 FILE_NAME_CONVERT

    使用 FILE_NAME_CONVERT 参数,例如:

    SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb2
    
    SQL> create pluggable database pdb2 admin user henry identified by henry roles=(connect) file_name_convert=('/u01/app/oracle/oradata/CDB1/pdbseed','/u01/app/oracle/oradata/CDB1/pdb2');

    查看创建的PDB2

    SQL> show pdbs
    
        CON_ID CON_NAME  OPEN MODE  RESTRICTED
    ---------- --------- ---------- ----------
         2 PDB$SEED      READ ONLY  NO
         3 PDB1          MOUNTED
         4 PDB2          MOUNTED

    注意:语句中的 roles=(connect)是直接授予了该用户的 create session 系统权限,就是允许连接登陆(connect是角色权限,里面包含 create session 系统权限

    2.2 CREATE_FILE_DEST

    使用 CREATE_FILE_DEST 参数,例如:

    SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb3
    
    SQL> create pluggable database pdb3 admin user henry identified by henry roles=(connect) create_file_dest='/u01/app/oracle/oradata/CDB1/pdb3';

    查看创建的PDB3

    SQL> show pdbs
    
        CON_ID CON_NAME  OPEN MODE  RESTRICTED
    ---------- --------- ---------- ----------
         2 PDB$SEED      READ ONLY  NO
         3 PDB1          MOUNTED
         4 PDB2          MOUNTED
         5 PDB3          MOUNTED

    注意:仔细观察上面两个参数的使用。一个参数指定两个路径(种子路径,新路径),一个参数指定一个路径(新路径)。

    如果觉得在语句中指定路径有些麻烦,可以提前定义好相关OMF参数。OMF具体使用在后续博文中,发布后连接更新在此处。现在只需了解OMF(Oracle Managed Files) 就是自动管理文件路径名称和大小的,可以简化用户管理的一种机制。

    3. 不使用位置子句创建

    如果在创建PDB时不指定路径,则可以使用OMF提前定义好。

    3.1 定义传统OMF参数

    数据库有个传统的OMF参数:DB_CREATE_FILE_DEST

    SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb4
    
    SQL> show parameter db_create_file_dest;
    
    SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/CDB1/pdb4';
    
    System altered.
    
    SQL> create pluggable database pdb4 admin user henry identified by henry roles=(connect);
    
    Pluggable database created.

    查看创建的PDB4

    SQL> show pdbs
    
        CON_ID CON_NAME  OPEN MODE  RESTRICTED
    ---------- --------- ---------- ----------
         2 PDB$SEED      READ ONLY  NO
         3 PDB1          MOUNTED
         4 PDB2          MOUNTED
         5 PDB3          MOUNTED
         6 PDB4          MOUNTED
    
    SQL
    > select name from v$datafile where con_id=6; NAME -------------------------------------------------------------------------------- /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_system_gnz3rh9k_.dbf /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_sysaux_gnz3rh9m_.dbf /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5B9ECD51E0530E01A8C0E0DD/datafile /o1_mf_undotbs1_gnz3rh9n_.dbf

    注意:观察 db_create_file_dest 这个参数是如何管理PDB4文件的。另外,如果下次创建PDB,则需要继续改这个参数到新的路径下。

    3.2 定义新参数

    在12c中,引入了一个新的参数:PDB_FILE_NAME_CONVERT

    这个参数的使用其实和 2.1 小节很类似,只不过这个参数是提前定义好的(种子路径,新路径)。

    SQL> !mkdir /u01/app/oracle/oradata/CDB1/pdb5
    
    SQL> show parameter pdb_file_name_convert
    
    SQL> alter system set pdb_file_name_convert='/u01/app/oracle/oradata/CDB1/pdbseed','/u01/app/oracle/oradata/CDB1/pdb5';
    
    System altered.
    
    SQL> create pluggable database pdb5 admin user henry identified by henry roles=(connect);
    
    Pluggable database created.

    查看创建的PDB5

    SQL> show pdbs
    
        CON_ID CON_NAME  OPEN MODE  RESTRICTED
    ---------- --------- ---------- ----------
         2 PDB$SEED      READ ONLY  NO
         3 PDB1          MOUNTED
         4 PDB2          MOUNTED
         5 PDB3          MOUNTED
         6 PDB4          MOUNTED
         7 PDB5          MOUNTED
    
    SQL> select name from v$datafile where con_id=7;
    
    NAME
    --------------------------------------------------------------------------------
    /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
    /o1_mf_system_gnz44ft4_.dbf
    
    /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
    /o1_mf_sysaux_gnz44ft6_.dbf
    
    /u01/app/oracle/oradata/CDB1/pdb4/CDB1/8FCFFACD5BA0CD51E0530E01A8C0E0DD/datafile
    /o1_mf_undotbs1_gnz44ft7_.dbf

    注意:这里好像有个问题,仔细观察数据文件的路径,我们创建PDB5指定的 pdb_file_name_convert 这个参数好像没用上,路径依然使用的是我们创建PDB4时候的路径。原因是因为 OMF 这个参数 DB_CREATE_FILE_DEST 进行了全局指定,因此也了解到,当这两个参数同时定义的时候,使用的是 DB_CREATE_FILE_DEST。

    尝试取消DB_CREATE_FILE_DEST,创建PDB6。

    SQL> alter system set DB_CREATE_FILE_DEST='';
    
    System altered.
    
    SQL> create pluggable database pdb6 admin user henry identified by henry roles=(connect);
    
    Pluggable database created.

    查看创建的PDB6

    SQL> show pdbs
    
        CON_ID CON_NAME  OPEN MODE  RESTRICTED
    ---------- --------- ---------- ----------
         2 PDB$SEED      READ ONLY  NO
         3 PDB1          MOUNTED
         4 PDB2          MOUNTED
         5 PDB3          MOUNTED
         6 PDB4          MOUNTED
         7 PDB5          MOUNTED
         8 PDB6          MOUNTED
    
    SQL> select name from v$datafile where con_id=8;
    
    NAME
    -----------------------------------------------
    /u01/app/oracle/oradata/CDB1/pdb5/system01.dbf
    /u01/app/oracle/oradata/CDB1/pdb5/sysaux01.dbf
    /u01/app/oracle/oradata/CDB1/pdb5/undotbs01.dbf

    这时候,用上了我们创建的 pdb5 文件路径。

  • 相关阅读:
    新公司面试记
    棋手与棋子
    有线通or ADSL?
    好久没去上海动物园了
    15=60
    技术和销售
    安能辨龟是雄雌巴西龟的雌雄辨别方法
    推荐两首好歌
    母亲节祝福天下所有的母亲
    农夫山泉的源头千岛湖游记
  • 原文地址:https://www.cnblogs.com/askscuti/p/11334503.html
Copyright © 2011-2022 走看看