基于版本: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 文件路径。

在多租户(容器)数据库中如何创建PDB:方法1 从种子创建PDB的更多相关文章

  1. oracle12之 多租户容器数据库架构

    解读: 这张幻灯片展示了三个被部署的应用程序的整合 三个不同的非cdbs成为一个单一的.幻灯片中的图形显示了一个多租户 容器数据库有四个容器:根和三个可插入的数据库.每一个 可插入数据库有它自己的专用 ...

  2. 使用JDBC从数据库中查询数据的方法

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...

  3. Ext.net中Combobox如何绑定数据库中的值-通用方法

    今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID=" /> </Items> ...

  4. 由浅入深讲解数据库中Synonym的使用方法

    1.Synonym的概念 Synonym(同义词)是SQL Server 2005的新特性.推出已经有几年的时间了.我们可以简单的理解Synonym为其他表的别名.本文中使用Northwind数据库为 ...

  5. 各个数据库中top 的表示方法

    Select Top在不同数据库中的使用用法: 1. Oracle数据库 SELECT * FROM TABLE1 WHERE ROWNUM<=N 2. Infomix数据库 SELECT FI ...

  6. 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

    package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...

  7. 数据库中substring的使用方法 CONVERT(varchar(12) , getdate(), 112 )

    Sqlserver中经常要操作一些时间类型的字段转换,我又不太记得住,所以搜集了以下的一些SqlserverConvertDateTime相关的资料发表在自己的小站里,方便自己以后要用的时候寻找,望对 ...

  8. php写入数据到mysql数据库中出现乱码解决方法

    乱码情况: 在选择数据库前加入一句代码即可 mysql_query("set names utf8"); 最后效果

  9. [EntityFramework]记录Linq中如何比较数据库中Timestamp列的方法(如大于0x00000000000007D1的记录)

    Timestamp对于EF实体的类型是byte[] class Program { static void Main(string[] args) { using (var context = new ...

随机推荐

  1. git签名设置

    作用:只区分不同开发人员的身份 一.项目级别/仓库级别:仅在当前本地库范围内有效 签名设置用户名(UserName)和邮箱(User@email),邮箱可以是任意邮箱(无效邮箱也可以) git con ...

  2. 电脑和手机上常用apk或Pc软件的重要目录或文件或文件夹路径

    常用apk或Pc软件的重要目录或文件或文件夹路径 01.hosts文件位置在哪里 C:\Windows\System32\drivers\etc 02.Windows7的锁屏壁纸目录在哪 C:\Win ...

  3. 42.Pycharm连接数据库出现错误:1045、1044:django.db.utils.OperationalError: (1045, "Access denied for user 'Whois'@'localhost' (using password: YES)”)

    1.在pycharm中设置好数据库的连接信息,连接数据库db01, DATABASES = { 'default': { # 指定所使用的的数据库引擎 'ENGINE': 'django.db.bac ...

  4. C++中用vector定义矩阵

    熟悉c风格的矩阵定义,那么用纯c++特性vector如何定义一个矩阵呢? # include<vector> # include <iostream> int main() { ...

  5. C#中调用Windows系统服务exe程序的工具类与重启服务的流程

    场景 使用C#编写的Windows服务程序,在Winform中进行调用. 常用工具类方法检测服务是否存在或者安装,获取服务状态,启动服务,停止服务的方法. 以在Winform中重启服务为例. 注: 博 ...

  6. 同一服务器下发布两个不同网站(war包)的方法(这里采用的是二级域名的方法)

    这里是在阿里云服务器的上部署 在本地测试好之后,打包,然后发到服务器上的tomcat的webapp目录上(这个可能会有个bug,先启动下服务器,然后关掉,再启动,那个war包对应的文件才会出来) 这里 ...

  7. Unsupervise-learning-notes

    K-means 数据是没有label的,按照数据之间的相似性进行分类 原理and步骤 是随机选取K个对象作为初始的聚类中心, 计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类 ...

  8. UVA10791-Minimum Sum LCM(唯一分解定理基本应用)

    原题:https://vjudge.net/problem/UVA-10791 基本思路:1.借助唯一分解定理分解数据.2.求和输出 知识点:1.筛法得素数 2.唯一分解定理模板代码 3.数论分析-唯 ...

  9. PAT (Basic Level) Practice (中文)1056 组合数的和 (15 分)

    给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则可以组合出:25.28.52.58.82.85 ...

  10. AI机器人最高等级

    AI机器人最高等级 题目描述 在小朱朱的游戏世界里,有n个AI机器人. 他们相互之间可以进行PK,胜方存活且升一级,负方直接淘汰. 高等级AI必定战胜低等级AI,同等级AI的PK结果必定一胜一负,且规 ...