关于windows安装Oracle 12c后出现的 ORA-65096、ORA-65048、 ORA-00959
2020/6/4官网上下载Oracle 12zip包。安装后做测试了解到了一个cdb和pdb的概念,在这里记录一下。希望能帮到<像我这样的人>。
一、 这里是关于cdb和pdb的相关概念
CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为ContainerDatabase,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
二、想要了解cdb和pdb的深入概念小伙伴们可以自行查找。下面直接进入问题。
oracle 的安装过程这里就不多赘述了。我在安装好Oracle后使用navicat连接了Oracle。在创建表空间是还是非常顺利的。但是当我在创建用户时出现了两个错误。
1.在填写好用户的基本信息后进行保存,会报:
ORA-65096: 公用用户名或角色名无效。
这里百度了一波,知道了充cdb和pdb的概念。查询到是说cdb创建用户是用户名前面必须要加上C##或c##,不然会返回一个错误。
2.当我将用户名加上C##前缀后又报了一个:ORA-65048:在可插入数据库PDBORCL中处理当前DDL语句时出错 ORA-00959:表空间‘LOCL_DATA’不存在。
这里呢其实还是和cdb有关。
首先我查询了我现在的session是cdb,这就导致了我在cdb创建了表空间但是pdb上面并没有这个表空间。由于cdb与pdb表空间结构不同,所以就出现了ora-00959的错误。
之后我有查看了此时数据库的pdb。
可以看到里面有个ORCLPDB,于是我就用navicat重新连接了一下这个可插拔数据库。具体连接配置如下:
可以看到我修改了服务名。从默认的ORCL改成了ORCLPDB。之后的创建表空间和用户就没有问题了。
用户名前面也不需要加C##了。
如果用的是sqlplus进行测试的,那就直接修改session就行了。
SQL> alter session set container=ORCLPDB;
三、关于Oracle12c 重启后。。。
Oracle 12c 重启后只会重启cdb,其余所有的pdb都会进入mounted状态。这个时候客户端是无法连接这个数据库的。所以们还需要重新启动相应的pdb数据库。
SQL> sqlplus / as sysdba
SQL> select name, pdb from v$services; //查看pdb
SQL> alter pluggable database orclpdb open; //启动相应pdb(orclpdb是我的pdb的名称)
当然,你也可以使用触发器进行自启动。我这里没有进行测试,就不把具体的方法写在上面了。