错误:ORA-65096:oracle中的公共用户或角色名称无效

enu*_*enu 81 oracle oracle12c

我刚安装了oracle11g,它缺少Scott架构.所以我想自己生成它.我得到了"Scott"架构的sql脚本,但是当我尝试运行查询"创建由老虎识别的用户Scott"时 它显示以下错误:

ORA-65096:oracle中的公共用户或角色名称无效.

基本上它不允许我创建用户"Scott".为什么会这样,我该如何解决我的问题呢?

小智 252

在创建用户运行之前:

alter session set "_ORACLE_SCRIPT"=true;  
Run Code Online (Sandbox Code Playgroud)

我在这里找到了答案

  • 这是错误的,并且在 oracle 中不受支持,我使用过它并导致了另一个内部问题。 (5认同)
  • @Victor - 因为我们只有在 Oracle 支持的指示下才被允许更改它们。就像我说的,自行设置未记录的参数可能会使我们的支持合同无效。更一般地说,Oracle 记录和未记录参数的默认设置通常适合所有应用程序,不需要更改。调整下划线参数吸引那些享受神秘访问快感的人,这是调整它们的最糟糕的原因。但是,如果您无需担心支持合同,则可以自由地以您选择的任何方式冒损坏系统的风险;-) (4认同)
  • 请注意,它是一个“隐藏参数”,仅在Oracle支持人员推荐时使用。 (3认同)
  • 在生产系统中使用下划线(隐藏)参数是危险的,因为这可能会使您的支持合同无效。因此,您应该建议人们在没有给予适当警告的情况下进行设置。 (3认同)
  • 那你为什么不展示如何以正确的方式修复它呢? (3认同)
  • 它也适用于Oracle 18c (2认同)
  • 它适用于 Oracle Database 18c Express Edition 版本 18.0.0.0.0 - 生产 (2认同)
  • 参考下面的另一个答案,它展示了登录PDB的方式及其含义 (2认同)

Lal*_*r B 35

我刚刚安装了oracle11g

ORA-65096:oracle中的公共用户或角色名称无效

不,您已安装Oracle 12c.该错误只能打开12c,不能打开11g.

始终检查最多4个小数位的数据库版本:

SELECT banner FROM v$version WHERE ROWNUM = 1;
Run Code Online (Sandbox Code Playgroud)

您必须已将数据库创建为容器数据库.虽然,您尝试在容器中创建用户,即CDB $ ROOT,但是,您应该在PLUGGABLE数据库中创建用户.

您不应该在容器中创建对象,容器包含可插拔数据库的元数据.您应该使用可插拔数据库进行常规数据库操作.否则,不要将其创建为容器,也不要使用多租户.

最有可能的是,示例模式可能已经安装过,您只需要在可插拔数据库中解锁它们.

例如,如果您创建了可插拔数据库pdborcl:

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"
Run Code Online (Sandbox Code Playgroud)

我建议阅读,Oracle 12c Post Installation强制步骤

  • 当你可以用 Oracle 方式做事时,为什么要用简单的方式做事‍♂️ (3认同)

小智 26

在oracle 12c及更高版本中,我们有两种类型的数据库:

  1. 容器(CDB)

  2. 可插拔数据库(PDB).

如果要创建用户,您有两种可能:

  1. 您可以创建一个容器用户,也就是普通用户

普通用户属于CBD以及当前和未来的PDB.这意味着它可以根据分配的权限在Container或Pluggable中执行操作.

create user c##username identified by password;

  1. 您可以创建一个可插入的用户,也就是本地用户.

本地用户纯粹是仅属于单个PDB的数据库.此用户可能具有管理权限,但这仅属于该PDB.为此,你应该像这样连接到可插拔数据

alter session set container = nameofyourpluggabledatabase;

在那里,你可以像往常一样创建用户

create user username identified by password;

别忘了提及表空间,它在输入时很有用.有关它的更多信息,请参阅此处https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

  • 这个答案的风格是我最喜欢的,使用起来很快。 (2认同)

Pad*_*ado 16

如果您的目标是创建一个 Oracle 用户,然后用它来处理您的数据库,您可能需要考虑这样做:

  • 以 sysdba 身份登录
  • 创建一个 pdb(又名可插入数据库)
  • 为您的 pdb 创建一个用户

接下来的内容假设您正在本地主机中使用数据库,如果不是,只需将“localhost”更改为您的数据库 uri。

示例代码

以 sysdba 身份登录:

$ sqlplus sys/<your_admin_pws>@localhost as sysdba
Run Code Online (Sandbox Code Playgroud)

然后执行这个:

create pluggable database MYDATABASE
admin user Scott identified by tiger;
file_name_convert = ('/pdbseed/', '/mydatabase/')
;

alter pluggable database MYDATABASE open;
Run Code Online (Sandbox Code Playgroud)

那么您可能想向用户 Scott 授予一些权限:从 @localhost 注销并以 sysdba 身份重新登录到您的新数据库

$ sqlplus sys/<your_admin_pws>@localhost/MYDATABASE as sysdba
Run Code Online (Sandbox Code Playgroud)

并授予斯科特任何你想要的许可,例如

grant connect to Scott;
grant create view to Scott;
grant create table to Scott;
grant create trigger to Scott;
Run Code Online (Sandbox Code Playgroud)

现在您可以开始了:您有一个空的数据库实例和一个用户。只需通过执行以下操作即可登录

$ sqlplus Scott/tiger@localhost/MYDATABASE
Run Code Online (Sandbox Code Playgroud)

奖金

之后我遇到了表空间和配额问题。登录sqlplus sys/<your_admin_pws>@localhost/MYDATABASE as sysdba

您可以列出所有表空间

SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM USER_TABLESPACES;
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令创建一个新表空间

CREATE TABLESPACE TABLESPACENAME DATAFILE 'tablespace_datafile.dat' SIZE 10M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 200M;
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令删除损坏的表空间

Drop tablespace TABLESPACENAME including contents and datafiles;
Run Code Online (Sandbox Code Playgroud)

您可以向 Scott 授予对表空间的“访问”权限

alter user Scott quota unlimited on TABLESPACENAME;
Run Code Online (Sandbox Code Playgroud)

注意quota unlimited可能是一个不好的做法,请检查 oracle 文档以了解如何限制用户的配额


小智 13

SQL> alter session set "_ORACLE_SCRIPT"=true;  
SQL> create user sec_admin identified by "Chutinhbk123@!";
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您遇到完全相同的错误,请执行以下操作:

1)打开CMD类型sqlplus并按Enter

2)从系统登录连接

3)运行命令: alter session set“ _ORACLE_SCRIPT” = true;

4)创建另一个用户运行命令: CREATE USER username IDENTIFIED BY password;

然后,您可以添加用户和角色。


big*_*heo 9

在此输入图像描述 在multinant oracle版本12或更高版本下,有两种类型的用户:

  1. 全球用户,属于CBD容器。要在此容器中创建用户,您必须执行 Create userc##username identified by passwod;
  2. 本地用户:属于 PDBS 数据库(是与父 CBD 容器相关的元素)。您使用的语法与本地用户的创建相匹配。

如果您使用可插入数据库(PDBS),请执行以下操作来解决您的问题:

create user c##Scott identified by tiger; 
Run Code Online (Sandbox Code Playgroud)

注意:您必须在用户名前添加c## 。


Roh*_*hou 7

就我而言,在默认安装 oracle 后,我首先连接到orcl导致问题的原因。并重新连接到orclpdb(可插拔数据库,PDB)解决问题。

在此输入图像描述 在此输入图像描述


SAR*_*SAR 6

这部分可能会解决您的问题。

更改会话集“_oracle_script”=true;

按照这个:

> sqlplus /nolog
> connect sys / as sysdba
> alter session set "_oracle_script"=true;
> create user user1 identified by 1;
Run Code Online (Sandbox Code Playgroud)

并且用户已创建..