如何解决在Oracle DB的另一个架构中重新编译同义词
我想在另一个架构中重新编译一个损坏的同义词,但是遇到有关权限的错误。
根据Oracle规定:
要在另一个用户的架构中修改私有同义词,您必须具有CREATE ANY SYNONYM和DROP ANY SYNONYM系统特权。
好的,请参阅我的代码段:
SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 24 18:47:29 2020
Copyright (c) 1982,2010,Oracle. All rights reserved.
Connected to:
Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
SQL> select user,sys_context( 'userenv','current_schema' ) cur_schema from dual;
USER
------------------------------
CUR_SCHEMA
--------------------------------------------------------------------------------
STAT_ADM
STAT_ADM
SQL> SELECT s.privilege
2 FROM dba_sys_privs s
3 WHERE s.grantee = USER
4 AND s.privilege LIKE '%ANY%SYNONYM%';
PRIVILEGE
----------------------------------------
DROP ANY SYNONYM
CREATE ANY SYNONYM
SQL> alter synonym ADB011_T_PRO.SA_BRAND compile;
alter synonym ADB011_T_PRO.SA_BRAND compile
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> select dbms_metadata.get_ddl(object_type => 'SYNONYM'
2,NAME => 'SA_BRAND'
3,SCHEMA => 'ADB011_T_PRO') ddl_code from dual;
DDL_CODE
--------------------------------------------------------------------------------
CREATE OR REPLACE SYNONYM "ADB011_T_PRO"."SA_BRAND" FOR "STAT_INT"."SA_BRAND"
SQL>
我真的缺少一些许可吗?还是应该正确地重新编译同义词?我也有CREATE ANY SYNONYM
权限,因此我通过发出该同义词的DDL语句使其再次有效来解决该问题,但是我想使用编译选项。
解决方法
这似乎记录为Oracle Bug 4189542 (Doc ID 4189542.8)。从您的代码看来,您正在使用版本11.2.0.4数据库。如果您更新Oracle版本,或将最新的补丁程序集应用到11.2.0.4数据库,则它应该可以解决此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。