先来看看这个问题出现的前提
Oracle 12c 开始有了CDB和PDB
CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。
CDB全称为ContainerDatabase,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。
而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
12c中,oracle 将CDB看成一个容器,用来存放数据库。
- 在CDB中可以有多个PDB,其中存在一个root根容器(PDB$ROOT)、一个种子容器(PDB$SEED)和多个PDBS。
- 所有的PDB共用一个硬件系统资源、sga和pga、redo、临时段、控制文件、参数文件、还原段(还可对每个PDB单独指定)。
PDB$ROOT:根容器用来做所有容器的跟,用来对每个PDB进行统一管理
- sqlplus / as sysdba连接进来默认是连接的根容器,需要切换到其他的PDB容器才可以对单独的PDB操作。
- 其中有 system数据文件、sysaux数据文件、(undo数据文件、temp数据文件、redo、控制文件)。
- 一般不存放生产数据文件
PDB$SEED:种子容器作为插入PDB的模板而存在
- 每个CDB都有一个种子容器,且不可对其中对象进行修改。
- 其中有 system数据文件、sysaux数据文件、其他数据文件。
PDB:新插入容器,该容器用来存放数据库
- 其中有 system数据文件、sysaux数据文件、其他数据文件。
- 12c中可以插入多个容器进行统一管理,来减少DBA的工作量。
- 其中的数据库可以插入或拔出。
用户:12c中PDB$ROOT中的普通目录可以通过权限分配来访问一个或多个指定的PDB容器,最大权限用户是sysdba
- 其中PDB也可单独创建普通用户来管理该容器的数据库。
- PDB资源管理:12c中将多个数据库运行在一个硬件资源上,CDB性能上得到优化。
- 在CDB中为每个PDB确定使用CPU最低份额,CDB会按照一个PDB份额/分配的总份额数*100%,来保证PDB最低份额数。
管理容器
使用sqlplus登陆(用plsql登陆无法使用show指令)
查询容器是否CDB
select name,cdb,open_mode,con_id from v$database;
查看当前容器
show con_name;
查看已经创建的pdb
show pdbs;
在使用plsql连接Oracle 19c并创建新用户的时候报错, ORA-65096 公用用户名或角色名无效
官方地址:https://docs.oracle.com/database/121/DBSEG/users.htm#GUID-4BF8A362-AD9B-4780-944E-CFB9B7D84B50
文档里写的很清楚,如果要创建公共用户,需要加前缀c##