Oracle 如何修改用戶名

在實際工作中,有時候需要修改用戶名,而通常的做法是exp imp這樣的方式,而如果數據量大的話exp imp的方式會很浪費時間,所以下面寫上如何通過修改ORACLE基表的方式來修改用戶名。

-- 直接修改底層表USER$更改用戶名(該方法在Oracle9i中測試通過)


SQL> UPDATE USER$ SET NAME='TT' WHERE USER#=91;

已更新 1 行。


SQL> COMMIT;


提交完成。


SQL> ALTER SYSTEM CHECKPOINT;


系統已更改。


SQL> ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890';
ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890'
*
ERROR 位於第 1 行:
ORA-01918: 用戶'TT'不存在


  強制 Oracle 讀取實際數據,而不是讀取緩存



SQL> ALTER SYSTEM FLUSH SHARED_POOL;


系統已更改。


SQL> ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890';


用戶已更改。


  測試連接



SQL> CONN TT/TT
已連接。


SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TEST_TT TABLE


SQL> CONN / AS SYSDBA
已連接。
SQL> SHOW USER
USER 爲"SYS"


SQL> SHUTDOWN IMMEDIATE
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> STARTUP
ORACLE 例程已經啓動。
......
數據庫裝載完畢。
數據庫已經打開。


  可以看出沒有再恢復爲TEST



SQL> SELECT USER#,NAME,PASSWORD FROM USER$ WHERE USER#=91;


USER# NAME PASSWORD
---------- ------------------------------ ----------------
91 TT 294CE6E7131DD890


SQL> CONN TT/TT
已連接。


  查看數據對象



SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TEST_TT TABLE


SQL> SELECT * FROM TEST_TT;


A
-
A


  對象權限依然有效



SQL> SELECT * FROM TEST1.TEST1_TT;


A
-
A


  系統權限依然有效



SQL> CREATE TABLE KK AS SELECT * FROM TEST1.TEST1_TT;


表已創建。


SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
KK TABLE
TEST_TT TABLE


SQL> CONN / AS SYSDBA
已連接。
SQL> SHOW USER
USER 爲"SYS"


--DROP USER 也沒有問題
SQL> DROP USER TT CASCADE;


用戶已丟棄


SQL> DROP USER TEST1 CASCADE;


用戶已丟棄

發佈了171 篇原創文章 · 獲贊 4 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章