問題背景
昨天遇到群友提問,遇到ADG備庫掛了的情況
數據版本:11.2.0.4
操作系統:Centos7.9
環境:ADG主備庫,主庫為RAC,備庫也是RAC
具體報錯ORA-00449以及ORA-04021
看樣子是LGWR掛了,還有個鎖等待。
問題分析
先試圖看下oerr報錯都有什么
[oracle@rac1 ~]$ oerr ora 00449
00449, 00000, "background process '%s' unexpectedly terminated with error %s"
// *Cause: A foreground process needing service from a background
// process has discovered the process died.
// *Action: Consult the error code, and the trace file for the process.
[oracle@rac1 ~]$ oerr ora 04021
04021, 00000, "timeout occurred while waiting to lock object %s%s%s%s%s"
// *Cause: While waiting to lock a library object, a timeout occurred.
// *Action: Retry the operation later.
看起來沒啥有用的分析,也是讓查看日志和lock等重試
查看故障前備庫的的AWR報告,按這個主機的配置來看負載并不高,但是做為一個備庫session有點高。
硬解析也需要關注一下。
于是問了一下,這個備庫還承擔了一些查詢業務。
AWR中關于SQL ordered by Version Count顯示如下
結合使用情況猜測,大概率是查詢ADG端遇到BUG
如何解決
現象基本符合Doc ID 2183882.1的說法,該BUG在11.2.0.4中己經解決,但是默認參數并沒有打開。
所以一步到位的解決辦法就是直接設置:
alter system set cursor_sharing=force scope=both;
alter system set "_adg_parselock_timeout"=500 scope=both sid='*';
醫院的HIS系統好多都不寫綁定變量,多源于系統開發時間較早,開發不規范導致
當然也有用19C ADG做讀寫業務分離很成功。
11G ADG還是有遇到一些BUG的,之前也有小伙伴遇到過RAC的ADG備庫,在RAC1節點查詢沒有問題,在RAC2節點查詢就報錯ORA-00600
后來查證也是BUG導致。