当前位置: 首页 > article >正文

Oracle数据库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的关系图。

 CDB相当于操作系统,调用并管理各个PDB。PDB相当于真正提供业务需求的数据库实例。Oracle 12C安装后只创建了CDB,需要自己生成相应的PDB。 Oracle 12C在安装时,默认创建为容器数据库。

1、查看当前是否处于容器CDB

show con_name;

 如果结果为CDB&ROOT,则为容器状态(CBD),结果为ORCLPDB(这个PDB名字根据自己的实际情况而定,不是固定的),则为可插拔数据库(PDB)。

2、查看容器中的数据库名

show pdbs;

3、切换到PDB

alter session set container=ORCLPDB1(这个pdb名字根据自己实际情况而定)

4、切换到CDB

alter session set container=CDB&ROOT

注:处于容器CDB时,新建的用户必须以C##开头
 

常用命令:

--查看oralce版本
select * from v$version;
--查看当前使用容器
select sys_context ('USERENV', 'CON_NAME') from dual;
--查看数据库存在的容器及其状态等
select con_id, dbid, guid, name, open_mode from v$pdbs;
--或
show pdbs;

创建新用户

--创建新用户
create user 用户名 identified by 密码;
--用户授权
grant connect,resource,dba to 用户名;
--修改用户密码
alter user 用户名 identified by 密码;
--删除用户
drop user 用户名;
drop user 用户名 cascade;

需要注意:
1、由于oracle从12c开始引入了容器(PDB和CDB)、租户的概念。直接连接sysdba用户创建新用户时,会默认在CDB中创建公有用户,用户名需要以“C##”或“c##”开头。如果用户名开头不想使用“C##”或“c##”,则需要做如下操作。

--方法1:关闭容器(未尝试)
--a. 执行命令
alter pluggable database pdb名称 close;
--b. 或者在安装创建oracle的时候将“创建为容器数据库”前面的打勾✔去掉。--方法2:切换会话container到PDB容器(尝试可用)
--打开容器
alter pluggable database pdb名称 open;
--关闭容器
--alter pluggable database pdb名称 close;
--保存容器当前状态,避免主机/orcl服务重启时,pdb自动关闭
--alter pluggable database all save state;
--切换容器
alter session set container=pdb名称(指定容器);

2、删除用户时,若用户拥有对象,则不能直接删除,否则将返回一个错误值。
需要指定关键字cascade,可删除用户所有的对象,然后再删除用户。

3、在创建用户,重启电脑/数据库服务后,发现一个用户登录的问题。详细描述如下:
问题描述:
a、在将用户创建到其他pdb容器后,电脑重启。
b、然后再次用新创建的用户连接数据库时,发现报错“ORA-01109 数据库未打开”。
c、查看用户pdb状态为MOUNTED,而不是一个打开的可读可写的状态。
问题原因分析:
重启电脑,或oracle服务重启后,pdb状态被重置为open之前的状态。
解决问题方法:
a、打开容器。
b、保存容器当前状态,避免主机/orcl服务重启时,pdb自动关闭

###########################################################

SQL> show pdbs;CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED			  READ ONLY  NO3 ORCLPDB1			  MOUNTEDSQL> show con_name;CON_NAME
------------------------------
ORCLPDB1
SQL> create user autotest identified by autotest;
create user autotest identified by autotest
*
ERROR at line 1:
ORA-01109: database not openSQL> alter pluggable database ORCLPDB1 open;Pluggable database altered.SQL> create user autotest identified by autotest;User created.SQL> 

切换到 pdb用户后,创建用户提示:database not open 。需要open   database

SQL> create user autotest identified by autotest;
create user autotest identified by autotest*
ERROR at line 1:
ORA-65096: invalid common user or role name

报错:ORA-65096: invalid common user or role name(公用用户名或角色名无效).ide

错误缘由:用户想在PDBORCL中建立autotest用户,却未设置会话container到PDB,而在CDB中建立公有用户因没法经过名称或角色验证出错。

SQL> alter session set container=ORCLPDB1SQL> alter pluggable database ORCLPDB1 open;Pluggable database altered.SQL> create user autotest identified by autotest;User created.SQL> grant dba to autotest;Grant succeeded.

参考:

https://blog.csdn.net/lixiangss1993/article/details/121677355

https://blog.csdn.net/GeorgeChan_/article/details/124040161

http://www.lryc.cn/news/2417791.html

相关文章:

  • ubuntu搜狗输入法
  • 日期操作类(DateFormat与SimpleDateFormat)的区别和使用详解
  • Java中Map详解
  • SQL中的like语句用法
  • 仓库管理WMS软件(Warehouse Management Software)百科解析
  • 在vue中使用CKEditor4富文本编辑器
  • Unity基础三: 什么是Shader
  • CIDR 基础知识
  • SHA1 算法加密技术核心思想
  • 详解Tensorboard及使用教程
  • Android Binder机制解析
  • 【传输层协议】 TCP UDP协议 解析(一)
  • FLOPs如何计算
  • 取拼音字头
  • VB 在Visio 2010 以编程方式创建子进程图
  • 根文件系统(二):busybox
  • 浅谈NBIOT
  • 全网最全python教程,从零到精通(学python有它就够必收藏)_python学习相关博客
  • 如何使用好google学术?
  • js刷新当前页面的5种方式
  • LNMP架构环境搭建(Linux+Nginx+Mysql+PHP)
  • 数组详细讲解
  • loki介绍
  • 正确配置安装和卸载Cygwin
  • Windows server 2016——SQL server 简介与安装
  • 都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet
  • Activiti入门及案例
  • window硬盘管理
  • 什么是UTF-8编码
  • spice新手学习手册