侧边栏壁纸
博主头像
宜宾众控网络科技有限公司 博主等级

行动起来,活在当下。

  • 累计撰写 8 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Oracle12C创建用户失败提示ORA-65096

gudujianke
2024-09-23 / 0 评论 / 0 点赞 / 76 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-09-23,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、错误提示

我们在安装好Oracle12c之后,需要进行用户的创建。

发生场景:

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

create user SB identified by oscar default tablespace SB;

这个时候提示:

转到SQL Develop开发工具创建, 报相同的错误。

二、错误及原因

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

CDB , Container Database, 数据库容器

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;

查询结果如下:

2.打开PDBORCL 数据库

alter pluggable database ORCLPDB open;

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

sqlplus / as sysdba
#如果是以sysdba登陆的就可以直接操作。

3.再次使用 select con_id,dbid,NAME,OPEN_MODE from v$pdbs; 命令, 可以发现ORCLPDB 的OPEN_MODEL 从MOUNTED (已挂载)变成 READ WRITE(可以读写)了。

4.切换当前Session到 ORCLPDB容器

alter session set container=ORCLPDB;

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

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

三、一句话总结

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

0
博主关闭了所有页面的评论