如何更改Oracle中schema或user的名字


开发人员有个需求,要求把某个schema中所有对象移到另一个shema中,后来一想,不就是把schema的名字改了就可以了吗?这样就不用移来移去的,准备用DDL语句直接改的:
  1. alter user scott rename to scott2;  

发现根本没有这个语句,后来在网上查了一下,才发现,Oracle本身没有提供这个功能的语句,但有一个数据字典的表:user$,所有的用户都存在这张表中,可以直接update,就尝试着改了一下,发现还挺管用的,实现如下:

  1. SQL> desc user$;   --查看表结构www.bkjia.com   
  2.  Name                                      Null?    Type  
  3.  ----------------------------------------- -------- --------------   
  4.   
  5.  USER#                                     NOT NULL NUMBER  
  6.  NAME                                      NOT NULL VARCHAR2(30)  
  7.  TYPE#                                     NOT NULL NUMBER  
  8.  PASSWORD                                           VARCHAR2(30)  
  9.  DATATS#                                   NOT NULL NUMBER  
  10.  TEMPTS#                                   NOT NULL NUMBER  
  11.  CTIME                                     NOT NULL DATE  
  12.  PTIME                                              DATE  
  13.  EXPTIME                                            DATE  
  14.  LTIME                                              DATE  
  15.  RESOURCE$                                 NOT NULL NUMBER  
  16.  AUDIT$                                             VARCHAR2(38)  
  17.  DEFROLE                                   NOT NULL NUMBER  
  18.  DEFGRP#                                            NUMBER  
  19.  DEFGRP_SEQ#                                        NUMBER  
  20.  ASTATUS                                   NOT NULL NUMBER  
  21.  LCOUNT                                    NOT NULL NUMBER  
  22.  DEFSCHCLASS                                        VARCHAR2(30)  
  23.  EXT_USERNAME                                       VARCHAR2(4000)  
  24.  SPARE1                                             NUMBER  
  25.  SPARE2                                             NUMBER  
  26.  SPARE3                                             NUMBER  
  27.  SPARE4                                             VARCHAR2(1000)  
  28.  SPARE5                                             VARCHAR2(1000)  
  29.  SPARE6                                             DATE  
  30.   
  31. SQL> select user#,name from userwhere name='SCOTT'--找出需要更改的用户   
  32.   
  33.      USERNAME  
  34. ---------- ------------------------------   
  35.         84 SCOTT  
  36.   
  37. SQL> select count(*) from scott.emp;   
  38.   
  39.   COUNT(*)  
  40. ----------   
  41.         14  
  42.   
  43. SQL> update userset name='SCOTT2' where user#=84; --更改用户名   
  44.   
  45. 1 row updated.  
  46.   
  47. SQL> commit;  --记得提交 www.bkjia.com  
  48. Commit complete.  
  49.   
  50.   
  51. SQL> select count(*) from scott.emp;  
  52.   
  53.   COUNT(*)  
  54. ----------   
  55.         14  
  56.   
  57. SQL>  alter system checkpoint;  
  58. System altered.  
  59.   
  60. SQL> select count(*) from scott.emp;  
  61.   
  62.   COUNT(*)  
  63. ----------   
  64.         14  
  65.   
  66. SQL> alter system flush shared_pool; --刷新shared_pool   
  67. System altered.  
  68.   
  69. SQL> select count(*) from scott.emp;  
  70. select count(*) from scott.emp  
  71.                            *  
  72. ERROR at line 1:  
  73. ORA-00942: table or view does not exist  
  74.   
  75.   
  76. SQL> select count(*) from scott2.emp; --已经更改成功   
  77.   
  78.   COUNT(*)  
  79. ----------   
  80.         14  

相关内容