19C数据库提示ORA-65096: 公用用户名或角色名无效(详细操作版)
一、问题
今天在创建Oracle用户时,报错:【ORA-65096: 公用用户名或角色名无效】
什么原因呢?
查看数据库版本信息:
select version from v$instance;
我的oracle版本是19c,应该是oracle_12版本及以上版本的特性
在CDB容器中用户名必须加c##或者C##前缀才能创建成功,但会改变用户名的预期格式
Oracle官方文档介绍: https://docs.oracle.com/database/121/DBSEG/users.htm#DBSEG99780
这里面又牵扯到了容器CDB(Container Database)与PDB(Pluggable Database)的概念,具体大家可以自己深究
二、解决
方案一、直接创建以c##或者C##开头的用户
当前容器为CDB,CDB容器下创建用户必须以c##或者C##开头,那就改下用户名呗,仅仅是个用户名而已,也不影响什么。但是追求完美的娃子可以用以下方法!!!
create user c##tiger identified by tiger
方案二、将当前容器改为PDB,然后再创建用户
将当前容器改为PDB,PDB容器创建用户无需以c##或者C##开头(注意:以下操作需要通过cmd黑窗口进入后,登录sysdba权限进行操作,在Navicate等sql窗口下执行还是会提示ORA-65096问题)
使用sysdba用户进行操作,其他用户权限级别不足
C:\Users\Administrator> sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on 星期五 9月 26 14:36:11 2025
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.连接到:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0SQL> select version from v$instance;VERSION
----------------------------------
19.0.0.0.0SQL> select name,cdb,open_mode,con_id from v$database;NAME CDB OPEN_MODE CON_ID
------------------ ------ ---------------------------------------- ----------
ORCL YES READ WRITE 0SQL> show con_name;CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 ORCLPDB READ WRITE NO
SQL> ALTER PLUGGABLE DATABASE ORCLPDB OPEN;
ALTER PLUGGABLE DATABASE ORCLPDB OPEN
*
第 1 行出现错误:
ORA-65019: 插接式数据库 ORCLPDB 已打开SQL> alter session set CONTAINER=ORCLPDB;会话已更改。SQL> CREATE USER ROOTUSER1 IDENTIFIED BY ROOTUSER;用户已创建。SQL> drop USER ROOTUSER1;用户已删除。
查询容器是否CDB
select name,cdb,open_mode,con_id from v$database;
查看当前容器名称
show con_name;
查看已经创建的pdb容器
show pdbs;
打开上述ORCLPDB容器
ALTER PLUGGABLE DATABASE ORCLPDB OPEN;
将当前容器切换到指定的PDB容器中,可插拔数据库(PDB)
alter session set CONTAINER=ORCLPDB;
查看当前容器,会发现以及切换到ORCLPDB的容器了
show con_name;
就可以正常创建用户了
CREATE USER ROOTUSER1 IDENTIFIED BY ROOTUSER;
查看用户是否创建成功
select username from dba_users where username = 'ROOTUSER1';
授予用户权限
创建用户后,需要授予用户执行数据库操作的权限。通常,会授予用户如CREATE SESSION、CREATE TABLE、CREATE VIEW等基本权限,以及根据需要授予更高级的权限。例如:
GRANT CONNECT, RESOURCE TO 用户名;
-- 注意:DBA权限应谨慎授予,因为它提供了对数据库的广泛控制权
-- GRANT DBA TO 用户名; (仅在必要时授予)
使用新创建的用户进行登录
不知道为什么,这个用户无法以普通用户登录,必须以超级管理员 sysdba进行登录才行
而使用超级管理员登录后,虽然密码输入的是刚新的的用户的密码,但登陆的不是刚创建的用户,而是sys用户
-----------------------------------
©著作权归作者所有:来自51CTO博客作者Robert_Jen的原创作品,请联系作者获取转载授权,否则将追究法律责任
ORA-65096: 公用用户名或角色名无效
https://blog.51cto.com/u_16305703/11685261
ps:这位博主的文章也超赞~欢迎大家也多看看他的其他相关文章。本文只是对文章做了轻微加工。有不足之处还请多多留言~