ORA-01920

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORA-01920相关的知识,希望对你有一定的参考价值。

一、最近在弄数据库迁移的事情(oracle10g),查询数据库当前用户授出权限的表及视图给了哪些用户的:
select grantee,owner,table_name,grantor,privilege from user_tab_privs;
发现其中有个AIX用户有查询当前数据库用户所有表的权限的,但实际这个AIX用户并不存在的,我怎么也没有找到这个用户,不知道之前维护人员是怎么遗留下来的问题的。

然后我就想重新创建这个用户,结果创建用户时提示如下错误:
ORA-01920:user name ‘AIX‘ conflicts with another user or role name

在网上找了很多资料都说的用户名重合,但用 select username from dba_users;命令查看并没有这个AIX用户,一直不明白是怎么回事的?

二、说明
看到一篇关于“如何更改Oracle中schema或user的名字”文章说:

我们的Oracle管理工作中经常涉及到更改Oracle用户属性、密码之类的常用操作;但在某些应用场景下,会遇到Oracle用户名更改的需求,如何解决?下面通过四个步骤实现Oracle用户名的修改。
1、查询更改Oracle用户名
SQL> select user#,name,password from user$ where name =‘BA‘;

 USER# NAME                           PASSWORD

    71 AIX

2、更改用户名
SQL> update user$ set name= ‘BA_BAK‘ where user#=71; 1 row updated.
SQL> commit;

3、创建同样的Oracle用户名
SQL> create user BA identified by "123";
create user BA identified by "123"
*
ERROR at line 1:
ORA-01920: user name ‘BA‘ conflicts with another user or role name

这时系统会提示“用户名冲突”,运行下面的SQL语句

SQL> alter system checkpoint; ----强制写入数据文件
System altered.
SQL> alter system flush shared_pool; ----清楚缓存数据字典信息,
----强制oracle读实际数据(即更改后的数据)
System altered.

4、在重新创建相同的用户名
SQL> create user BA identified by "123";
User created.
SQL> grant connect to BA;
SQL> commit;
  这样基本完成Oracle用户名的查找、更改、替换、复制等操作,需要注意的是用户名冲突的排查和解决,以防发生后患。

三、解决方法:关于我的用户不存在但又不创建问题

1、查询Oracle用户名
SQL>  select user#,name,password from user$ where name =‘AIX‘;

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        81 AIX

2、删除用户名
SQL> delete from user$ where name=‘AIX‘;
SQL> commit;

3、创建同样的Oracle用户名
SQL> create user AIX identified by "123";
create user aix identified by "123"
            *
ERROR at line 1:
ORA-01920: user name ‘AIX‘ conflicts with another user or role name

这时系统会提示“用户名冲突”,运行下面的SQL语句

SQL> alter system checkpoint;    ----强制写入数据文件  
System altered.  
SQL> alter system flush shared_pool;  ----清楚缓存数据字典信息,
----强制oracle读实际数据(即更改后的数据)  
System altered.

4、在重新创建相同的用户名
SQL> create user aix identified by "123";
User created.
SQL> grant connect to aix;
SQL> commit;

  这样基本完成Oracle用户名的查找、更改、替换、复制等操作,需要注意的是用户名冲突的排查和解决,以防发生后患。

5、oracle 数据库版本达到11.2.0.2以上,可以使用隐含参数_enable_rename_user来修改。

SQL> select version from v$instance ;

VERSION
----------------------------------
11.2.0.3.0

SQL> alter system set "_enable_rename_user"=true scope=spfile ;

System altered.

SQL> startup restrict force;

SQL> alter user dexter rename to dexter000 identified by xiaojun ;

User altered.

SQL>  alter system set "_enable_rename_user"=false scope=spfile;

System altered.

以上是关于ORA-01920的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数