博客
关于我
Oracle12C 新特性 —— CDB & PDB
阅读量:539 次
发布时间:2019-03-09

本文共 7528 字,大约阅读时间需要 25 分钟。

CDB 和 PDB关系介绍

 Oracle 12C引入了CDB与PDB的新特性。

 在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个 CDB(Container Database:数据库容器) 承载多个 PDB(Pluggable Database:可插拔数据库 )。

 在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。但ORACLE 12C,实例与数据库可以是一对多的关系。

 下面是官方文档中 CDB 与 PDB 的关系图:

在这里插入图片描述
 在12.2版本中,Oracle对多租户功能进行了增强,在CDB Root 容器中可以创建一个叫做Application Root 的容器,可在其内创建多个依赖于 Application root 的 Application PDBs,架构图如下:
在这里插入图片描述
CDB包含如下组件:

  • ROOT组件

     ROOT又叫 CDB$ROOT , 存储着 ORACLE 提供的元数据和 Common User ,元数据的一个例子是ORACLE 提供的 PL/SQL 包的源代码,Common User 是指在每个容器中都存在的用户。

  • SEED组件

     Seed 又叫 PDB$SEED,这个是你创建 PDBS 数据库的模板,你不能在 Seed 中添加或修改一个对象。一个 CDB 中有且只能有一个 Seed 。 类似于 SQL Server 中的model数据库。

  • PDBs

     CDB 中可以有一个或多个 PDBs,PDBs 向后兼容,可以像以前在数据库中那样操作 PDBs,这里指大多数常规操作。

 这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个 PDB 是一个容器。每个容器在 CDB 中都有一个独一无二的的 ID 和名称。

 CDB 相当于操作系统,调用并管理各个 PDB。PDB 相当于真正提供业务需求的数据库实例。

 oracle 12C 安装后只创建了 CDB,需要自己生成相应的 PDB。oracle 12C 使用了CDB-PDB架构,类似于Docker,在 CDB 内可以加载多个 PDB 。我们平时的数据库操作大多和 PDB 相关 。

 其实 CDB-PDB 架构和 SQL Server 的单实例多数据库架构有些类似。可以把 PDB$SEED 类比成master、msdb 等系统数据库,PDBs 可类比成用户自己创建的数据库。并且 PDB 可插拔的概念与 SQL Server 中用户数据库的分离、附加也有相似支持。

 Oracle Database 12.1 版本安装的时候会默认安装一个名称为 pdborcl 的实例(Oracle Database 12.2 版本默认名是orclpdb),具体安装本文不做赘述 。

在这里插入图片描述

图 Oracle 12.1 默认安装实例 pdborcl

12C 数据库常用操作

1)连接到CDB数据库

连接到CDB数据库容器非常简单,跟之前版本连接数据库是一样的

  • $ sqlplus / as sysdba
$ sqlplus / as sysdba   //默认情况下使用sqlplus / as sysdba 登录连接的是CDBSQL*Plus: Release 12.1.0.2.0 Production on Sun Feb 7 19:36:53 2021Copyright (c) 1982, 2014, Oracle.  All rights reserved.Connected to:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit ProductionWith the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

2)查看数据库是否为CDB

  • SQL> select name, decode(cdb, ‘YES’, ‘Multitenant Option enabled’, 'Regular 12c Database: ') “Multitenant Option” , open_mode, con_id from v$database;
  • SQL> select name, decode(cdb, ‘NO’, ‘Multitenant Option enabled’, 'Regular 12c Database: ') “Multitenant Option” , open_mode, con_id from v$database;

说明:YES表示该数据库是 CDB ,如果是 NO 表示是 NO-CDB (普通数据库)

例:

SQL> select name, decode(cdb, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option" , open_mode, con_id from v$database;NAME      Multitenant Option         OPEN_MODE                CON_ID--------- -------------------------- -------------------- ----------STUDY     Multitenant Option enabled READ WRITE                    0
SQL>  select name, decode(cdb, 'NO', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option" , open_mode, con_id from v$database;NAME      Multitenant Option         OPEN_MODE                CON_ID--------- -------------------------- -------------------- ----------STUDY     Regular 12c Database:      READ WRITE                    0

3)查看当前容器(Container)

  • SQL> show con_name
  • SQL> select sys_context(‘userenv’, ‘con_name’) “Container DB” from dual;

例:

SQL> show con_nameCON_NAME------------------------------CDB$ROOT

SQL> select sys_context('userenv', 'con_name') "Container DB" from dual;Container DB--------------------------------------------------------------------------------CDB$ROOT

4)查看CDB容器中的PDBs信息(在CDB模式下)

  • SQL> show pdbs
  • SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;

例:

SQL> show pdbs    CON_ID CON_NAME                       OPEN MODE  RESTRICTED---------- ------------------------------ ---------- ----------         2 PDB$SEED                       READ ONLY  NO         3 PDBORCL                        READ WRITE NO

SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    CON_ID    DBID          GUID                         NAME       OPEN_MODE---------- ---------- --------------------------------------------------------     2     3012372808 BABBD7C6CEFE76EEE055E3D5AC69F4C3  PDB$SEED    READ ONLY     3     1862374014 BABBF75EF6217B0EE055E3D5AC69F4C3  PDBORCL     READ WRITE

5)在容器间切换

说明:使用这个命令需要的sysdba级别的权限

  • SQL> alter session set container=容器名;

例:

SQL> show con_name; //查看当前容器CON_NAME------------------------------CDB$ROOTSQL> alter session set container=PDBORCL; //切换至 PDB 容器 PDBORCLSession altered.SQL> show con_name;CON_NAME------------------------------PDBORCLSQL> alter session set container=CDB$ROOT; //切换至 CDB 容器 CDB$ROOTSession altered.SQL> show con_name;CON_NAME------------------------------CDB$ROOT

6)启动/关闭 PDB

  • SQL> alter pluggable database PDB_NAME open; //开启指定 PDB
  • SQL> alter pluggable database all open; //开启所有 PDB
  • SQL> alter session set container=PDB_NAME; //切换到 PDB 后开启数据库
    SQL> startup
  • SQL> alter pluggable database PDB_NAME close; //关闭指定的PDB
  • SQL> alter pluggable database all close; //关闭所有PDB
  • SQL> alter session set container=PDB_NAME; //切换到 PDB 后关闭数据库
    SQL> shutdown immediate

补充:启动或者关闭多个 PDB,指定的名称为一个以逗号分隔的列表。

例:

SQL> alter session set container=PDBORCL;SQL> shutdown immediate  //关闭PDBPluggable Database closed.SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    CON_ID DBID    GUID                               NAME    OPEN_MODE---------- ---------- -------------------------------------------------      3 1862374014 BABBF75EF6217B0EE055E3D5AC69F4C3  PDBORCL  MOUNTEDSQL> startup   //启动PDBPluggable Database opened.SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    CON_ID DBID    GUID                               NAME    OPEN_MODE---------- ---------- -------------------------------------------------      3 1862374014 BABBF75EF6217B0EE055E3D5AC69F4C3  PDBORCL  READ WRITE

SQL> alter pluggable database PDBORCL close; //关闭PDBPluggable database altered.SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    CON_ID DBID    GUID                               NAME    OPEN_MODE---------- ---------- -------------------------------------------------      3 1862374014 BABBF75EF6217B0EE055E3D5AC69F4C3  PDBORCL  MOUNTEDSQL>  alter pluggable database PDBORCL open; //启动PDBPluggable database altered.SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    CON_ID DBID    GUID                               NAME    OPEN_MODE---------- ---------- -------------------------------------------------      3 1862374014 BABBF75EF6217B0EE055E3D5AC69F4C3  PDBORCL  READ WRITE

7)启动/关闭 CDB

  • SQL> shutdown immediate //关闭
  • SQL> startup //启动
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area 3288334336 bytesFixed Size                  2929744 bytesVariable Size            1895828400 bytesDatabase Buffers         1375731712 bytesRedo Buffers               13844480 bytesDatabase mounted.Database opened.

8)创建/克隆 PDB

说明:创建或克隆前要指定文件映射的位置(需要CBD下sysdba权限)
例:

SQL> alter system set db_create_file_dest='/oradata/app/oracle/orcl/orcl2';
  • 创建一个新的 PDB(需要CBD下sysdba权限)
SQL> create pluggable database orcl2 admin user admin identified by oracle;//创建 PDB orcl2SQL> alter pluggable database orcl2 open;   //打开 PDB orcl2
  • 克隆PDB(需要CBD下sysdba权限)
SQL> create pluggable database orcl2 from orcl1; //由 orcl1 克隆 orcl2SQL> alter pluggable database orcl2 open; //打开 orcl2

9)删除PDB(需要CBD下sysdba权限)

SQL> alter pluggable database  orcl2 close;  //关闭 PDB orcl2SQL> drop pluggable database orcl2 including datafiles;  //删除PDB orcl2

10)设置 CDB 启动 PDB 自动启动(需要CBD下sysdba权限)

使用如下触发器:

CREATE OR REPLACE TRIGGER open_pdbsAFTER STARTUP ON DATABASEBEGINEXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';END open_pdbs;/

参考文章:

https://blog.csdn.net/qq_41262248/article/details/107734533?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242
https://www.cnblogs.com/sonnyBag/p/11557952.html

你可能感兴趣的文章
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>