ITPub博客

首页 > 数据库 > Oracle > 关于修改objects的owner

关于修改objects的owner

原创 Oracle 作者:ddba 时间:2019-07-03 11:00:06 0 删除 编辑
由于需要把大量表从不同用户exp出来,才有此想法。试想好几百张表按表exp是什么概念~[@more@]

http://www.itpub.net/696709.html

和大家讨论了一下,发现除了create table table_name as select ...;之外没有什么好的方法。我开始也是想这样做,但是考虑到表很多而且记录数非常大,不想这样做。toms_zhang的这句话是不错的:很多发明创造,就是因为人太懒了。看来懒未必就是坏事~

摘录下toms_zhang的一个例子:

下code仅供娱乐,不要乱试,否则我不负责的

SQL> startup
ORACLE 例程已经启动。

Total System Global Area 125829120 bytes
Fixed Size 1247660 bytes
Variable Size 83887700 bytes
Database Buffers 37748736 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> conn study/study
已连接。
SQL> create table toms_test as select * from dba_objects;
表已创建。
SQL> select count(*) from toms_test;
COUNT(*)
----------
50378
SQL>
SQL> select owner,object_name from dba_objects where object_name='TOMS_TEST';

OWNER OBJECT_NAME
----------- ----------------------
STUDY TOMS_TEST
SQL>
SQL> create user toms identified by toms default tablespace study;
用户已创建。
SQL> grant connect,resource to toms;
授权成功。
SQL>
SQL> conn /as sysdba
已连接。
SQL> select user#,name from user$ where name in ('STUDY','TOMS');
USER# NAME
---------- ------------------------------
61 STUDY
64 TOMS
SQL>
SQL> select obj#,owner#,name from obj$ where name='TOMS_TEST';
OBJ# OWNER# NAME
---------- ---------- ------------------------------
53446 61 TOMS_TEST
SQL> update obj$ set owner#=64 where name='TOMS_TEST';
已更新 1 行。
SQL> commit;
提交完成。
SQL> select obj#,owner#,name from obj$ where name='TOMS_TEST';

OBJ# OWNER# NAME
---------- ---------- ------------------------------
53446 64 TOMS_TEST
SQL>
SQL> select owner,object_name from dba_objects where object_name='TOMS_TEST';

OWNER OBJECT_NAME
----------- ----------------------
TOMS TOMS_TEST
SQL>
SQL> conn toms/toms
已连接。
SQL> select table_name from tabs;
TABLE_NAME
------------------------------
TOMS_TEST
SQL> select count(*) from toms_test;
COUNT(*)
----------
50378
SQL> conn study/study
已连接。
SQL> select table_name from tabs;
未选定行
SQL>
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 125829120 bytes
Fixed Size 1247660 bytes
Variable Size 88082004 bytes
Database Buffers 33554432 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
SQL> select count(*) from toms.toms_test;
COUNT(*)
----------
50378
SQL>

oracle怎么不考虑到这种情况 增加各和rename tablespace差不多的功能 可以直接修改OBJECTS的owner 多好!

yangtingkun:

biti研究过通过修改数据字典的方式修改表的OWNER。
但是biti自己都不会用这个方式来进行这种操作。
如果你敢用,去深入区去找biti的帖子吧~

ZALBB:

两码事,TABLESPACE只供存储使用,而OWNER则是数据库系统
管理对象的基础,绝大多数对象都是基于OWNER概念来管理,
OWNER 涉及到的范围太广,权限,约束,过程等等,即便ORACLE提供这个功能,你也要考虑清清楚楚才敢动手。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7794469/viewspace-887166/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2006-09-21

  • 博文量
    31
  • 访问量
    23953