故障012:定時備份作業-6007懸案
- 1. 問題描述
- 2. 解決過程
- 2.1 大膽推想
- 2.2 找規律
- 2.3 嘗試換掉AP
- 2.4 檢查資源限制
- 2.5 資源放寬SYSDBA
- 3. 精神感悟
DM技術交流QQ群:940124259
1. 問題描述
詭異的現象總是伴隨著隱藏的功能被打開,可能耽誤你很長時間找原因,可費勁!!
本案例發生很久,題材準備已久,遲遲未準備文字描述,今天專門整理成文,同大家分享曲折的過程。
本次產生的問題是定時備份作業總是執行失敗,備份路徑下只存在空內容的備份集文件夾名,翻看dm_BAKRES_年月.log日志,錯誤代碼-6007(網絡通訊異常),當時撓頭想本機發起定時備份,網絡流量未流出本網卡,不存在中間網絡安全設備的攔截,那么調轉焦點到本機,排除本地各種安全軟件的可能性,嗶哩啪啦,回到數據庫本身。
2. 解決過程
2.1 大膽推想
既然定時備份作業徘徊在30分鐘執行失敗,換個思路,手工執行一次備份或手工調度一次備份任務,效果如何?
實驗的結論:手工執行備份和手工調度備份任務,均正常(截圖忘了,省略)。暫時陷入死胡同,解決思路再換一下,去日志找線索。
-- 手工執行一次備份
backup database full backupset '/dmdata/dmbak/FSFULL202306'-- 手工調度備份任務
select * from sysjob.sysjobsteps;
call sp_dbms_job_run(jobid);
2.2 找規律
萬事萬物皆有規律,沒找到規律,一般是認知有限,不能發現規律。
從備份日志入手找共性,發現近幾次的備份失敗出奇的一致,執行半小時左右,程序則中斷。
2.3 嘗試換掉AP
得了,先換掉AP輔助插件,利用dmserver本身機制來實現聯想備份。
call sp_set_para_value(2, 'BAK_USE_AP, 2);
/opt/dmdbms/bin/DmServiceDB1 restart-- 修改下作業調度,再觀察備份作業觸發,執行半小時也是失敗的。
2.4 檢查資源限制
結論越來越清晰,只有定時調度備份作業才會失敗。該檢查下各賬戶的資源限制情況。
-- 查詢用戶資源限制項(CPU、內存、讀取頁數)
SELECTB.NAME AS "用戶名",A.CPU_PER_CALL AS "用戶的一個請求能夠使用的 CPU 時間上限(秒)",A.CPU_PER_SESSION AS "一個會話允許使用的 CPU 時間上限(秒)",A.MEM_SPACE AS "會話占有的私有內存空間上限(MB)",A.READ_PER_CALL AS "每個請求能夠讀取的數據頁數",A.READ_PER_SESSION AS "一個會話能夠讀取的總數據頁數上限",A.INFO1 AS "一個會話連接、訪問和操作數據庫服務器的時間上限(10分鐘)"
FROMSYSRESOURCES A,SYSOBJECTS B
WHEREB.TYPE$ ='UR'AND B.SUBTYPE$='USER'AND B.ID = A.ID;ALTER USER SYSDBA LIMIT CONNECT_TIME UNLIMITED
;
好家伙,SYSDBA賬戶被設置30分鐘的資源訪問限制。ok,那我們修改下資源配置,放開它。
2.5 資源放寬SYSDBA
alter user sysdba limit connect_time unlimited;
du -hd1 --time /dmdata/dmbak | sort -t$‘\t’ -k2
3. 精神感悟
這坑爹的備份故障,花了一周的晚上空閑時間排查,本來云環境的存儲IO很拉胯,每天頂多測試兩次備份,持續到周末晚上十一點,總算找到原因。
然而資源訪問限制SYSDBA賬戶,無辜躺著中槍,根本不會第一時間聯想過來。估摸著,某些人手欠,可能是使用管理工具時不小心點到(這種可能30%),
另一種可能是在學習達夢,不了解參數含義,試著修改,沒有明顯出錯,沒人在乎,還有一種可能等保測評改了沒改回去。