【USER】使用“基表修改法”快速修改Oracle使用者名稱

secooler發表於2009-11-28
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                            9EC74A4FC0A9E227

2.直接使用update語句將USER#列修改為新的使用者名稱SECOOLER
1)修改
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                       9EC74A4FC0A9E227

3.為使新使用者的密碼生效,我們嘗試重置新使用者名稱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                       034E4342BB2D437D

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

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

Good luck.

secooler
09.11.29

-- The End --

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

相關文章