首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 使用者名稱變更四步法:查詢、更名、衝突解決、重建授權

     編輯:Oracle 資料庫基礎

業務場景

系統整合、帳號規範調整、測試帳號轉正等情況需變更 Schema 名稱。Oracle 無直接 RENAME USER 指令,需採「改舊名→建新名→同步權限」策略。

步驟一:查詢目標用戶資訊


SELECT USER#, NAME, PASSWORD FROM USER$ WHERE NAME = 'TICKETS';
-- 結果範例
USER#  NAME      PASSWORD
-----  --------  ------------------------------
78     TICKETS   21EDA78F89D6FACD

步驟二:將舊用戶改名為備份名稱


UPDATE USER$ SET NAME = 'TICKETS_BAK' WHERE USER# = 78;
COMMIT;

步驟三:建立同名新用戶(會遇到衝突)


CREATE USER tickets IDENTIFIED BY "123456"
DEFAULT TABLESPACE yytickets
TEMPORARY TABLESPACE temp;
-- 錯誤:ORA-01920: user name 'TICKETS' conflicts with another user or role name

步驟四:強制刷新字典快取,解決衝突


ALTER SYSTEM CHECKPOINT;           -- 強制寫入資料檔
ALTER SYSTEM FLUSH SHARED_POOL;    -- 清除字典快取,強制重讀 USER$

步驟五:再次建立新用戶並授權


CREATE USER tickets IDENTIFIED BY "123456"
DEFAULT TABLESPACE yytickets
TEMPORARY TABLESPACE temp;
-- User created.

GRANT CONNECT, RESOURCE TO tickets;
COMMIT;

後續必要動作

  • 將原 TICKETS_BAK 物件遷移至新 TICKETS(ALTER TABLE ... RENAME、EXP/IMP、DBMS_METADATA 等)
  • 同步所有相關 Database Link、同義詞、應用程式連線字串
  • 驗證無誤後可 DROP USER TICKETS_BAK CASCADE;

風險提醒

  1. 直接更新 USER$ 屬非支援操作,僅限極特殊情況,且需完整備份
  2. 生產環境建議採 EXP/IMP 或 Data Pump 重建 Schema,較安全
  3. 務必處理 SHARED_POOL 快取衝突,否則新用戶無法建立
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved