您的位置:首页 > 数据库 > Oracle

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

2016-08-19 20:36 411 查看
注:此文提供的方法非官方解决方法,正式环境下,保险起见,请不要滥用,以免引起不可逆的隐含问题。

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

[sql] view
plain copy

alter user scott rename to scott2;  

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

[sql] view
plain copy

SQL> desc user$;   --查看表结构  

 Name                                      Null?    Type  

 ----------------------------------------- -------- --------------  

  

 USER#                                     NOT NULL NUMBER  

 NAME                                      NOT NULL VARCHAR2(30)  

 TYPE#                                     NOT NULL NUMBER  

 PASSWORD                                           VARCHAR2(30)  

 DATATS#                                   NOT NULL NUMBER  

 TEMPTS#                                   NOT NULL NUMBER  

 CTIME                                     NOT NULL DATE  

 PTIME                                              DATE  

 EXPTIME                                            DATE  

 LTIME                                              DATE  

 RESOURCE$                                 NOT NULL NUMBER  

 AUDIT$                                             VARCHAR2(38)  

 DEFROLE                                   NOT NULL NUMBER  

 DEFGRP#                                            NUMBER  

 DEFGRP_SEQ#                                        NUMBER  

 ASTATUS                                   NOT NULL NUMBER  

 LCOUNT                                    NOT NULL NUMBER  

 DEFSCHCLASS                                        VARCHAR2(30)  

 EXT_USERNAME                                       VARCHAR2(4000)  

 SPARE1                                             NUMBER  

 SPARE2                                             NUMBER  

 SPARE3                                             NUMBER  

 SPARE4                                             VARCHAR2(1000)  

 SPARE5                                             VARCHAR2(1000)  

 SPARE6                                             DATE  

  

SQL> select user#,name from user$ where name='SCOTT'; --找出需要更改的用户  

  

     USER# NAME  

---------- ------------------------------  

        84 SCOTT  

  

SQL> select count(*) from scott.emp;   

  

  COUNT(*)  

----------  

        14  

  

SQL> update user$ set name='SCOTT2' where user#=84; --更改用户名  

  

1 row updated.  

  

SQL> commit;  --记得提交  

Commit complete.  

  

  

SQL> select count(*) from scott.emp;  

  

  COUNT(*)  

----------  

        14  

  

  

SQL> alter system flush shared_pool; --刷新shared_pool  

System altered.  

  

SQL> select count(*) from scott.emp;  

select count(*) from scott.emp  

                           *  

ERROR at line 1:  

ORA-00942: table or view does not exist  

  

  

SQL> select count(*) from scott2.emp; --已经更改成功  

  

  COUNT(*)  

----------  

        14  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: