Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63002
  • 博文数量: 13
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 260
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 09:09
文章分类

全部博文(13)

文章存档

2010年(1)

2008年(12)

我的朋友

分类: Oracle

2008-03-19 10:57:14

实际工作中,有时候需要修改用户名,而通常的做法是exp imp这样的方式,而如果数据量大的话exp imp的方式会很浪费时间,所以下面写上如何通过修改ORACLE基表的方式来修改用户名。

-- 直接修改底层表USER$更改用户名(该方法在Oracle9i中测试通过)


SQL> UPDATE USER$ SET NAME='TT' WHERE USER#=91;

已更新 1 行。


SQL> COMMIT;


提交完成。


SQL> ALTER SYSTEM CHECKPOINT;


系统已更改。


SQL> ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890';
ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890'
*
ERROR 位于第 1 行:
ORA-01918: 用户'TT'不存在


  强制 Oracle 读取实际数据,而不是读取缓存



SQL> ALTER SYSTEM FLUSH SHARED_POOL;


系统已更改。


SQL> ALTER USER TT IDENTIFIED BY VALUES '294CE6E7131DD890';


用户已更改。


  测试连接



SQL> CONN TT/TT
已连接。


SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TEST_TT TABLE


SQL> CONN / AS SYSDBA
已连接。
SQL> SHOW USER
USER 为"SYS"


SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP
ORACLE 例程已经启动。
......
数据库装载完毕。
数据库已经打开。


  可以看出没有再恢复为TEST



SQL> SELECT USER#,NAME,PASSWORD FROM USER$ WHERE USER#=91;


USER# NAME PASSWORD
---------- ------------------------------ ----------------
91 TT 294CE6E7131DD890


SQL> CONN TT/TT
已连接。


  查看数据对象



SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TEST_TT TABLE


SQL> SELECT * FROM TEST_TT;


A
-
A


  对象权限依然有效



SQL> SELECT * FROM TEST1.TEST1_TT;


A
-
A


  系统权限依然有效



SQL> CREATE TABLE KK AS SELECT * FROM TEST1.TEST1_TT;


表已创建。


SQL> SELECT * FROM TAB;


TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
KK TABLE
TEST_TT TABLE


SQL> CONN / AS SYSDBA
已连接。
SQL> SHOW USER
USER 为"SYS"


--DROP USER 也没有问题
SQL> DROP USER TT CASCADE;


用户已丢弃


SQL> DROP USER TEST1 CASCADE;


用户已丢弃

阅读(879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~