了解在使用 IBM DB2 時如何識別最常見的損壞問題,并對這些問題進(jìn)行分類。在本文中,將了解一些糾正和預(yù)防技術(shù),您可以用它們來解決討厭的損壞問題。
被視為是最麻煩的業(yè)務(wù)問題之一,損壞常常在不知不覺中逐漸形成,給企業(yè)帶來不利影響。簡言之,可以將損壞 定義為中的任何意外項。損壞問題可能會對系統(tǒng)造成嚴(yán)重的性能沖擊。在某些情況下,它可能會導(dǎo)致頻繁的系統(tǒng)崩潰,引發(fā)關(guān)鍵業(yè)務(wù)系統(tǒng)宕機(jī)。數(shù)據(jù)庫損壞可發(fā)生在任何層面,從 db2 到操作系統(tǒng)以及硬件層。因此,了解和排除故障很重要,即分析所有可能受影響的層,并收集可能盡快需要的任何可用的診斷數(shù)據(jù)。
在本文中,您將了解為何數(shù)據(jù)庫會在遇到損壞問題時離線。您還將學(xué)習(xí)分析損壞癥狀,區(qū)分易于修復(fù)的故障和災(zāi)難性故障。本文將闡明使用 IBM DB2 時的損壞問題,并幫助 DB2 用戶理解和選擇處理這種關(guān)鍵的高影響問題的最佳方法。
本文首先討論可能的損壞來源,然后解釋以下任務(wù):
- 識別和排除損壞故障,在使用 DB2 時識別數(shù)據(jù)庫中的損壞問題并對其進(jìn)行分類,輔以 db2diag.log 中出現(xiàn)的樣例癥狀消息。損壞問題可以大體分為五個類別:數(shù)據(jù)頁面損壞(或表損壞)、索引損壞、CBIT 損壞、日志損壞和壓縮描述符損壞。
- 使用 db2dart 和 INSPECT 識別損壞問題,洞悉有用的 DB2 命令,db2dart 和 INSPECT,來檢查數(shù)據(jù)庫損壞。
- 從損壞中恢復(fù)的方法,一旦識別到一個損壞問題,如何著手處理這些情況、要收集什么數(shù)據(jù)、如何從該狀況中恢復(fù)過來,這些至關(guān)重要。學(xué)習(xí)可能的恢復(fù)方法以及如何選擇可用方案。
- 避免可能的損壞的預(yù)防性戰(zhàn)略,討論最佳實踐。
來源
數(shù)據(jù)庫損壞可能在寫入、讀取、存儲、傳輸或處理過程中發(fā)生,這會向原始數(shù)據(jù)引入非計劃中的更改。損壞問題的一些常見原因:
- 損壞的文件系統(tǒng)是數(shù)據(jù)庫中出現(xiàn)損壞的最常見原因之一。突然的系統(tǒng)關(guān)閉、電涌、文件系統(tǒng)雙機(jī)掛載、遷移磁盤、文件系統(tǒng)級活動,比如數(shù)據(jù)庫上線運行時檢查和修復(fù)文件系統(tǒng)(使用的實用程序包括 Linux? 上的 fsck),在文件打開時使用 Ctrl+Alt+Delete 以及病毒,都可能在數(shù)據(jù)庫中引入意外的變更。
- 硬件故障。
- 內(nèi)存損壞。
- DB2 缺陷。
- I/O 和網(wǎng)絡(luò)問題(如光纖適配器和交換機(jī)中的問題)。
- 不正確的應(yīng)用程序編碼。
- 緩沖池 (sqldPage) 和文件系統(tǒng)中存儲的頁面的值不一致。
- 重寫磁盤數(shù)據(jù)會導(dǎo)致?lián)p壞問題。
- 用戶對數(shù)據(jù)庫的重要配置文件、日志文件、日志控制文件等的干擾都會使數(shù)據(jù)庫處于不一致的狀態(tài)。
雖說損壞問題由各種原因而致,確切地查明是什么導(dǎo)致了數(shù)據(jù)損壞是極具挑戰(zhàn)的。在大部分情況下,該問題是由文件系統(tǒng)問題和硬件問題引起的。
識別和排除故障
對于一個 DBMS,頁面 是由操作系統(tǒng)為一個程序執(zhí)行的內(nèi)存分配的數(shù)據(jù)的最小單元,在主內(nèi)存與任何其他輔助存儲(比如硬盤驅(qū)動器)之間傳輸。因此所謂數(shù)據(jù)庫損壞也就是說數(shù)據(jù)庫中的某些頁面被損壞了。
如果 DB2 有無法得體處理的錯誤情況,panic 是它會用來招致崩潰的一種方法。當(dāng) DB2 檢測到一個頁面損壞時,它通過一個受控崩潰 (panic) 停止所有處理,因為它無法確定數(shù)據(jù)庫完整性。這也是為了阻止進(jìn)一步的數(shù)據(jù)損害或丟失。
當(dāng) DB2 遇到數(shù)據(jù)庫損壞時,db2diag.log 中轉(zhuǎn)儲很多錯誤消息。當(dāng)出現(xiàn)意外中斷且啟用了自動的首次出現(xiàn)數(shù)據(jù)捕獲 (FODC) 時,會基于癥狀來收集數(shù)據(jù)。當(dāng)滿足以下條件之一時,DB2 9.5 上會自動收集 FODC 數(shù)據(jù):
- FOCD_Trap,當(dāng)發(fā)生一個實例范圍內(nèi)的陷阱時。
- FODC_Panic,當(dāng)一個 DB2 引擎檢測到不連貫且決定不繼續(xù)時。
- FODC_BadPage,當(dāng)檢測到壞頁面時。
- FODC_DBMarkedBad,當(dāng)數(shù)據(jù)庫因一個錯誤而被標(biāo)記為 “壞” 時。
要搜集必要的信息,比如 OS 診斷(例如,AIX? 上的 errpt –a、snap 和 fileplace 輸出)以及任何硬件診斷(狀態(tài)保存和錯誤日志等),關(guān)鍵是要包含 OS 和硬件支持。重要的是要確保關(guān)鍵的文件系統(tǒng)有足夠的磁盤空間,比如轉(zhuǎn)儲空間和日志目錄,從而確保完全捕獲關(guān)鍵事件。
您可以查看 db2diag.log,確認(rèn) panic 是因為損壞還是另外的原因引起的。下面您會看到如何識別 DB2 中的損壞并對其進(jìn)行分類。以下是識別損壞的最常見的一些 db2diag.log 錯誤消息。