db2審計功能db2audit導致的數據庫宕機問題處理

在客戶現場駐場運維期間,某天上午,在客戶現場有人員報障,說有一臺DB2數據庫宕掉了。

首先和客戶DBA進行溝通,對問題有一個基本瞭解:

由於部門審計需要,制定了安全審計策略,在DB2層面開啓了audit功能,並打開了如contextexecute等需要很大空間的audit選項。於是運行一段期間後,發現大量的事務處理了導致audit文件空間滿,然後導致數據庫無法連接,報如下錯誤:

$ db2 connect to ebankdb

SQL1224N The database manager is not able to accept new requests, has

terminated all requests in progress, or has terminated the specified request

because of an error or a forced interrupt. SQLSTATE=55032

DBA同事發現空間滿後,通過echo > db2audit.out 對audit文件進行了清空,然後停止了db2audit命令。觀察db2diag.log文件,一直不斷報錯,如下:

2011-08-30-13.41.17.598986+480 I14000047A2740 LEVEL: Error (OS)

PID : 327

2011-08-30-13.46.13.332977+480 I14000129A601 LEVEL: Error

PID : 3276822 TID : 42569 PROC : db2sysc 0

INSTANCE: db2inst1 NODE : 000 DB :

APPHDL : 0-38852 APPID: GA912716.PEA8.01321931A8D1

EDUID : 42569 EDUNAME: db2agent (LIS) 0

FUNCTION: DB2 UDB, bsu security, sqlexAuditOpenAdjust, probe:149

RETCODE : ZRC=0x870F0009=-2029060087=SQLO_EOF the data does not exist

DIA8506C Unexpected end of file was reached.

DATA #1 : Hexdump, 4 bytes

0x07000006EC7F02F0 : 870F 0009 .

2011-08-30-13.46.13.333281+480 I14000731A526 LEVEL: Error

PID : 3276822 TID : 42569 PROC : db2sysc 0

INSTANCE: db2inst1 NODE : 000 DB :

APPHDL : 0-38852 APPID: GA912716.PEA8.01321931A8D1

EDUID : 42569 EDUNAME: db2agent (LIS) 0

FUNCTION: DB2 UDB, bsu security, sqlexAuditWriteBufferToDisk, probe:13462

MESSAGE : ZRC=0x875C00CD=-2024013619=SQLEX_UNEXPECTED_SYSERR

Unexpected System Error

DATA #1 : Hex integer, 4 bytes

0×40000011

DBA即使停止了db2audit,並重啓實例,仍然存在同樣問題。

通過登陸IBM官方的support網站,找到到一條類似的apar

該問題是針對9.5 fp3以前的版本,但錯誤症狀相同。內容爲,當db2audit沒有空間後,會創建一個空的audit文件,但無法寫audit header到文件,結果db2認爲這個文件被corrupt了,因此報錯。該問題作爲DB2bug已經在fp4補丁中修復,一個workaround就是刪除這個空日誌文件。

根據這個解釋,可以推斷出當前問題的根源是由於DBA的命令echo > db2audit.out,人爲將audit header破壞,結果導致db2數據庫宕機的問題。而後,我們將審計實際內容日誌db2audit.db.LIS.log.0文件刪除,發現db2audit開始創建新的審計日誌,系統恢復正常。

$ ls -l

total 14848

-rw——- 1 db2inst1 db2grp1 35340 Aug 30 14:29 db2audit.db..log.0

-rw——- 1 db2inst1 db2grp1 2 Aug 30 13:46 db2audit.db..log.0.bak

-rw——- 1 db2inst1 db2grp1 7543102 Aug 30 13:44 db2audit.instance.log.0

針對這個問題,總結如下:

1. db2audit會佔據很大的空間,特別是當contextexecute選項打開時,會記錄SQL信息,因此,需要規劃很大的空間。

2. 遵循一定的步驟。本例中,當文件系統滿時,如果先關閉db2audit,再去清理audit log,纔可以避免類似問題產生。

3. db2audit的使用需要謹慎,特別是生產系統,可能會由於db2audit日誌空間不足問題導致宕機。

更多關於審計的相關技術,可以參看《DB2數據庫管理最佳實踐》。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章