Oracle 11gR2 用户重命名(rename user)
Oracle 11.2.0.2里新增了一个新特性——用户重命名(Rename User),在这个版本之前要想重命名用户,需要按用户导出,再fromuser touser(imp)或remap_schem(impdp)。还可以通过修改数据字典user$的方式来重命名用户,但这种方法可能会带来风险。有了这个特性之后,可以通过alter user oldname rename to newname identified by "password";一条命令来重命名用户。
下面来看测试过程,使用Oracle版本11.2.0.4
sys@ORCL>select * from v$version;
BANNER
-------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
1、创建测试用户及测试表
create user sq identified by "sq";
grant connect,resource to sq;
create table sq.t1 as select * from dba_tables;
2、修改隐含参数"_enable_rename_user",并以restrict模式重启数据库
alter system set "_enable_rename_user"=true scope=spfile;
startup restrict force;
3、执行alter user语句,重命名用户
alter user sq rename to zlx identified by "zlx";
--查看用户对象
sys@ORCL>select count(*) from sq.t1;
--提示不存在
sys@ORCL>select count(*) from zlx.t1;
--表存在
4、恢复数据库运行
conn / as sysdba
alter system disable restricted session;
conn zlx/zlx
select * from tab;
从上面的结果来看用户名重命名成功。
5、reset隐含参数"_enable_rename_user"并重启数据库
sys@ORCL>alter system reset "_enable_rename_user";
--------------------------------------------------------------------------
下面来看直接修改数据字典user$的方法:
sys@ORCL>select user#,name from user$ where name='ZLX';
USER# NAME
---------- --------
94 ZLX
sys@ORCL>update user$ set name='SQ' WHERE USER#=94;
--提示权限不足
sys@ORCL>commit;
sys@ORCL>conn sq/zlx;
网上还提到update完后,需要alter system checkpoint;和alter system flush shared_pool;,从上面的操作来看好象更简单一些,但user$作为oracle的核心基表之一,修改数据字典会不会造成系统不稳定产生ora-600错误等等都不好说,所以生产上一定要慎重。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29519108/viewspace-2149187/
,如需转载,请注明出处,否则将追究法律责任。