错误:ORA-65096:Oracle中无效的普通用户或角色名称


118

我刚刚安装了oracle11g,但缺少了Scott模式。所以我想自己生成它。我得到了“ Scott”模式的SQL脚本,但是当我尝试运行查询“创建由老虎标识的用户Scott”时,它显示以下错误:

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

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


8
那是不可能的11g,你应该继续12c
Lalit Kumar B

也许您安装了11g客户端,但是要连接到12c数据库?您究竟安装了什么?
亚历克斯普尔

在用户名之前附加C ##。
Sathvik

Answers:


344

危险

仅在Oracle支持的指导下设置像这样的未记录参数(如前划线所指示)。在没有此类指导的情况下更改此类参数可能会使您的支持合同无效。这样做的后果自负。

具体来说,如果您设置"_ORACLE_SCRIPT"=true,则会在ORACLE_MAINTAINED列设置为'Y'的情况下进行一些数据字典更改。这些用户和对象将被错误地从某些DBA脚本中排除。并且它们可能不正确地包含在某些系统脚本中。

如果您可以接受上述风险,并且不想以正确的方式创建普通用户,请使用以下答案。


在创建用户运行之前:

alter session set "_ORACLE_SCRIPT"=true;  

我在这里找到答案


6
请注意,它是一个隐藏参数,仅在Oracle支持人员推荐时才使用。
Lalit Kumar B

5
在生产系统中使用下划线(隐藏)参数是危险的,因为这可能会使您的支持合同无效。因此,您应该建议人们在没有给予适当警告的情况下进行设置。
APC

3
这是错误的,并且在oracle中不受支持,我使用了它,并且导致了另一个内部问题。
Firas Nizam

1
它适用于Oracle Database 18c Express Edition 18.0.0.0.0版-生产
Vitalie,

2
@Victor-因为只有在Oracle支持人员的指导下,我们才允许更改它们。就像我说的那样,将未记录的参数设置为我们自己的命题可能会使我们的支持合同无效。更一般而言,Oracle的已记录和未记录参数的默认设置通常对所有应用程序都适用,无需更改。调整下划线参数会吸引那些喜欢使用奥术的人,这是进行调整的最糟糕原因。但是,如果您不需要担心支持合同,则可以选择以任何方式冒着损坏系统的风险;-)
APC

55

我刚安装了oracle11g

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

不,您已经安装了Oracle 12c。该错误只能存在12c,而不能存在11g

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

SELECT banner FROM v$version WHERE ROWNUM = 1;

Oracle 12c多租户容器数据库具有:

  • 根容器(CDB
  • 和/或零,一个或多个可插拔数据库(PDB)。

您必须已将该数据库创建为容器数据库。在尝试在容器(即CDB $ ROOT)中创建用户时,应在PLUGGABLE数据库中创建用户。

您不应该在容器中创建与应用程序相关的对象,容器包含可插入数据库的元数据。您应该对常规数据库操作使用可插拔数据库。否则,请勿将其创建为容器,也不要使用多租户。但是,从12cR2开始,您无论如何都无法创建非容器数据库。

而且很可能已经安装了示例模式,您只需要在可插入数据库中解锁它们即可。

例如,如果您将可插入数据库创建为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"

要显示PDB并从根容器连接到可插入数据库:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

我建议阅读,Oracle 12c安装后强制性步骤


注意_ORACLE_SCRIPT在生产系统中,建议使用hidden参数设置为true的答案很危险,并且还可能使您的支持合同无效。当心,未经咨询Oracle支持,请勿使用隐藏参数


上面的链接“ Oracle 12c安装后必需步骤”已断开。新链接:docs.oracle.com/database/121/LADBI/post_inst_task.htm#LADBI8084
Heri,

@Heri你确定吗?因为它运行良好,所以Oracle 12c安装后强制性步骤
Lalit Kumar B

46

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

  1. 容器数据库(CDB),以及
  2. 可插拔数据库(PDB)。

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

  1. 您可以创建“容器用户”或“普通用户”。
    普通用户既属于CBD,也属于当前和将来的PDB。这意味着它们可以根据分配的特权在Container DB或Pluggable DB中执行操作。

    create user c##username identified by password;

  2. 您可以创建一个“可插入用户”,也称为“本地用户”。
    本地用户仅属于一个PDB。可以为这些用户提供管理特权,但只能为其存在的那个PDB提供管理特权。为此,您应该像这样连接到可插拔数据源:

    alter session set container = nameofyourpluggabledatabase;

    在这里,您可以像通常那样创建用户:

    create user username identified by password;

不要忘记指定要使用的表空间,这在导入/导出数据库时很有用。请参阅此以获取有关它的更多信息https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503


这个答案的样式是我最喜欢的,易于使用。
pzy

0

更改会话集“ _ORACLE_SCRIPT” = true;

创建由“ Chutinhbk123 @!”标识的用户sec_admin;


-1

创建用户对数据库连接工具的依赖

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer

3
您能否正确设置代码格式,并提供一些上下文说明为什么此方法比其他答案更能解决问题?
Nico Haase

-1

可能,更安全的替代"_ORACLE_SCRIPT"=true是改变"_common_user_prefix"C##一个空字符串。如果为空,则任何名称均可用于普通用户。发现在那里

在更改该值的过程中,您可能会遇到另一个问题-ORA-02095-无法修改参数,可以根据您的配置()以多种方式对其进行修复。

所以对我来说,

alter system set _common_user_prefix = ''; scope=spfile;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.