達夢資料庫故障處理流程

2021-10-18 23:15:14 字數 4805 閱讀 9424

收集資訊,對問題定性。

分析定位問題,找到原因。

能處理當場處理、無法處理的則重現問題。

問題反饋,上報bug。問題定性

確定問題的重要性

確定問題的緊迫性

問題的種類:a、b、c

等專案的狀態:上線、開發、測試

影響範圍:點、面

使用者關切度:非常、一般

客戶關係度:好、一般、緊張

問題種類

a: 最嚴重錯誤,系統崩潰,或效能極差,計算結果錯誤等

b: 嚴重錯誤,系統崩潰

c: 一般性錯誤

d: 功能的補充完善

e: 費時但不重要的功能

f: 文件或安裝方面的問題

g: 體系結構限制,一時難以解決

緊急問題處理流程

重要且緊迫的問題:

首要任務不是找到問題的原因、而是要盡快恢復資料庫服務。

能夠繞過的問題,通過重啟、等價改寫sql或暫停使用相關模組等變通的方法處理 。

無法繞過問題,做好使用者溝通工作,穩住客戶,讓客戶有信心。

盡快定位問題,並將重現步驟反饋給開發人員。

問題定位和分析

系統出現問題,無法及時響應使用者/應用請求時,可能的原因是多方面的。一般來說

網路是否正常

記憶體使用量

cpu使用率

i/o是否正常

系統日誌

動態效能檢視

資訊收集

linux常用監控命令

free命令檢視記憶體使用情況

top命令檢視cpu使用率

iostat命令檢視磁碟i/o使用情況

nmon工具監控系統一段時間的整體情況

通過nmon工具可以實時檢視伺服器負載情況,包括cpu 記憶體 硬碟的訪問情況,也可以通過定時採集形成報表

資訊收集

系統資訊收集工具nmon

通過nmon工具可以實時檢視伺服器負載情況,包括cpu 記憶體 硬碟的訪問情況,也可以通過定時採集形成報表

系統日誌

事件日誌

系統啟動、關閉、記憶體申請失敗、io錯誤等一些致命錯誤。

跟蹤日誌

系統各會話執行的sql語句、引數資訊、錯誤資訊等

設定不同的語句掩碼可以收集不同的語句

主要用於分析錯誤和分析效能問題

1.排除可能導致問題出現的外部因素,避免被誤導。

2.利用應用或者資料庫日誌資訊對問題進行分析。

3.整理出導致問題出現操作步驟

事件日誌

1.排除可能導致問題出現的外部因素,避免被誤導。

2.利用應用或者資料庫日誌資訊對問題進行分析。

3.整理出導致問題出現操作步驟

跟蹤日誌

1.排除可能導致問題出現的外部因素,避免被誤導。

2.利用應用或者資料庫日誌資訊對問題進行分析。

3.整理出導致問題出現操作步驟

動態效能檢視

資料庫連線資訊

通過 v$sessions可獲取會話的具體資訊,如執行的sql語句、主機名、當前會話狀態、使用者名稱以及回話總數等等 。

資料庫執行資訊,主要是資料庫服務的資源占用情況,如cpu 記憶體 鎖情況以及連線情況。另外日誌問題和臨時庫的狀態也要確認。

資料庫鎖、事務等資訊

通過vloc

k、

vlock 、v

lock、v

trx 可以獲取鎖和事務的具體資訊,如鎖物件、狀態、等待的事務及事務對應的會話等相關資訊。

資料庫執行資訊,主要是資料庫服務的資源占用情況,如cpu 記憶體 鎖情況以及連線情況。另外日誌問題和臨時庫的狀態也要確認。

監控工具

達夢監控工具

通過達夢的監控工具可以實時跟蹤資料庫記憶體使用情況、資料庫連線情況和語句執**況。並且可以彙總出現執行慢或者執行頻率高的sql語句

故障重現

拆解問題,簡化場景

剔除不相關的場景或者操作步驟,使複雜問題簡單化。

使用 sql 語句

用 isql、manager工具, 確定問題, 介面 or 伺服器

編寫測試程式

與資料環境相關,需要邏輯/物理進行備份還原

常見問題處理

伺服器無響應

伺服器宕機

檔案損壞

集群故障

效能問題

介面問題

故障處理時一定要注意操作的安全性,不能讓故障進一步的惡化。

伺服器無響應

現象:當前操作長時間不返回。

伺服器 cpu 負載比較高。

據庫連線池快速膨脹,直到達到上限。

資料庫響應延遲增大。

原因:事務未提交或長時間執行,占用的鎖阻塞了其他事務。

內部 bug ,產生死迴圈或死鎖。

解決方法

通過動態效能檢視獲取未提交事務的session id

通過 session id 關閉對應連線,

sp_close_session(sess_id);

***:對應事務會回滾

利用kill命令,主動產生core檔案並獲取堆疊資訊。

kill -sigse** pid

***:重啟時間很長,也可能無法啟動成功。

伺服器宕機

現象:無法連線資料庫、 dmserver 程序 id 不存在。

原因:內部 bug 或者 磁碟io等硬體錯誤

處理方法:

有 core檔案, 通過core檔案,找出正在執行的sql。

沒有core檔案,通過跟蹤日誌檔案,找出宕機前最後一條執行的sql 。

core檔案獲取sql

debug 版伺服器

gdb dmserver core檔案名字,開啟core檔案。

一般第乙個執行緒裡面正在執行的sql語句就是故障sql語句

where或者bt命令,列印堆疊

如果堆疊中有函式

ntsk_process_exec、ntsk_process_prepare、

ntsk_process_prepare_and_exec f 到該層,通過p sess->sqls 取到sql語句。

vm_run_pln

f 到該層,通過p pln->sqlstr 取到sql語句。

有時sql語句過長,而這裡顯示的sql語句有限,可以先執行set print element 0

release 版伺服器

通過 dmrdc 命令列工具分析core檔案獲取其中的sql語句

./dmrdc sfile=該工具會將分析的sql儲存在結果檔案中。

位 置:core檔案所在的路徑

檔名: core檔名_tmp

檔案損壞

log 日誌檔案

rol 回滾檔案

伺服器無法啟動。

dbf 資料檔案

資料丟失、伺服器宕機。

可用 dmdbchk 工具來檢查確認是否損壞

./dmdbchk path=

原因:資料庫非正常關閉、磁碟硬體故障或內部bug

檔案損壞應急處理方法:

rol檔案損壞

dm.ini中新增配置項pseg_recv = 0 。

再次啟動,dmserver 就可以跳過回滾操作,啟動起來。

log檔案損壞

初始化新庫,初引數與問題庫保持一致,然後正常新庫並正常關閉

將新庫的roll.dbf和dameng0*.log拷貝覆蓋到問題庫。

使用dmmdf修改日誌檔案的db_magic。

再次啟動,dmserver 就可以正常啟動。

正常啟動後要進行資料備份工作

***:

資料丟失

僅在沒有備份檔案的情況下使用、不到萬不得已不能使用

操作前要備份檔案。

dbf檔案損壞

資料庫可正常啟動:

disql 下執行check_db_index(), 會列印出問題的索引名。

查詢系統字典表sysobjects

獲取 索引 id

select id from sysindexes

subtype$ = 『index』 and name = 『idx_name』

查詢 sysindexes 獲取索引類別,0 為聚集索引;1為二級索引

select xtype & 0x01 from sysindexes

where id = idx_id

二級索引則直接刪除然後重建即可

聚集索引則只能重導資料或備份還原的方式進行資料恢復。

dbf檔案損壞

資料庫無法正常啟動

建新庫導資料

利用備份檔案和歸檔檔案進行還原

備份資料!備份資料!備份資料!

集群故障

rac主備

讀寫分離

ha任何操作之前,永遠先關閉備機ha

確定主機啟動完成,恢復正常後

最後再開啟備機的ha

ha環境 務必要配置

ha_inst_check_ip

ha_inst_check_port

案例:ha正常情況下,先關閉主機ha,在關的過程中,主機ha長時間無響應,直接強殺主機ha,會出現什麼異常?主機dmsever沒退,

ha 被殺掉

備機ha監聽不到主機的ha心跳 就認為主機掛了,然後掛盤,起dmserver,這樣,就造成了雙主

ha磁碟雙掛

確定目前哪一台是備機,關掉備機的ha。

在備機上unmount磁碟

在主機上檢查資料檔案

重啟資料庫

效能故障

定位sql

優化建索引

改寫sql

修改引數

更新統計資訊

介面問題

使用isql和manager進行初步排查

針對應用程式使用的具體介面,編寫重現例子

通報問題

達夢資料庫和mysql索引引擎 達夢資料庫 索引

1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...

達夢資料庫操作

1.安裝 dminstall.bin i接下來是一些設定,比如 語言 key檔案的位置 時區 安裝型別 安裝目錄 略過 2.初始化 進入你剛才設定的安裝目錄的bin目錄下執行 dminit這是我自己的設定 input system dir home dmdba dmdata input db nam...

達夢資料庫使用

1 修改最大連線數 先檢視當前的最大連線數 select sf get para value 2,max sessions 修改最大連線數 alter system set max sessions 1000 spfile 重啟資料庫 su dmdba cd dmdbms dmservicedmse...