ITPub博客

首页 > 数据库 > Oracle > 【USER】使用“基表修改法”快速修改Oracle用户名

【USER】使用“基表修改法”快速修改Oracle用户名

原创 Oracle 作者:OCMU联盟 时间:2009-11-28 23:44:27 0 删除 编辑
Oracle中没有提供直接修改用户名的方法,即使在11gR2中也没有提供具体的手段。
由于没有直接修改用户名的方法,因此在Oracle中若要修改用户名,通常是比较周折的。
通常修改用户名的一种方法是:重新创建一个新用户,把原用户中的数据使用EXP/IMP方法迁移到新用户中,最后删除原用户。如果用户所包含的数据量非常的巨大,这个过程将相当的耗时,对系统的冲击也比较大。
有没有更好的方法来完成这个修改用户名的方法呢?

这里给出一个通过修改Oracle数据库基表USER$达到修改Oracle用户名的目的。

1.在基表user$中查看待修改用户SEC的基本信息
sys@ora10g> select user#,name,password from user$ where name ='SEC';

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        62 SEC                            9EC74A4FC0A9E227

2.直接使用update语句将USER#列修改为新的用户名SECOOLER
1)修改
sys@ora10g> update user$ set name='SECOOLER' where user#=62;

1 row updated.

2)提交
sys@ora10g> commit;

Commit complete.

3)确认修改完毕
sys@ora10g> select user#,name,password from user$ where USER# = 62;

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        62 SECOOLER                       9EC74A4FC0A9E227

3.为使新用户的密码生效,我们尝试重置新用户名SECOOLER的密码
sys@ora10g> alter user secooler identified by secooler;
alter user secooler identified by secooler
           *
ERROR at line 1:
ORA-01918: user 'SECOOLER' does not exist

为什么会报错?
之所以报错是因为此时Oracle并没有感知到这个底层的变化。

怎么样才能让Oracle知道这个变化呢?请继续。

4.手工执行检查点操作,将Database Buffer Cache中的数据强制写出到外存,这一步骤不是关键。
sys@ora10g> alter system checkpoint;

System altered.

5.关键步骤在此--强制刷新Shared Pool!因为Oracle的数据字典信息是缓存在Shared Pool的Dictionary Cache中的。
sys@ora10g> alter system flush shared_pool;

System altered.

6.再次尝试修给SECOOLER的密码,成功!整个通过基表修改方法修改用户名的操作全部完成。
1)修改密码,成功。
sys@ora10g> alter user secooler identified by secooler;

User altered.

2)确认密码确实发生了变化
sys@ora10g> select user#,name,password from user$ where USER# = 62;

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        62 SECOOLER                       034E4342BB2D437D

3)测试新用户的可用性
sys@ora10g> conn secooler/secooler
Connected.
secooler@ora10g> show user
USER is "SECOOLER"

7.小结
在修改完基表后,更彻底的使其生效的方法是重新启动数据库。不过无论是使用“flush shared_pool”还是“startup force;”对于运行要求比较高的生产系统来说都会面临数据库短暂无法提供服务的情况。因此,在使用这种方法之前同样需要做好计划,预见到影响。
注意:不建议使用这种方法来修改用户名,早期规划并严格按照规范执行避免用户名的随意修改才是正途。

Good luck.

secooler
09.11.29

-- The End --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994329/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8406987