oracle 19c dg库查询视图报错,具体如下所示SQL> select count() from sysadm.DFW_SCHED;select count() from sysadm.DFW_SCHED*ERROR at line 1:ORA-04045: errors during recompilation/revalidation of SYSADM.DFW_SCHEDORA-16000: database or pluggable database open for read-only access 原因分析:该视图在主节点是可以查询的,后来经过分析了解到,dba对视图基表的字段进行了修改,进而引起备节点出现这个报错。原因是在备节点时,内存里信息没有更新,后来进行查询时,发现与基表有差异,需要进行重新编译,但是dg库是read only的,所以编译报错; 解决办法:方法1:在主库执行手动compile,这个动作会同步到从库执行;SQL> alter view sysadm.HTCF_ORG_PSNDOC_F_VIEW compile;View altered.方法2:直接在主库查询下这个视图就可以自动触发视图的自动编译,进而同步到从库执行;SQL>select * from sysadm.HTCF_ORG_PSNDOC_F_VIEW where rownum<2;拓展:可以通过如下存储过程,批量编译无效的视图,---摘自网络create or replace procedure compile_invalid_views(p_owner varchar2 -- 所有者名称,即 SCHEMA) as--编译某个用户下的无效视图str_sql varchar2(200);beginfor invalid_views in (select object_name from all_objectswhere status = 'INVALID' and object_type = 'VIEW' and owner=upper(p_owner))loopstr_sql := 'alter view '||p_owner||'.' ||invalid_views.object_name || ' compile';beginexecute immediate str_sql;exception--When Others Then Null;when OTHERS Thendbms_output.put_line(sqlerrm);end;end loop;end;执行方式:例如执行编译试图的存储过程,如下所示编译sysadm下面的所有无效的试图SQL> exec compile_invalid_views('sysadm');PL/SQL procedure successfully completed. 综上所述:Oracle dg做读写分离的时候,使用试图需要注意,当基表发生变化的时候,需要重新编译下对应的试图,或者定时从新编译主库的试图来避免这个问题,如果没有使用dg库读取,那么不会有这个问题
ora-04045和ora-16000报错处理
来源:这里教程网
时间:2026-03-03 18:05:06
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 美的财报:To C今不如昔,To B渐入佳境
美的财报:To C今不如昔,To B渐入佳境
26-03-03 - 宋作文:企业要做好私域流量,掌握客户关系是基础
宋作文:企业要做好私域流量,掌握客户关系是基础
26-03-03 - 非常好用的5款电脑软件
非常好用的5款电脑软件
26-03-03 - [20221030]绑定变量的分配长度10.txt
[20221030]绑定变量的分配长度10.txt
26-03-03 - 5款新人必备的电脑软件
5款新人必备的电脑软件
26-03-03 - AWS、微软云、谷歌云背后的格局焦虑
AWS、微软云、谷歌云背后的格局焦虑
26-03-03 - Oracle 19c中的等待事件分类 Event Waits
Oracle 19c中的等待事件分类 Event Waits
26-03-03 - 【STAT】函数索引和使用表达式统计信息有什么不同
【STAT】函数索引和使用表达式统计信息有什么不同
26-03-03 - 学艺不精,学无止境
学艺不精,学无止境
26-03-03 - ORA-00600: internal error code, arguments: [knacpft_ProcessFetchedTxns250]
