使用“基表修改法”快速修改Oracle使用者名稱(z)

lwitpub發表於2009-12-21

Oracle中沒有提供直接修改使用者名稱的方法,即使在11gR2中也沒有提供具體的手段。由於沒有直接修改使用者名稱的方法,因此在Oracle中若要修改使用者名稱,通常是比較周折的。通常修改使用者名稱的一種方法是:重新建立一個新使用者,把原使用者中的資料使用EXP/IMP方法遷移到新使用者中,最後刪除原使用者。如果使用者所包含的資料量非常的巨大,這個過程將相當的耗時,對系統的衝擊也比較大。
有沒有更好的方法來完成這個修改使用者名稱的方法呢?這裡給出一個透過修改Oracle資料庫基表USER$達到修改Oracle使用者名稱的目的。

1.在基表user$中檢視待修改使用者TEST的基本資訊

SQL> conn /as sysdba
Connected.

SQL> select user#,name,password from user$ where name ='TEST';

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        91 TEST                           7A0F2B316C212D67
注意:裡面存放的使用者都是大寫!

2.直接使用update語句將USER#列修改為新的使用者名稱SECOOLER
1)修改
SQL> update user$ set name='SECOOLER' where user#=91;

1 row updated.
2)提交
SQL> commit;

Commit complete.
3)確認修改完畢
SQL> select user#,name,password from user$ where USER# = 91;

     USER# NAME                           PASSWORD
---------- ------------------------------ ------------------------------
        91 SECOOLER                       7A0F2B316C212D67
3.為使新使用者的密碼生效,我們嘗試重置新使用者名稱SECOOLER的密碼
SQL> alter user secooler identified by secooler;

User altered.
4. 測試連線

SQL> conn secooler/secooler
Connected.

說明:以上是在oracle11g 11.1.0.6.0 版本測試成功。

以下是在oracle10g的版本上執行。
4.手工執行檢查點操作,將Database Buffer Cache中的資料強制寫出到外存,這一步驟不是關鍵。
SQL>  alter system checkpoint;

System altered.

5.關鍵步驟在此--強制重新整理Shared Pool!因為Oracle的資料字典資訊是快取在Shared Pool的Dictionary Cache中的。
SQL> alter system flush shared_pool;

System altered.

6.開始修改SECOOLER的密碼,成功!整個透過基表修改方法修改使用者名稱的操作全部完成。
1)修改密碼,成功。
SQL> alter user secooler identified by secooler;

User altered.

2)確認密碼確實發生了變化
SQL> select user#,name,password from user$ where USER# = 65;

     USER# NAME                           PASSWORD
----------  ------------------------------   ------------------------------
   91  SECOOLER                        7A0F2B316C212D67

3)測試新使用者的可用性
SQL> conn secooler/secooler
Connected.
SQL>  show user
USER is "SECOOLER"

7.小結
在修改完基表後,更徹底的使其生效的方法是重新啟動資料庫。不過無論是使用“flush shared_pool”還是“startup force;”對於執行要求比較高的生產系統來說都會面臨資料庫短暫無法提供服務的情況。因此,在使用這種方法之前同樣需要做好計劃,預見到影響。
注意:不建議使用這種方法來修改使用者名稱,早期規劃並嚴格按照規範執行避免使用者名稱的隨意修改才是正途。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/628922/viewspace-623141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章