Oracle 12c新建用户登录问题分析
1 用sys用户新建用户,提示公用用户名或角色名无效。
原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##。默认登录连接的就是CDB。
查看当前是否处于容器CDB的方法:通过命令 show con_name; 如果结果为CDB&ROOT,则为容器状态。
想直接新建不带“c##”开头的用户的解决方法:切换pdb
具体先通过命令show pdbs;查看容器中数据库名称,选择需要连接的数据库(pdb),通过命令alter session set container=ORCLPDB(这个pdb名字根据自己实际情况而定);切换到需要连接的pdb。此时,新建用户即可成功,且用户名不需要以c##开头。
2 用sys登录SQLplus新建用户后,用新建的用户登录plsql程序,提示“ora-01017:用户名/口令无效;登录被拒绝。”
原因:数据库链接符不对
解决方法:在tnsnames.ora文件中新加一个连接符
原来的为
orcl=
(
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=WIN-KD3MFTQMKPV)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=ORCL))

在下面添加如下内容
orcl2=
(
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=WIN-KD3MFTQMKPV)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=ORCLPDB))


其中,HOST=WIN-KD3MFTQMKPV根据自己实际主机情况填写。
分析原因:因为12c是容器数据库结构,原来的ORCL服务连接符是针对CDB来的,切换到具体pdb之后,就需要新建一个服务连接符来对接。
验证;再次用新建的有权限的用户登录plsql程序,数据库选择orcl2,登录成功。