集成手机平台待办数据失败问题跟踪和处理
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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。