类似源码之家的网站/百度做推广一般要多少钱
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 9EC74A4FC0A9E2272.直接使用update语句将USER#列修改为新的用户名SECOOLER1)修改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 9EC74A4FC0A9E2273.为使新用户的密码生效,我们尝试重置新用户名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 034E4342BB2D437D3)测试新用户的可用性sys@ora10g> conn secooler/secoolerConnected.secooler@ora10g> show userUSER is "SECOOLER"7.小结在修改完基表后,更彻底的使其生效的方法是重新启动数据库。不过无论是使用“flush shared_pool”还是“startup force;”对于运行要求比较高的生产系统来说都会面临数据库短暂无法提供服务的情况。因此,在使用这种方法之前同样需要做好计划,预见到影响。
注意:不建议使用这种方法来修改用户名,早期规划并严格按照规范执行避免用户名的随意修改才是正途。Good luck.
secooler09.11.29-- The End --