11.2.0.2里新增了一個很有意思的新特性——用戶重命名(Rename User),以前俺們都是Rename datafile呀,tablespace呀,Index呀,抑或是constraint之類,沒想到User也可以重命名的。據說這個DDL操作的需求是來源於SAP: SAP identifies a specific SAP system by the name of the database schema. If the system is renamed, the schema needs also to be renamed. This happens quite often when a database is copied (i.e. for testing purposes) and the system gets therefore a new name. The schema should also get a new name.
廢話不多說,驗證一下先:
創建測試用戶下一個測試表,查看testusr的ID是84
SQL> CREATE TABLE testusr.emp AS SELECT * FROM scott.emp; SQL> SELECT USERNAME,USER_ID FROM dba_users WHERE created>(sysdate-1); USERNAME USER_ID ------------------------------ ---------- TESTUSR 84
啟用重命名特性需要修改隱含參數“_enable_rename_user”,並需要在restrict mode下Rename
SQL> CREATE pfile FROM spfile; [oracle@cdcjp47 dbhome_1]$ vi dbs/initeastdb.ora -- 添加 *._enable_rename_user=TRUE SQL> shutdown immediate SQL> startup restrict pfile='?/dbs/initeastdb.ora' SQL> ALTER user testusr RENAME TO testusr1 IDENTIFIED BY Welcome1; SQL> SELECT USERNAME,USER_ID FROM dba_users WHERE created>(sysdate-1); USERNAME USER_ID ------------------------------ ---------- TESTUSR1 84 -- 看看數據,都在的,說明Rename User並不影響Object里面的內容 SQL> SELECT * FROM testusr1.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- -------- ---------- ---------- -------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 80-12-17 800 20 7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30 7521 WARD SALESMAN 7698 81-02-22 1250 500 30 7566 JONES MANAGER 7839 81-04-02 2975 20 7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30 7698 BLAKE MANAGER 7839 81-05-01 2850 30 7782 CLARK MANAGER 7839 81-06-09 2450 10 7788 SCOTT ANALYST 7566 87-04-19 3000 20 7839 KING PRESIDENT 81-11-17 5000 10 7844 TURNER SALESMAN 7698 81-09-08 1500 0 30 7876 ADAMS CLERK 7788 87-05-23 1100 20 7900 JAMES CLERK 7698 81-12-03 950 30 7902 FORD ANALYST 7566 81-12-03 3000 20 7934 MILLER CLERK 7782 82-01-23 1300 10
注意新用戶名不要和現有用戶名重名
SQL> ALTER user testusr1 RENAME TO scott IDENTIFIED BY 123; ALTER user testusr1 RENAME TO scott IDENTIFIED BY 123 * ERROR IN Line 1: ORA-00604: error occurred at recursive SQL level 1. ORA-00001:UNIQUE constraint (SYS.I_USER1) violated**************************************************************************
Oracle 暫時不支持Rename Schma/user. 但是可以通過下面的方式實現之.
- Do a user-level export of user A
- create new user B
- import system/manager fromuser=A touser=B
- drop user A
引自: http://www.orafaq.com/wiki/Oracle_database_FAQ#Can_one_rename_a_database_user_.28schema.29.3F
注:
單純的運行 "drop uer 用戶名" 時可能會出現下邊錯誤
ora-01922: CASCADE must be specified to drop 用戶名.
原因: drop user xx (只是刪除用戶)
解決方法: drop user xx cascade (會刪除此用戶名下的所有表和視圖)
