浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系

名词介绍:

数据库:数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生 于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以 后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管 理的方式。
C D B:CDB全称为Container Database,中文翻译为容器数据库。
P D B:PDB全称为Pluggable Database,中文翻译为可插拔数据库。

首先,我来谈一下数据库、user和schema之间的关系。在我看,数据库就像是含有好多小房间的一个大大的仓库,然后我们把这个大仓库分了好几块,这就是schema。分出来的小仓库得有人管理啊,管理的就叫做user。当然了,用户可以在这些小仓库内放置许多许多的货物,这个货物就是表和数据。至于很多人不懂user和schema之间的区别,我在此引用网上的一段话来解释下他们之间的关系:
“user即Oracle中 的用户,和所有系统的中用户概念类似,用户所持有的是系统的权限及资源;而schema所涵盖的是各种对象,它包含了表、函数、包等等对象的“所在地”, 并不包括对他们的权限控制。好比一个房子,里面放满了家具,对这些家具有支配权的是房子的主人(user),而不是房子(schema)。你可以也是一个 房子的主人(user),拥有自己的房子(schema).可以通过alter session的方式进入别人的房子。如果你没有特别指定的话,你所做的操作都是针对你当前所在房子中的东西。至于你是否有权限使用(select)、搬 动(update)或者拿走(delete)这些家具就看这个房子的主人有没有给你这样的权限了,或者你是整个大厦(DB)的老大(DBA)。alter session set schema可以用来代替synonyms。如果你想调用其他schema的对象(有权限的前提下),但并没有建synonym,同时又不想把其他 schema名字放入代码中,就可以首先使用alter session set schema=<其他schema名字>。”
这段话形象的阐释了user和schema的区别和联系。
下面我再谈一下12c与之前的版本中的区别,那么大家来猜猜最“Strongly”的区别是什么呢。Bingo,就是pdb和cdb概念的引入。
这里引用一下Oracle12c新特性的文档中的一张图来更方便的解释CDB和PDB的关系。

CDB都有什么组成部分呢。其实通过上图我们可以清楚的看到:
1、ROOT:root,又名CDB$ROOT,用来存储Oracle提供的metadata和common user 的。metadata的一个例子是Oracle提供的PL/SQL包的源代码。Common user 指的是一个所有容器都知道的数据库用户(注意,当我们想在数据库中创建 用户的时候,一般是不能往ROOT中创建的。我们需要先通过语句alter session set container = PDB’s name 转换到相应名称的PDB下再创建用户, 要想详细了解关于common user 和 local user 的区别的话,请参考Oracle 官方文档《Oracle Database Security Guide》)。 一个CDB只能有一个根。
2、SEED:seed,又名PDB$SEED,是用来创建新的PDB的模版。但是,你不能在seed 里添加或者修改对象,一个CDB只能有一个SEED。
3、PDB:PDB展现给用户和应用的形象就像是一个没有CDB的普通数据库一样。例 如,一个PDB可以包括支持一个特定应用程序所需的所有数据和代码。PDB 完全向后兼容Oracle12c之前版本的所有数据库。
以上的每个组成部分都被称为容器(container),ROOT、SEED、PDB都是容器。而这些容器在CDB中都有他们自己唯一的容器ID和名称。我们可以很轻松的向CDB中插入一个PDB或者从CDB中拔出一个PDB。当我们将一个PDB插入CDB中时,相当于将这个PDB与CDB连接起来。反之则解除关系。
什么?你问我Oracle为什么这么干,这令你感到麻烦并且困扰。那么,我告诉你。这其实大大方便了数据的迁移。我们可以很方便的将一个特定的PDB从一个CDB挪到另一个CDB上面而不改变里面的任何数据和架构。这难道不是很wonderful吗?当然,一个PDB只能在同一时间内插入一个CDB而不是多个。每一个PDB都有自己独一无二的全局唯一标识符(GUID)来预防PDB的错乱使用。

实战::::
plsql相关
使用sql developer ,同连接cdb一样,只是选择“服务名”,然后服务名处填写“pdborcl”,即可。
使用sqlplus, conn sys/[email protected]//localhost:1521/pdborcl as sysdba。

java开发连接Oracle 12c采用PDB遇到问题记录
今天初次使用java连接Oracle 12c,遇到各种问题,为方便后续查询,在汇总了问题记录及解决方案如下。

ORA-28040: No matching authentication protocol

需要在 ...\product\12.1.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora

文件中加入

SQLNET.ALLOWED_LOGON_VERSION=8

ORA-12505: TNS:listener does not currently know of SID given in connect descriptor

SID应该是存在的id才可以。java连接Oracle 12c时,无法识别格式不正确的SID,应该跟下面的问题一样处理。

ORA-01017: invalid username/password; logon denied

在pdb模式下,连接串应该是这种格式

jdbc:oracle:thin:@localhost:1521/pdborcl

类似后面是冒号,或者locahost前加//的,都无法正常使用。

alter session set container = pdborcl;

时间: 2024-10-13 04:03:04

浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系的相关文章

浅谈IIS 和 asp.net的应用之间的关系

IIS可以理解为一个web服务器. 用于提供web相关的各种服务. IIS6.0中添加了一个新的功能, application pool. application pool的作用是将运行在同一个server上的web application 分离开, 这样不同的web application可以互不影响, 降低了application的各种安全风险. 并且不同的application pool可以配置不同的user去执行process. https://www.developer.com/net

浅谈prototype与__proto__、constructor三者之间的关系

1.关于prototype? a.每个函数中都有一个prototype属性,这个属性叫做原型. b.prototype指向的这个对象就叫原型对象. c.prototype表示了一个类的属性的集合. 2.原型对象中包含有constructor和__proto__. 3.当通过new将该函数实例化后,其内部方法也可用实例对象调用. 如:var ABC=new wxy(); ABC.case(); 当未被实例化时也可直接声明其内部方法调用. 如:wxy.case(); 4.我们可以通过prototyp

浅谈javaScript数据类型、变量、内存之间的关系,文末有图解

一.变量是没有类型的 在JavaScript中,定义变量的方法是“var 变量名=变量值”,无论这个变量要给他赋值为一个数字.字符串还是数组,他的类型都不需要声明.也就是说如果我只声明了一个变量“var a”,而没有给他赋值,那么我可以给他赋任何值,在语法上都是没有问题的. 二.变量值是有类型的 尽管变量是没有类型的,使用typeof方法仍然能够获取到一个类型: var a; console.log(typeof(a));//值为undefined var a=1; console.log(ty

Oracle12c多租户CDB 与 PDB 参数文件位置探讨、查询 CDB 与 PDB 不同值的参数

一. Oracle12c多租户CDB 与 PDB 参数文件位置 CDB的参数文件依然使用12c以前的SPIFLE,pdb的参数文件不会出现在SPFILE中,而是直接从CDB中继承,如果PDB中有privete Local parameter 会存在 CDB 的 PDB_SPFILE$字典表 中以con_id区别,当PDB UN-Plug时,PDB参数会写入PDB的XML文件中,当drop pluggable database后,pdb信息和PDB_SPFILE$记录也会被清除.再当PDB重新Pl

浅谈分布式数据库

基本概念 1) 单库,就是一个库 ? 2) 分片(sharding),分片解决扩展性问题,引入分片,就引入了数据路由和分片键的概念.分表解决的是数据量过大的问题,分库解决的是数据库性能瓶颈的问题. ? 3) 分组(group),分组解决可用性问题,分组通常通过主从复制(replication)的方式实现.(各种可用级别方案单独介绍) ? 4) 互联网公司数据库实际软件架构是(大数据量下):又分片,又分组(如下图) 数据分片简介和问题 数据分片是按照某个维度将存放在单一数据库中的数据分散地存放至多

Oracle12C新特性——cdb与pdb

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

Oracle12c 新概念CDB与PDB 解析

转载自:http://www.cnblogs.com/siyunianhua/p/4004361.html 原文章标题:Oracle 12c创建用户时出现"ORA-65096: invalid common user or role name"的错误 这篇文章主要介绍CDB和PDB的基本管理,资料来源oracle官方. 基本概念: Multitenant Environment:多租户环境 CDB(Container Database):数据库容器 PD(Pluggable Datab

运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队

浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分为以下五个阶段: 1.数据库表设计 项目立项后,开发部根据产品部需求开发项目,开发工程师工作其中一部分就是对表结构设计.对于数据库来说,这点很重要,如果设计不当,会直接影响访问速度和用户体验.影响的因素很多,比如慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等.当然,有测试工程师的团队