暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 更改表或其它对象所有者(modify table schema)

原创 Anbob 2011-01-11
1216
前段时间听到有个网友问有个表在 user1方案里,怎么修改到user2方案
其实普遍的方法是在user2建表 create table xxx as select * from user1.tabname;
也可以exp 从user1/ 再imp user2方案下,这种可以做多个对象的转移,
我在想有没有一种修改基表的方法,轻易的改变方案或所有者,后来成功了,现在分享一下,不建议在生产环境中用
实验开始
目的是在icme下建一个表,修改到topbox用户下。
QL> conn icme/icme
Connected.
SQL> create table test_icme(id int,name varchar2(10));
Table created.
SQL> insert into test_icme
2  values(1,'icme''s tab');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_icme;
ID NAME
---------- ----------
1 icme's tab
SQL> conn / AS SYSDBA
CONNECTED.
SQL> select obj#,owner#,name from obj$ where name like 'TEST_ICME';
OBJ#     OWNER# NAME
---------- ---------- ------------------------------
652485       1341 TEST_ICME
SQL> SELECT USERNAME,USER_ID FROM DBA_USERS ORDER BY 2 DESC ;
USERNAME                          USER_ID
------------------------------ ----------
XIANGYI_HEN                          1357
TOPBOX                               1355
JMJK_QUANGUO                         1354
JMJK_HUN_CHD_SHIMEN                  1353
JMJK_HUB_XIANNING                    1352
JMJK_HEN_YEXIAN                      1351
JMJK_HUN_CHENZHOU                    1350
JMJK_YEXIAN                          1349
JMJKDOC                              1348
SEP                                  1347
OLEM                                 1346
USERNAME                          USER_ID
------------------------------ ----------
EXAM                                 1345
SIEBEL                               1344
KEYAN                                1343
ICME_BEIYI                           1342
ICME                                 1341
ZYY_NEW                              1340
SQL> update obj$ set owner#=1355 where obj#=652485;
1 row updated.
SQL> commit;
Commit complete.
SQL> conn topbox/topbox
Connected.
SQL> select * from test_icme;
ID NAME
---------- ----------
1 icme's tab
SQL> conn icme/icme
Connected.
SQL> select * from test_icme;
ID NAME
---------- ----------
1 icme's tab
这里很奇怪,此时两个用户都可以查询,其实是有原因的,于是shutdown,再starup,可以了。icme下没有了。
SQL> CONN TOPBOX/TOPBOX
Connected.
SQL> SELECT * FROM TEST_ICME;
ID NAME
---------- ----------
1 icme's tab
SQL> CONN ICME/ICME
Connected.
SQL> SELECT * FROM TEST_ICME;
SELECT * FROM TEST_ICME
*
ERROR at line 1:
ORA-00942: table or view does not exist
后来想到应该是操作的基表没有刷新,所以用了 checkpoint 也不行,最后在网上找到了一篇不是很近但是很有启发,那就是刷新共享池
alter system flush shared_pool;
这一步替换上面的重启数据库
好,实验结速
ps:原创,转载请注明出处及网址
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论