Oracle 12C 创建用户失败 - ORA-65096 invalid common user or role name


问题
在Oracle 12c 环境下, 使用命令行或是SQL Developer 创建用户失败, 错误信息报:

ORA-65096: 公用用户名或角色名无效
65096. 00000 -  "invalid common user or role name"

发生场景

这里以创建一个用户名是SB,密码是 oscar , 默认的表空间是SB 为例(SB是自行创建的表空间),

使用以下命令创建:

create user SB identified by oscar default tablespace SB;

出现错误界面如下:
在这里插入图片描述

转到SQL Develop开发工具创建, 报相同的错误。
在这里插入图片描述

原因及解析
Oracle 12C 提出了多租户环境(Multitenant Environment)和容器(Container)的概念, 区分了两个层级:

  1. CDB , Container Database, 数据库容器
  2. PDB, Pluggable Database, 可插拔数据库
    关系如下图:
    在这里插入图片描述

在数据库中建立的用户对应以上两个层级:

  • COMMOM USERS , 普通用户, 一般建立在CDB层, 用户名需要以 C#或C##开头;
  • LOCAL USERS , 本地用户, 仅建立在PBD层,建立的时候需要指定容器

从上面的错误 “invalid common user or role name” 来看, COMMOM USERS 需要以 C#或C##开头, 所有这里的用户名不合规范。

那如何查看当前环境的所在的容器呢? 可以通过以下命令查看:

select sys_context ('USERENV', 'CON_NAME') from dual; 

这里查看的结果如下:
在这里插入图片描述

当前所在的是CDB容器。

解决方法
解决方法有两种:

  • 如果确定需要创建在CDB容器中, 则在用户名前面加C#或C## (最好是加上C##, 部分环境加C#会不行)
  • 如果想保持原用户名,可以将用户创建到PDB容器中

创建用户到PDB步骤:

  1. 查看pdb 容器信息
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

查询结果如下:
在这里插入图片描述

  1. 打开PDBORCL 数据库
alter pluggable database ORCLPDB open;

注意: 这个命名需要使用它sysdba 执行才有权限

sqlplus / as sysdba
  1. 再次使用 select con_id,dbid,NAME,OPEN_MODE from v$pdbs; 命令, 可以发现ORCLPDB 的OPEN_MODEL 从MOUNTED (已挂载)变成 READ WRITE(可以读写)了。
    在这里插入图片描述

  2. 切换当前Session到 ORCLPDB容器

alter session set container=ORCLPDB;

切换后, 可以使用 select sys_context ('USERENV', 'CON_NAME') from dual; 查看是否切换成功。

  1. 切换成功后再创建用户就可以了。需要注意,该用户对应的表空间也必须在ORCLPDB 中。

一句话总结

Oracle 12c创建用户要么以C##开头, 要么切换到PDB容器创建。


  • 15
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值