oracle 更改表或其它对象所有者(modify table schema)
前段时间听到有个网友问有个表在 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:原创,转载请注明出处及网址
下一篇: 苏紫紫还是苏子子?艺术照网上热搜
目前这篇文章有1条评论(Rss)评论关闭。