标题:Oracle 通过dblink访问表,因synonym失效,引起ORA-04045/ORA-16000/ORA-02063
作者:lōττéry©版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.]
前景介绍:
环境:RAC(FWSB用户[读写],FWSB_B用户[只提供plsql连接查询]) 、DG环境【只读模式】 ..
需要:多个测试环境与生产环境脚本对比数据..为了不与RAC环境争抢资源,将在各测试环境创建连接DG环境的dblink(db_fwsb_b)
某天同事说查询表报错【ORA-04045/ORA-16000/ORA-02063】
最终知识点
1、synonym 映射的表重建会导致synonym失效;
2、10g开始 失效对象在再次调用时自动会置为有效[包括:synonym/存储等];
一、 模拟报错
SQL> SELECT * FROM LOTTERY@db_fwsb ;
--测试环境通过dblink查询生产环境数据
ORA-04045: 在重新编译/重新验证 FWSB_B.
LOTTERY 时出错
ORA-16000: 打开数据库以进行只读访问
ORA-02063: 紧接着 2 lines (起自 DB_FWSB)
SQL> 查询用到的dblink,权限
SQL> SELECT * FROM DBA_DB_LINKS WHERE DB_LINK IN ('DB_BACKUP','DB_FWSB');
OWNER DB_LINK USERNAME HOST
------------------------------ -------------------- --------
------
----- --------
------
------
--------
PUBLIC DB_FWSB FWSB_B DG 环境 --只读
SYS DB_BACKUP FWSB_B
RAC环境 --可编辑fwsb_b环境synonym
SQL>