Oracle 11.2.0.2新特性——用戶重命名(Rename User)


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 (會刪除此用戶名下的所有表和視圖)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM