您好,登錄后才能下訂單哦!
集成手機平臺待辦數據失敗問題跟蹤和處理
Mongodb 、 Oracle 、 SQLServer
場景:
公司的集成手機平臺后臺的核心數據庫采用的Mongodb 讀寫分離架構,所有異構系統平臺 ( 財務、ERP 、計劃 ......)( 對應的數據庫ORACLE 、 SQLServer 、 Mysql ......) 流程待辦會實時推送到Mongodb 庫里,實現所有系統手機端移動審批。
問題:
各個系統供應商對接集成手機平臺系統水平參差不齊,經常出現個別系統待辦未推到集成手機平臺或待辦轉已辦失敗的問題;
解決方案:
各個系統供應商優化接口周期長,在優化完成之前,需要有手動處理機制,即出現待辦未推送或待辦轉已辦失敗問題,可以及時知道并及時手動處理。
一:待辦出現問題時,第一時間向相關系統管理員發送預警郵件,及時手動干預,避免問題升級;
二:監控大屏實時展示失敗的待辦信息;
三:當失敗的待辦數量很龐大,批量修復并定期集中處理歷史失敗的待辦;
一:待辦出現問題時,第一時間向相關系統管理員發送預警郵件,及時手動干預,避免問題升級;
由于待辦出現問題時會在相應系統數據庫里生成一條日志記錄,可以通過觸發器實現郵件預警,以SQLServer 數據庫為例:
二:監控大屏實時展示失敗的待辦信息
通過Grafana 監控平臺,可以添加 SQLServer 等數據源,實時展現失敗待辦信息;
三:當失敗的待辦數量很龐大,批量修復或定期處理歷史失敗的待辦
可以通過集成手機平臺數據庫(Mongodb) 的待辦表和各個系統數據庫 (ORACLE 、 SQLServer 、 Mysql) 待辦表做對比:
1 集成手機平臺數據庫 (Mongodb) 的待辦數據多于各個系統數據庫待辦數據,表示待辦轉已辦失敗,需要手動刪除多余的待辦信息;
2 集成手機平臺數據庫 (Mongodb) 的待辦數據少于各個系統數據庫待辦數據,表示待辦推送失敗,需要手動重推;
那么如何批量查出所有系統待辦轉已辦失敗的數據 呢 ?
(1) 導出集成手機平臺數據庫(Mongodb) 的待辦數據到 execl
Mongodb 所在服務器操作系統為 Centos7.5, 可以在自己電腦上安裝一個 Mongodb 客戶端,使用 mongoexport 工具導出數據;
導出語句:
D:\MongoDB\Server\3.4\bin>
mongoexport.exe --csv --host 192.100.100.100:27017 /d testdb /c TEST_TdUndo /f "_id,userName,account,createTime,content" /q "{"delete": false}" /o C:\Users\Administrator\Desktop\all cjc _Undo1219a.csv
默認情況下打開CSV 文件中文是亂碼的:
通過如下方式解決亂碼問題:
--- 打開方式 ( 記事本 )--- 格式 --- 字體 --- 中文 GB2312--- 保存 ----csv 方式打開 --- 調整格式 --- 另存為 execl 格式文件
( 2 ) 導出各個系統數據庫(ORACLE 、 SQLServer 、 Mysql) 的待辦數據到 execl
例如 系統1 :
select Name, Account , Ini Date, content from undoerp
where UnDoStatus=' 待辦 '
and CreateDate>='2019-11- 01 08:00:00.000'
and CreateDate<='2019-12- 01 23:59:00.000';
(3) 對比數據
---1 集成手機平臺數據庫 (Mongodb) 的待辦數據多于各個系統數據庫待辦數據,表示待辦轉已辦失敗,需要手動刪除;
---2 集成手機平臺數據庫 (Mongodb) 的待辦數據少于各個系統數據庫待辦數據,表示待辦推送失敗,需要手動重推;
數據對比有兩種方式:
1 :通過execl 函數對比各個系統數據,找出待辦轉已辦失敗的數據和待辦未推的數據;
但是實際情況可能會比較復雜,比如各系統時間格式不一致、推送待辦有延時、標題不一致等問題,通過execl 很難對比數據,可以通過 SQL 語句實現數據對比;
2 :將所有系統對應的Mongodb 、 Oracle 、 SQLServer 、 Mysql 待辦數據導出到execl 中,在將所有系統execl 數據通過plsql 全部導入到 oracle 數據庫中,通過 sql 對比找出想要的數據,例如 Mongodb 數據表左連接各系統Oracle 、 SQLServer 、 Mysql 數據表,匹配不上的數據,既是待辦轉已辦失敗的數據。 Oracle 、 SQLServer 、 Mysql 數據表左連接 Mongodb 數據表,匹配不上的數據,既是未推待辦的數據。
(1)oracle 先創建多張表,并通過plsql 導入各個系統數據;
例如:
create table undo cjc (id varchar2(500),userName varchar2(500),account varchar2(100), updateTime varchar2(100),content nvarchar2(2000));
select * from undo cjc for update;
create table undo erp (userName varchar2(500),account varchar2(100), updateTime varchar2(100),content nvarchar2(2000),isstart varchar2(100));
select * from undo erp for update;
……
(2) 通過sql 進行數據對比
select distinct a.id,a.username cjc 用戶名,
a.account cjc 登錄名,
a.updatetime cjc 到達時間,
a.content enanar 標題 ,
b.username erp 用戶名 ,
b.account erp 登錄名 ,
b.updatetime erp 到達時間 ,
b.content erp 標題
from undo cjc a
left JOIN undoerp b
on a.account = b.account
and a.content like '%' || b.content || '%'
where a.content = ‘ xxx 系統 ’
order by erp 登錄名 ;
右側沒有匹配上的數據,既是待辦轉已辦失敗的數據;
邏輯刪除有問題的待辦:
即通過主鍵ID 唯一定位到有問題的待辦,將 delete 字段值由 false 改成 true ;
單條語句如下:
db.T_ChenUndo.update({"_id":ObjectId("5dd3xxxxx"),"account":"cjc","delete":false},{$set:{delete:true}},{multi:true});
根據ID 等信息,批量生成刪除錯誤待辦的腳本,即可批量修復待辦轉已辦失敗問題;
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。