浅谈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/passwd@//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;
浅谈Oracle12c 数据库、用户、CDB与PDB之间的关系的更多相关文章
- 浅谈IIS 和 asp.net的应用之间的关系
IIS可以理解为一个web服务器. 用于提供web相关的各种服务. IIS6.0中添加了一个新的功能, application pool. application pool的作用是将运行在同一个ser ...
- 浅谈javaScript数据类型、变量、内存之间的关系,文末有图解
一.变量是没有类型的 在JavaScript中,定义变量的方法是“var 变量名=变量值”,无论这个变量要给他赋值为一个数字.字符串还是数组,他的类型都不需要声明.也就是说如果我只声明了一个变量“va ...
- Oracle12c多租户CDB 与 PDB 参数文件位置探讨、查询 CDB 与 PDB 不同值的参数
一. Oracle12c多租户CDB 与 PDB 参数文件位置CDB的参数文件依然使用12c以前的SPIFLE,pdb的参数文件不会出现在SPFILE中,而是直接从CDB中继承,如果PDB中有priv ...
- CDB与PDB之间的切换方法
Oracle 12c 开始支持 PLUGGABLE DATABASE,并且提供了一个方法在CDB和PDB之间切换. 1. 使用 show pdbs 可以确认当前有哪些PDB? SQL> show ...
- SQL Server中模式(schema)、数据库(database)、表(table)、用户(user)之间的关系
数据库的初学者往往会对关系型数据库模式(schema).数据库(database).表(table).用户(user)之间感到迷惘,总感觉他们的关系千丝万缕,但又不知道他们的联系和区别在哪里,对一些问 ...
- (转)运维角度浅谈MySQL数据库优化
转自:http://lizhenliang.blog.51cto.com/7876557/1657465 一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架 ...
- 运维角度浅谈MySQL数据库优化(转)
一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...
- 从运维角度浅谈 MySQL 数据库优化
一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...
- 运维角度浅谈MySQL数据库优化
一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ...
随机推荐
- 004:MySQL数据库体系结构
目录 一. MySQL数据库体系结构 1.MySQL数据库体系结构介绍 1 数据库定义 2 数据库实例 2. MySQL体系结构 1 单进程多线程结构 2 存储引擎的概念 3 体系结构图 4 逻辑存储 ...
- Docker学习总结(二)—— 镜像,容器
1.Docker镜像 1.1相关概念:registry :用于保存Docker镜像,包括镜像层次结构和镜像元数据,类似于git仓库之类的实体. repository:某个Docker镜像所有迭代版本 ...
- ghostscript 远程命令执行漏洞复现
影响的版本 <= 9.23(全版本.全平台) Ubuntu 开启 ghostscript sch01ar@ubuntu:~$ gs -q -sDEVICE=ppmraw -dSAFER -s0u ...
- Ceph添加/删除Mon(ceph.conf)
操作环境 ceph 0.87.7 Openstack liberty ubuntu 14.04 当前ceph配置文件如下 [global]fsid = c010eb34-ccc6-458d-9a03- ...
- Fiddler监控面板显示ServerIP栏(Fiddler v5.0)
Fiddler监控面板默认没有ServerIP这一栏,添加此栏方法如下: 1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.在脚本中添加对 ...
- 这样学Linux基本命令,事半功倍
命令基本格式 (1)命令提示符 如下是命令行的命令提示符,以此为例,讲解含义. 其中: root 当前登录用户名 localhost 主机名 ~ 当前所在的目录(即家目录,用户登录的初始位置) # 超 ...
- GIL与线程、进程、协程
GIL全局解释器锁: 1.相信大家都知道python代码是不能直接被机器cpu识别和执行的,它要经过python解释器(也就是我们执行时候的python3 name.py)被编译成机器语言,pytho ...
- Spring官方文档
官网里还真不好找,编译的时候pdf版还没编译成功,这里记录下 http://docs.spring.io/spring/
- 使用Spring MVC创建 REST API
1.REST的基础知识 当谈论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”——将REST作为另一种类型的远程过程调用(remote procedurecall,RPC)机制,就像 ...
- 5、数据类型三:hash
Hash数据类型使用很普遍,它同样是key-value的方式来组织的,只是其value又包含多个field-fieldValue对.想要获取某个fieldValue,可以通过key-field联合来定 ...