1. 程式人生 > >出現 DB2 SQL Error: SQLCODE = -1773, SQLSTATE = null 錯誤的原因及解決方法

出現 DB2 SQL Error: SQLCODE = -1773, SQLSTATE = null 錯誤的原因及解決方法

1 錯誤描述

在專案從虛擬機器遷移到容器雲之後,生產環境在執行某個資料庫下所有表的新增及更新操作的時候,都會遇到 BD2 報出來的SQLCODE = -1773, SQLSTATE = null異常,從而導致該庫下所有涉及到新增和更新的操作全部失敗,具體的錯誤日誌如下:

1773

2 錯誤原因

通過觀察上述標記出來的錯誤描述:

SQLCODE = -1773, SQLSTATE = null

然後,查詢「史上最全的 DB2 錯誤程式碼大全」可知,此錯誤的原因為:

-1773 在 HADR 資料庫下不支援的操作(如備庫可能不支援寫操作)

如果直接查詢 DB2 的SQLCODE,其解釋為:

  • The statement or command requires functionality that is not supported on a read-enabled HADR standby database.

其中,HADR 為 DB2 高可用性災難恢復(High Availability Disaster Recovery)功能的簡稱,其特性就是:支援在備機上的只讀操作。換言之,通過配置,可以實現在備庫上“只能讀、不能寫”的限制!而在檢查資料庫的配置之後,發現確實是將資料庫配置誤配為備庫的地址了。

3 解決方法

既然找了問題的原因,那麼解決該問題的方式自然是切換資料庫的配置,在資料庫的配置切換為主庫之後,該錯誤解決。不過,在後續檢視日誌的時候,發現 DB2 還報了另外一個錯誤,即:

4499

ERRORCODE = -4499,SALSTATE = 08001

經過查詢及定位問題之後,發現當時僅使用了備庫,而主庫會在某個時間點進行runstatus操作,從而導致在該時間點後的小段時間內,備庫頻繁被殺,從而導致連線失敗。實際上,問題的根源,還在於操作的大意,如果在操作的時候更細心一些,相信這個問題是可以避免的,希望大家引以為戒!案例僅供參考。