Welcome 微信登录

首页 / 数据库 / MySQL / 如何更改Oracle中schema或user的名字

开发人员有个需求,要求把某个schema中所有对象移到另一个shema中,后来一想,不就是把schema的名字改了就可以了吗?这样就不用移来移去的,准备用DDL语句直接改的:
  1. alter user scott rename to scott2;  
发现根本没有这个语句,后来在网上查了一下,才发现,Oracle本身没有提供这个功能的语句,但有一个数据字典的表:user$,所有的用户都存在这张表中,可以直接update,就尝试着改了一下,发现还挺管用的,实现如下:
  1. SQL> desc user$;   --查看表结构www.linuxidc.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.linuxidc.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  
Oracle RAC环境下vip/public/private IP的区别Oracle中大批量删除数据的方法相关资讯      Oracle数据库  Oracle入门教程  oracle数据库教程 
  • Oracle数据库全球化  (03月01日)
  • Oracle数据库日期过滤方法性能比较  (02/02/2015 13:20:26)
  • Oracle数据库安装中端口被占用问题  (10/29/2014 07:42:24)
  • 在CentOS 6.6上搭建C++运行环境并  (10/10/2015 19:44:40)
  • Oracle数据库无法使用localhost和  (11/14/2014 16:39:10)
  • 使用SQLT来构建Oracle测试用例  (08/28/2014 06:17:41)
本文评论 查看全部评论 (0)
表情: 姓名: 字数