【问题标题】:Rename Oracle Table in Other Schema在其他模式中重命名 Oracle 表
【发布时间】:2021-08-31 08:20:36
【问题描述】:

如何重命名其他模式下的表?例如,我的用户是A,我想将table_1 重命名为table_1_temp,它们都应该在同一个架构下,假设架构B。这可能吗?

我试过了:

RENAME B.table_1 TO B.table_1_temp

和

RENAME B.table_1 TO table_1_temp

但出现此错误:

ORA-01765: specifying owner's name of the table is not allowed

ALTER 语句也不行:

ALTER TABLE B.table_1 RENAME TO table_1_temp

收到此错误:

ORA-01031: insufficient privileges

还有这个

ALTER TABLE B.table_1 RENAME TO B.table_1_temp
ORA-14047 ALTER TABLE|INDEX RENAME may not be combined with other operations

【问题讨论】:

    标签: oracle rename alter


    【解决方案1】:

    “权限不足”是这里的关键词。除非您被允许,否则您不能修改其他用户的对象;当然不能——如果有人弄乱了你的架构会是什么样子?

    所有者本身不能授予该特权;它是一个strong,并且用户 - 被授予这样的特权 - 必须是值得信赖的,因为它可以更改任何其他用户的表。

    看看下面的例子。我的数据库中有两个用户:mike(拥有一个表)和scott(应该重命名mike 的表)。

    迈克和他的桌子:

    SQL> show user
    USER is "MIKE"
    SQL> select * from tab;
    
    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    BEDIENSTETER                   TABLE
    

    以scott 连接并尝试重命名mike 的表(rename 在这里不起作用;它应该在您自己的架构中使用):

    SQL> connect scott/tiger
    Connected.
    SQL> alter table mike.bediensteter rename to test;
    alter table mike.bediensteter rename to test
    *
    ERROR at line 1:
    ORA-01031: insufficient privileges
    

    对;权限不足。这是什么特权? ALTER ANY TABLE。所以让我们授予它,以特权用户身份连接(例如我的 XE 数据库中的SYS):

    SQL> connect sys as sysdba
    Enter password:
    Connected.
    SQL> grant alter any table to scott;
    
    Grant succeeded.
    

    好的;返回scott,重复操作:

    SQL> connect scott/tiger
    Connected.
    SQL> alter table mike.bediensteter rename to test;
    
    Table altered.
    

    成功了!让我们看看我们做了什么:

    SQL> connect mike/lion
    Connected.
    SQL> select * from tab;
    
    TNAME                          TABTYPE  CLUSTERID
    ------------------------------ ------- ----------
    TEST                           TABLE
    
    SQL>
    

    对;表现已重命名。

    【讨论】:

      【解决方案2】:

      Rename Oracle Table or View 正如您根据 Pop 的回答在这篇文章中看到的那样,RENAME 语句仅适用于同一架构中的表。

      ALTER TABLE B.table_1 RENAME TO table_1_temp 看起来是最好的解决方案,您是否尝试过为您的用户帐户提供更多权限?

      【讨论】:

      • 是的,这看起来是最好的解决方案,但我只是想知道它是否会被重命名为 A 架构或 B 架构,因为那里没有指定架构名称。我还没有尝试授予更多权限,需要先询问 DBA。
      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多