如何重命名Oracle数据库中其他schema下的表?
跨schema重命名Oracle表操作说明
该操作完全可实现,你遇到的所有报错均由语法规则不符或权限不足导致,各报错原因及正确操作方法如下:
报错原因说明
- ORA-01765报错:
RENAME语句本身仅支持重命名当前登录用户自身schema下的对象,语法层面禁止在待重命名的表名前加其他schema的所有者前缀,因此你用RENAME加B.前缀的写法天然不合法,无论权限是否足够都会触发该报错。 - ORA-14047报错:
ALTER TABLE ... RENAME TO语法规则要求TO后只能填写新表名,不能加schema前缀,因为重命名操作不支持跨schema转移对象,你在新表名前加B.前缀会被判定为非法操作组合,因此触发该报错。 - ORA-01031报错:当前登录用户A要修改B schema下的表属性,需要持有
ALTER ANY TABLE系统权限,或由B用户显式为A授予该表的ALTER对象权限,权限缺失就会触发该报错。
正确操作步骤
方案1:可登录B用户操作(最简便)
直接登录B用户执行以下任意一条语句即可,无需额外授权:
RENAME table_1 TO table_1_temp;
或
ALTER TABLE table_1 RENAME TO table_1_temp;
方案2:仅能使用A用户操作
首先完成权限授予:
- 若用B用户操作授权,执行:
GRANT ALTER ON table_1 TO A;
- 若用DBA权限用户操作授权,可直接授予系统权限(权限范围更大):
GRANT ALTER ANY TABLE TO A;
授权完成后,用A用户执行以下正确语句即可完成同schema重命名:
ALTER TABLE B.table_1 RENAME TO table_1_temp;
注:TO后无需加B.前缀,Oracle会自动沿用原表的schema归属
内容的提问来源于stack exchange,提问作者Ghifari Dwiki Ramadhan
相关产品推荐
相关产品推荐

