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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Extjs報錯處理JS
- DG報錯的處理
- errpt報錯處理
- Gulp壓縮報錯處理
- rails gem報錯的處理AI
- Javascript程式碼報錯處理JavaScript
- 各種報錯處理方法
- 資料庫升級後goldengate報錯,ORA-04045資料庫Go
- PHP錯誤處理和異常處理PHP
- 一次歸檔報錯的處理和分析
- Too many open files報錯處理
- Mysql自動處理同步報錯MySql
- yum groupinstall報錯,處理方法
- ORA-02429 報錯處理
- mysql複製報錯案例處理MySql
- ORA-39002和ORA-39166報錯處理和探究
- Python錯誤處理和異常處理(二)Python
- Python 入門級報錯處理Python
- 批處理的聊天程式報錯求救!!!!!
- oracle11g 在dg中standby檢視報ora-04045錯誤Oracle
- 線上MYSQL同步報錯故障處理總結MySql
- ORA-1654報錯處理一則
- ORA-00979: not a GROUP BY expression報錯處理Express
- 匯入專案@override 報錯處理IDE
- EBS服務啟動報錯基本處理
- pl/sql developer除錯儲存過程報錯處理SQLDeveloper除錯儲存過程
- 前端的水平線,錯誤處理和除錯前端除錯
- standby上增加tempfile報錯ORA-00604,ORA-16000解決方法
- 六、函式、包和錯誤處理函式
- C++錯誤和異常處理C++
- Oracle 12c ORA-29548 報錯處理Oracle
- 線上MYSQL同步報錯故障處理方法總結MySql
- ADG--Ora-30927報錯處理
- 【故障處理】 DBCA建庫報錯CRS-2566
- COM+元件啟動報錯問題處理元件
- Oracle 通過dblink訪問表,因synonym失效,引起ORA-04045/ORA-16000/ORA-02063Oracle
- 錯誤處理
- Fatal NI connect error 12170.報錯處理Error