千家信息网

Oracle12C新特性——cdb与pdb

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(
千家信息网最后更新 2025年01月22日Oracle12C新特性——cdb与pdb

Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。

其实大家如果对SQL SERVER比较熟悉的话,这种CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事呢。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。看来ORACLE也"抄袭"了一把SQL SERVER的概念,只是改头换面的包装了一番。

1、CDB组件(Components of a CDB)

一个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可以包含253个PDB(去掉一个是seed还能创建252个PDB)。

②:Root,seed以及每一个PDB的数据文件是独立的。

③:一个单实例的CDB有一个redo log;RAC环境中每个实例有一个redo log。

④:只有一组后台进程,它们被ROOT和所有PDB共享。

⑤:Root的全局数据库名就是CDB的全局数据库名;PDB的全局数据库名是由PDB name和DB_DOMAIN参数共同定义的。


⑥:一个CDB使用一个SPFILE或者一个PFILE,其中为ROOT设置的参数的值可以被PDB继承。另外,也可以使用ALTER SYSTEM语句来设置PDB的参数。对参数文件执行 操作时,必须使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP来连接数据库。要创建CDB,必须要将初始化参数ENABLE_PLUGGABLE_DATABASE的 值设置为TRUE。


⑦:所有PDB的字符集都使用CDB的字符集。

可以设置所有PDB的时区与CDB相同,也可以单独为PDB设置时区。

块大小被应用于整个CDB。

一个CDB也仅有一个控制文件(可以多路复用)。


⑧:Root与每一个PDB都有自己的SYSAUX表空间和SYSTEM表空间。可以为root和每一个PDB设置默认表空间。而默认的临时表空间对于整个CDB只有一个,但是可以为 每个PDB创建临时表空间。


⑨:撤销表空间对于CDB是唯一的。在CDB中,初始化参数UNDO_MANAGEMENT必须被设置为AUTO。当前容器为PDB时,无法通过数据字典视图查看撤销表空间,只能通 过动态性能视图。


2、PDB简介

2.1、PDB新特点的优势

》可以把多个PDB集成进一个平台。

》可以快速提供一个新的PDB或一个已有PDB的克隆。

》通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。

》多个PDB数据库补丁或升级一次完成。

》通过把单个PDB拔插到较高版本的不同CDB,可以补丁或升级一个PDB。

》从同一个CDB中众多PDB中分离出某个PDB的内容。

》分离这些PDB应用管理员的责任。

2.2、PDB新特点的功能

》在一个CDB中,你可以拥有很多PDB。

》PDB和12.1之前版本的普通数据库是向后兼容的。

》PDB对应用是透明的--你不需要改变客户端代码或数据库对象。

》RAC中每个实例作为一个整体打开CDB(因此CDB和其中的PDB数据库版本都是相同的)。

》会话仅仅看到它自己连接的那个PDB。

》你可以从一个CDB拔出一个PDB,然后插入另一个CDB。

》你可以在同一个CDB或不同CDB间克隆PDB。

》资源管理器随着PDB的功能得以扩展。

》通过SQL语句实现了实体PDB的操作(创建,拔出,插入,克隆,清除,设置打开模式)。

》当连接到所谓的"根"(root)时,CDB管理员来执行这些操作。

》所有的PDB能被一次备份,但可以分别单独恢复。

2.3、PDB的详解

》每个PDB有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB作为一个整体也包含Oracle提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。

》有新的分开的数据字典架构,该架构允许一个PDB被快速从一个CDB拔出并插入一个不同的CDB。

》每个PDB只能看到oracle提供系统的只读定义。

》有全局数据库参数,也有本地数据库参数。PDB参数仅仅属于特定的PDB,并且拔出后,PDB参数也将保持不变。

》数据库用户可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用户一开始就在两级DB中存在。如果你在CDB中创建了一个新用户,那么你在PDB中也能看到这个用户。在PDB中创建的用户只能在该PDB中使用。

》临时表空间可以是全局或本地的。

》Redo日志和Undo表空间都是全局的(CDB级)。

》Data Guard在CDB级作为一个整体发挥作用;RMAN调度的备份也作为一个整体在CDB级完成;任何时候,你可以只备份一个PDB。

》应用连接PDB时,不需做代码修改;系统管理员可以连接CDB;连接串中的服务名确定目标PDB。

》PDB允许更加清晰的声明定义一个应用;一个PDB对同一个CDB里的其他PDB一无所知;每个PDB是个密闭的容器。这保证了新层面DB的独立和安全。


3、日常操作:

3.1、查看当前的容器

SQL> show con_name;


CON_NAME

------------------------------

CDB$ROOT

------或:

SQL> select Sys_Context('Userenv', 'Con_Name') "current Container" from dual;


current Container

--------------------------------------------------------------------------------

CDB$ROOT


3.2、查看CDB中的PDB信息:

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


CON_ID DBID GUID NAME OPEN_MODE

---------- ---------- -------------------------------- ------------------------------ ----------

2 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY

3 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE ---feige就是一个PDB


3.3、创建一个新的PDB:

SQL> create pluggable database test_pdb admin user admin identified by admin;

SQL> alter pluggable database test_pdb open; ----将test_pdb 打开

SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs; ---查看pdb的状态


CON_ID DBID CON_UID GUID NAME OPEN_MODE CREATE_SCN TOTAL_SIZE BLOCK_SIZE

---------- ---------- ---------- -------------------------------- ------------------------------ ---------- ---------- ---------- ----------

2 427872663 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY 1594401 838860800 8192

3 1891424478 1891424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE 1753608 865075200 8192

4 2998508999 2998508999 53F376E8715628BCE055000000000001 TEST_PDB READ WRITE 1757024 859832320 8192


("admin user"子句是必须的,在扩展格式,给新用户赋予了权限和角色,该用户仅在admin内可以创建新会话。在创建完可插拔数据库后,新的PDB处于MOUNTED模式)


3.4、克隆一个pdb

SQL> create pluggable database test2_pdb from test_pdb; ---test_pdb必须是打开的,才可以被打开

SQL> alter pluggable database test2_pdb open; ---然后打开这个pdb


3.5、切换到PDB,或切换到CDB

SQL> alter session set container=test_pdb; ---切换到pdb中


SQL> alter session set container=cdb$root; ---切换到CDB中


3.6、关闭一个pdb和关闭所有的pdb

SQL> alter pluggable database test_pdb close; ---关闭test_pdb这个pdb数据库

SQL> alter pluggable database all close; ---关闭数据库中所有的pdb


3.7、插拔一个pdb数据库

SQL> alter pluggable database feige close; ---先将feige这个pdb关闭

SQL> alter pluggable database feige unplug into '/opt/oracle/oradata/feige.xml';

(feige.xml:文件确定数据文件的名字和全路径等信息。这些信息在插入操作时会用到。注意:PDB还是其从中拔出的CDB的一部分,只是现在状态变为了拔出(UNPLUGGED)而已。)

SQL> drop pluggable database feige keep datafiles; ----在当前的容器中删除这个pdb

----如果在这个服务器上,有两个容器,则进入另一个容器,插入这个pdb

exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/opt/oracle/oradata/feige.xml'); --查看pdb和这个容器是否兼容,如果报错说明不兼容

----开始插入pdb,(using关键字后必须跟上PDB描述的绝对路径,即,先前拔出操作时产生的.XML文件)

create pluggable database feige using '/opt/oracle/oradata/feige.xml' move file_name_convert = ('/cdb1/', '/cdb2/');

----最后打开这个pdb

alter pluggable database feige open;


3.8、连接pdb数据库:

连接pdb其实和连接正常的单实例数据库是一样的,连接注册的服务名即可,可以通过下面的方式:

①:使用监听注册的服务名连接,如下:

[oracle@localhost ~]$ lsnrctl status ---通过这个命令查找注册的服务名

[oracle@localhost ~]$ sqlplus system/oracle@192.168.2.100:1521/feige ---这样连接到PDB数据库


②:通过tnsnames配置文件连接,如下:

feige =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = feige)

)

)


[oracle@localhost admin]$ sqlplus system/oracle@feige ----使用这种方式连接


---至此,cdb与pdb就先总结到这里,一些基础的知识和操作都有介绍


数据 数据库 容器 用户 参数 实例 空间 全局 字典 文件 多个 组件 应用 服务 整体 系统 切换 管理 不同 信息 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 东莞美送网络技术有限公司 广州百奇盾软件开发公司 荣耀xd22打印服务器 重庆发票安全接入服务器地址 怎么将数据导入到另一个数据库 网络安全法是否可以监管香港 广州网络安全公司有几家 日照互联网科技公司排名 崇州网络安全教育 滁州oa管理软件开发要多少钱 如何删除服务服务器管理器 全境封锁服务器ip 永劫无间捏脸数据库顾清寒 软件开发公司的税收 计算机网络安全安案例 哪个大专院校的计算机网络技术好 青岛科技大学工业互联网协会 网络安全etf指数基金是多少 网络安全知识竞赛成绩查不了 软件开发行业风险系数 安装数据库能干嘛 网络安全事件与数据分析 数据库系统能不能实现资源共享 学软件开发到哪个机构学习靠谱 网上的无线网络安全 美国各周历年gdp数据库 计算机网络安全安案例 长沙软件开发培训机构哪个好 幻塔华为服务器二维码 牡丹江网络安全执法
0