Oracle 11gR2 使用者重新命名(rename user)

studywell發表於2017-12-24


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部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2149187/,如需轉載,請註明出處,否則將追究法律責任。

相關文章