千家信息网

Oracle 11gR2 用户重命名(rename user)

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,11.2.0.2里新增了一个新特性--用户重命名(Rename User),在这个版本之前要想重命名用户,需要按用户导出,再fromuser touser(imp)或remap_schem(impdp
千家信息网最后更新 2025年01月21日Oracle 11gR2 用户重命名(rename user)

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 ProductionPL/SQL Release 11.2.0.4.0 - ProductionCORE    11.2.0.4.0      ProductionTNS for Linux: Version 11.2.0.4.0 - ProductionNLSRTL Version 11.2.0.4.0 - Production

1、创建测试用户及测试表

sys@ORCL>create user sq identified by "sq";User created.sys@ORCL>grant connect,resource to sq; Grant succeededsys@ORCL>create table sq.t1 as select * from dba_tables; Table created.

2、执行alter user语句

sys@ORCL>alter user sq rename to zlx identified by "zlx";alter user sq rename to zlx identified by "zlx"              *ERROR at line 1:ORA-00922: missing or invalid option

报错无效的操作,原来是需要修改隐含参数"_enable_rename_user"

3、修改隐含参数"_enable_rename_user",并以restrict模式重启数据库

sys@ORCL>alter system set "_enable_rename_user"=true scope=spfile; System altered. sys@ORCL>startup restrict force;ORACLE instance started. Total System Global Area 1620115456 bytesFixed Size                    2253704 bytesVariable Size                  956304504 bytesDatabase Buffers          654311424 bytesRedo Buffers                    7245824 bytesDatabase mounted.Database opened.

4、再次执行alter user语句,重命名用户

sys@ORCL>alter user sq rename to zlx identified by "zlx"; User altered.sys@ORCL>select count(*) from sq.t1;select count(*) from sq.t1                        *ERROR at line 1:ORA-00942: table or view does not exist  sys@ORCL>select count(*) from zlx.t1;   COUNT(*)----------      2864 sys@ORCL>conn zlx/zlxERROR:ORA-01035: ORACLE only available to users with RESTRICTED SESSION privilege  Warning: You are no longer connected to ORACLE.sys@ORCL>conn / as sysdbaConnected.sys@ORCL>alter system disable restricted session; System altered. sys@ORCL>conn zlx/zlxConnected.zlx@ORCL>select * from tab; TNAME                                           TABTYPE                  CLUSTERID------------------------------------------ --------------------- ----------T1                                               TABLE

从上面的结果来看用户名重命名成功。

5、reset隐含参数"_enable_rename_user"并重启数据库

sys@ORCL>alter system reset "_enable_rename_user";

System altered.

下面来看直接修改数据字典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;

1 row updated.

sys@ORCL>commit;

Commit complete.

sys@ORCL>conn sq/zlx;

Connected.

网上还提到update完后,需要alter system checkpoint;和alter system flush shared_pool;,从上面的操作来看好象更简单一些,但user$作为oracle的核心基表之一,修改数据字典会不会造成系统不稳定产生ora-600错误等等都不好说,所以生产上一定要慎重。

参考:http://www.linuxidc.com/Linux/2014-04/100166.htm

http://ylw6006.blog.51cto.com/470441/799261/

0