當前位置:首頁 » 數據倉庫 » db2資料庫異常
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

db2資料庫異常

發布時間: 2022-09-28 20:00:10

① 如何分析DB2的錯誤信息

com.ibm.db2.jcc.b.sqlException: DB2 SQL error: SQLCODE: -407, SQLSTATE: 23502, SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0
分析DB2報出的錯誤信息,主要從六個方面進行分析:
SQLCODE, SQLSTATE, SQLERRMC, TBSPACEID, TABLEID, COLNO
1、先從SQLCODE和SQLSTATE兩方面的數字確認是什麼原因
2、在根據TBSPACEID和TABLEID兩方面確認是哪個表
SQL語句:select * from syscat.tables where tbspaceid="" and tableid=""
3、根據COLNO確認是哪個列出問題
SELECT * FROM SYSCAT.COLUMNS WHERE TABNAME= '*******' AND COLNO = 「」
三步就可以精確確認錯誤的原因了
原理分析:在DB2 資料庫中隱藏著一個內部表,專存儲資料庫的各個表。可以通過select * from syscat.tables進行查看。TBSPACEID, TABLEID, COLNO 都是表tables 中的欄位。
=====================================================================
but,
我的DB2資料庫錯誤信息:
com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -532, SQLSTATE: 23504, SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT
根據SQLCODE和SQLERRMC可知:
-532 23504 刪除操作違反了已指定的參照約束
可以判斷出,應該是在刪除級聯表格時,發現參考的外鍵為空了,應該是提前刪除了。
但是我的錯誤信息裡面並沒有上面提示的那麼詳細,上面的是SQLERRMC: TBSPACEID=2, TABLEID=640, COLNO=0 ,而我的是SQLERRMC: DE_ANOM_DETN.FK_TT_ANOM_TT_DETN_EVNT,由此可以推斷出,SQLERRMC裡面的信息就是定位錯誤的核心!!可是這個是什麼呢??估計這個應該找資料庫設計文檔了。
最後沒管這個問題,直接把DB2恢復(restore)一個鏡像點了,然後mq(Qmanager)啟動,was啟動(前提是mq啟動)。問題可能是執行順序或者因為某個伺服器節點未啟動caused的,當這些伺服器節點都正常啟動之後,把資料庫restore正常狀態,然後就可以正常執行了。

② db2 存儲過程 異常處理

存儲過程異常的處理:
DECLARE handler-type HANDLER FOR condition handler-action

異常處理器類型(handler-type)有以下幾種:
CONTINUE 在處理器操作完成之後,會繼續執行產生這個異常語句之後的下一條語句。
EXIT 在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
UNDO 在處理器操作執行之前,DB2會回滾存儲過程中執行的SQL操作。在處理器操作完成之後,存儲過程會終止,並將控制返回給調用者。
異常處理器可以處理基於特定SQLSTATE值的定製異常,或者處理預定義異常的類。預定義的3種異常如下所示:
NOT FOUND 標識導致SQLCODE值為+100或者SQLSATE值為02000的異常。這個異常通常在SELECT沒有返回行的時候出現。
SQLEXCEPTIOIN 標識導致SQLCODE值為負的異常。
SQLWARNING 標識導致警告異常或者導致+100以外的SQLCODE正值的異常。
如果產生了NOT FOUND 或者SQLWARNING異常,並且沒有為這個異常定義異常處理器,那麼就會忽略這個異常,並且將控制流轉向下一個語句。如果產生了SQLEXCEPTION異常,並且沒有為這個異常定義異常處理器,那麼存儲過程就會失敗,並且會將控制流返回調用者。
以下示例聲明了兩個異常處理器。 EXIT處理器會在出現SQLEXCEPTION 或者SQLWARNING異常的時候被調用。EXIT處理器會在終止SQL程序之前,將名為stmt的變數設為"ABORTED",並且將控制流返回給調用者。UNDO處理器會將控制流返回給調用者之前,回滾存儲過程體中已經完成的SQL操作。

清單3:異常處理器示例
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
DECLARE UNDO HANDLER FOR NOT FOUND;
如果預定義異常集不能滿足需求,就可以為特定的SQLSTATE值聲明定製異常,然後再為這個定製異常聲明處理器。語法如下:

清單4:定製異常處理器
DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
處理器可以由單獨的存儲過程語句定義,也可以使用由BEGIN…END塊界定的復合語句定義。注意在執行符合語句的時候,SQLSATE和SQLCODE的值會被改變,如果需要保留異常前的SQLSATE和SQLCODE,就需要在執行復合語句的第一個語句把SQLSATE和SQLCODE賦予本地變數或參數。
通常,會為存儲過程定義一個執行狀態的輸出參數(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --異常的聲明

--異常的處理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:產品實例關聯客戶過程出錯!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;

③ DB2資料庫在連接時出現錯誤,如圖,請問該怎麼解決

50,000 上伺服器 /192.168.56.101的DB2資料庫啟動了嗎,如果正常啟動,你看一下你連接配置。

④ db2資料庫總是出現下列的空指針異常,高手指教請。

如果DB2資料庫連接驅動沒問題連接正常,就是程序寫的有問題,有bug。

⑤ DB2中怎麼查看23502異常錯誤信息

由於資料庫管理器發生了錯誤或者被強制中斷,從而無法接受新的請求,已終止正在處理的所有請求或者已終止所指定的請求。
重新連接至資料庫。
如果此連接仍失敗,請在資料庫管理員的幫助下執行下列故障診斷步驟:
僅限於聯合環境:確定是聯合數據源返回了錯誤還是聯合資料庫伺服器返回了錯誤。
確保客戶機/伺服器配置正確:
確認通信子系統(包括網路電纜、網卡以及 TCP/IP 之類的通信協議)是否已啟動並處於運行狀態。
在使用 TCP/IP 協議的客戶機/伺服器環境中:請對客戶機上的 TCP/IP 服務名稱指定與伺服器上的埠號相同的埠號。
確保資料庫管理器已啟動並處於運行狀態:
確認 DB2 資料庫管理器是否已啟動並處於運行狀態。
在 db2diag 日誌文件中查找有關資料庫管理器進程已中斷或異常終止的證據。
如果資料庫管理器已停止,或者診斷日誌中存在有關任何資料庫管理器代理程序已中斷或異常終止的證據,請重新啟動資料庫管理器。

2