码迷,mamicode.com
首页 > 其他好文 > 详细

ORA-01920

时间:2018-05-10 15:33:34      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:ORA-01920   更改Oracle中schema或use   oracle创建用户重名   

一、最近在弄数据库迁移的事情(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

标签:ORA-01920   更改Oracle中schema或use   oracle创建用户重名   

原文地址:http://blog.51cto.com/meiling/2114794

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!