ora-04045和ora-16000報錯處理
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_SCHED
ORA-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);
begin
for invalid_views in (select object_name from all_objects
where status = 'INVALID' and object_type = 'VIEW' and owner=upper(p_owner))
loop
str_sql := 'alter view '||p_owner||'.' ||invalid_views.object_name || ' compile';
begin
execute immediate str_sql;
exception
--When Others Then Null;
when OTHERS Then
dbms_output.put_line(sqlerrm);
end;
end loop;
end;
執行方式:
例如執行編譯試圖的儲存過程,如下所示編譯sysadm下面的所有無效的試圖
SQL> exec compile_invalid_views('sysadm');
PL/SQL procedure successfully completed.
綜上所述:Oracle dg做讀寫分離的時候,使用試圖需要注意,當基表發生變化的時候,需要重新編譯下對應的試圖,或者定時從新編譯主庫的試圖來避免這個問題,如果沒有使用dg庫讀取,那麼不會有這個問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2922947/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Gulp壓縮報錯處理
- rails gem報錯的處理AI
- Python錯誤處理和異常處理(二)Python
- Mysql自動處理同步報錯MySql
- Python 入門級報錯處理Python
- Too many open files報錯處理
- standby上增加tempfile報錯ORA-00604,ORA-16000解決方法
- 前端的水平線,錯誤處理和除錯前端除錯
- 說說你對異常處理和錯誤處理的理解
- C++錯誤和異常處理C++
- 六、函式、包和錯誤處理函式
- 錯誤處理
- kafka 副本機制和容錯處理 -2Kafka
- Oracle 12c ORA-29548 報錯處理Oracle
- Rman報錯ORA-00234: ORA-00202處理
- Python錯誤處理Python
- PHP 錯誤處理PHP
- php錯誤處理PHP
- Go 錯誤處理Go
- 錯誤處理:如何通過 error、deferred、panic 等處理錯誤?Error
- Python之錯誤異常和檔案處理Python
- .NET----錯誤和異常處理機制
- Vue init webpack xxxx project 報錯處理(connect ETIMEDOUT 192.30.253.112)VueWebProject
- 線上MYSQL同步報錯故障處理方法總結MySql
- exp匯出報錯EXP-00106問題處理
- oceanbase 安裝叢集 install OB rpm報錯處理
- DBeaver同時執行多條insert into報錯處理
- linux裡面yum安裝軟體報錯處理Linux
- RAT(Oracle Real Application Testing)時ORA 600報錯處理OracleAPP
- ogg複製程式報ORA-01438錯誤處理
- TiDB DM同步報錯ErrCode 44006處理一例TiDB
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式
- rust學習十、異常處理(錯誤處理)Rust
- Flink快照容錯處理
- openGauss 處理錯誤表
- CMake出錯的處理
- go的錯誤處理Go
- axios 的錯誤處理iOS