如何更改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
前两天开发人员有个需求,要求把某个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
相关文章推荐
- 如何更改ORACLE中schema或user的名字
- Oracle Faq(如何在ORACLE中更改表的列名和顺序 )
- 如何加密Oracle中的存储过程,从而在schema下看不到其源码?
- 如何处理更改计算机名称导致oracle无法启动
- Schema and Difference between user and schema oracle
- Oracle服务器更改了名字,不能启动的解决方法
- 如何更改ORACLE 用户的 expired状态
- 如何处理更改计算机名称导致oracle无法启动
- 深入理解user和schema --oracle 数据库
- Oracle Schema名字和Object名字相同时带来的问题
- Access新手来看:如何更改表/窗体/报表...得名字
- 如何通过Sqlplus创建一个oracle的user
- 安装oracle 10g时,服务器的名字不能随意更改。
- Access新手来看:如何更改表/窗体/报表...得名字
- 如何更改oracle是spfile参数值
- 如何在Oracle更改SID名称
- Oracle的schema,user
- oracle USER 与 Schema 的关系与区别
- Oracle VM VirtualBox做好虚拟硬盘后,如何进一步更改虚拟硬盘的大小
- oracle 10g 如何更改端口号