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

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)评论关闭。

  1. Stanley Serbus | #1
    2011-12-21 at 14:39

    My name is Kristen and I will be fasting (water only) from June 28-30, Please join me!!