1.本发明涉及数据库运维领域和软件系统开发领域,特别是一种自动检查枚举型字段值越界的方法。
背景技术:
::2.一般的软件应用系统使用到数据库时,都需要长期进行数据库日常维护,尤其是数据库管理员一般应对多种软件系统,其对于数据库表中存放的信息无法及时了解系统设计者的初衷,而系统开发团队存在人员变动、软件维护周期长导致的系统设计需求文档代码信息脱节,当遇到系统问题需要检查数据存储内容和代码实现逻辑的时候,往往存在很多问题,导致运维成本上升,效率下降。作为中小开发团队尤其存在这个问题,即受限于显示开发团队成本高,无法投入更多人力在日常系统代码和数据库运维文档的持续更新中。数据库中枚举型字段是非常常见的字段类型,其一般都具备核心业务流程属性,决定了系统信息流和控制流的不同走向。而传统一般都是通过代码注释、开发文档来保存和更新关于枚举型字段的取值范围和实际含义。必然会存在代码注释和实际运行逻辑不一致,尤其在现代软件开发普遍转向分布式微服务架构,数据来源复杂。多个系统之间存在复杂的关联。一旦某个数据来源被污染,且不及时发现和处理的情况下,枚举型字段导致系统流程出错或者难以维护的缺陷就会更加明显。3.因此,需要一种自动检查枚举型字段值越界的方法。技术实现要素:4.本发明所要解决的技术问题是克服现有数据库字段信息管理的不足,提供一种自动检查枚举型字段值越界的方法。5.为解决上述技术问题,本发明提供一种自动检查枚举型字段值越界的方法,其特征在于,通过按照数据库相关枚举型字段备注信息中约定的规则,对当前数据库中该枚举型字段的值进行自动检查,用以发现枚举型字段取值越界异常并告警,具体包括如下步骤:6.步骤1:针对业务系统中的枚举型字段,定义一个约束取值范围和字段类型的检查对象;7.步骤2:将检查对象转换为特定语法结构的字符串描述;8.步骤3:将检查对象的字符串描述写入对应数据库各对应表中相应枚举型字段的备注信息;9.步骤4:通过自定义定时调度任务,定期读取当前数据库表字段的备注信息中的检查对象信息,并将当前数据库表字段的值信息和其对应的检查对象信息进行比较检查,用以判定是否符合预设条件,如果不符合则判定为越界;10.步骤5:当步骤4中判定越界时,告警相关干系人以排查不一致原因,提交新的检查对象定义,通过数据库管理员更新到数据库对应备注字段中;11.步骤6:继续步骤4的定时调度任务检查,直到该定时调度任务终止。12.所述步骤1的具体步骤包括:13.步骤1-1:定义检查对象中的取值范围属性为fv,具体为,根据选择的枚举型字段,定义枚举值的取值范围为{v1…vm};14.步骤1-2:定义检查对象中的逻辑含义属性为fd,具体为,根据选择的枚举型字段,定义枚举值的逻辑含义描述为{d1…dm};15.步骤1-3:定义检查对象中的检查级别属性为cl,具体为,当cl为0时,表示检查对象无需进行定时检查和通知;当cl为1时,表示检查对象需要进行定时检查,不进行通知,只在日志中记录检查结果;当cl为2时,表示检查对象需要进行定时检查和通知;16.步骤1-4:定义检查对象中的值类型属性为ft,具体为,根据选择的枚举型字段,定义其值类型为:浮点型为0、整形为1、字符串或字符型为2;17.步骤1-5:定义检查对象中的逻辑名称属性为fl,具体为,根据选择的枚举型字段,定义其逻辑名称为fl,所述逻辑名称的长度n不超过99,且最低为00;18.所述步骤2的具体步骤包括:19.步骤2-1:针对所有需要定义的枚举型字段{f1…fn},构建检查对象{cro1…cron},每个检查对象的属性都包含:取值范围、逻辑含义、检查级别、值类型、逻辑名称。20.步骤2-2:构建一个有序空字符串;21.步骤2-3:所述有序空字符串的第1位字符的值取该检查对象的检查级别属性;22.步骤2-4:所述有序空字符串的第2位字符的值取该检查对象的值类型属性;23.步骤2-5:所述有序空字符串的第3位字符和第4位字符的值为该检查对象的逻辑名称属性的字符串长度n,所述有序空字符串的第5至第n+3位字符的值为逻辑名称属性的实际字符值;24.步骤2-6:由所述有序空字符串的第n+4位字符开始,其值以“[”开始,以“];”结尾,以取值范围的{v1…vm}和逻辑含义的{d1…dm}组成[vi,di],i∈{1…m}的键值对。[0025]所述步骤4中,所述预设条件是对于检查对象信息中约定的取值范围集合和当前该枚举型字段实际的枚举值的取值范围集合,必须满足检查对象信息中约定的取值范围集合完全包含于当前该枚举型字段实际的枚举值的取值范围集合。[0026]所述步骤4的具体步骤包括:[0027]步骤4-1:自定义定时调度任务程序用以配置定时调度出发的定时策略;[0028]步骤4-2:当定时策略条件被触发时,所述定时调度任务程序读取在定时范围内,所有发生数据写入行为的所有枚举型字段,组成{f1…fm}集合;[0029]步骤4-3:遍历所有发生数据写入行为的枚举型字段集合,逐一判断枚举型字段的备注信息,如包含以{0,1,2}的字符开头并且结尾为“];”字符串,则该枚举型字段中包含检查对象字符串备注信息cro,并将该cro对象加入{cro1…cron};[0030]步骤4-4:读取所有检查对象{cro1…cron},并逐一检查各个检查对象的第一个字符,根据步骤1-3中的检查级别属性的定义规则,判断检查级别属性;[0031]步骤4-5:当检查级别属性为cl=0时,则不检查该枚举型字段,当检查级别属性为cl=1或cl=2时,则读取该枚举型字段的枚举值,并进行group分组,得到{v′1…v′k},将{v′1…v′k}与该枚举型字段的备注信息中的{v1…vm}进行比较,检查如果存在v′i∈{v′1…v′k}但不存在v′i∈{v1…vm},则可判定在该枚举型字段的枚举值存在越界;[0032]步骤4-6:如果检查级别属性为cl=1,则在系统日志文件中记录该检查时间和对应的表名、字段名、字段值越界集合,所述表名为该枚举型字段所在表的表名,所述字段名即为该枚举型字段的字段名称,所述字段值越界集合为该枚举型字段由上一步骤发现的不属于取值范围{v1…vm}内的v′i集合。[0033]本发明所达到的有益效果:[0034](1)扩展了数据库表字段备注的使用场景,从一般的简单注释,扩展到带有可解释的规则性定义。[0035](2)本发明中考虑了特别适合用中小型软件开发团队使用的场景,节约了软件开发运维的文档同步成本,基于一处数据库配置即可长期生效。[0036](3)本发明充分利用数据库的长期性和相对稳定性特点,即应用系统无论如何迭代和版本改进,但基于数据库的表字段结构是相对长期和稳定的结构,系统后期的迭代升级都会考虑兼容和保存当前业务数据库的ddl信息。巧妙了避免了文档在不同时期和多个系统间流转丢失和不同步的问题。[0037](4)本发明提供的针对一般业务应用系统设计中常用的枚举型字段,一旦根据规则设定和数据结构维护好字段的越界范围,即可以交由定时软件全自动执行,无需人工干预,节约了运维人力成本,使得业务系统具有一定的自动维护特性。避免了因为人工失误导致系统数据被污染。[0038](5)本发明创造性的提出了利用字符串的序列化结构存储对于字段的自动检查规则的描述,且该检查规则支持各种类型扩展,且保留了值和意义的键值对结构,实现了其本身含义的直观可解释性、且便于理解和维护、通过传统的数据库运维工具即可完成对该字符串的新增修改,方便快捷,实用价值高。且对原系统代码结构完全无侵入性影响,适用性广,可对未来的业务系统和已有业务系统都采用本发明的方法进行枚举型字段的越界自动检查管理。附图说明[0039]图1为本发明的一种示例性实施例的方法流程图。具体实施方式[0040]下面结合附图1对本发明作进一步的说明:[0041]如图1所示的一种利用数据库字段备注信息自动检查枚举型字段值越界的方法,通过按照数据库相关枚举型字段备注信息中约定的规则,对当前数据库中该字段的值进行自动检查,用以发现枚举型字段取值越界异常,从而使得数据库管理员及时发现数据异常,提醒系统开发团队修复字段约束和实际取值不一致的问题。这里提到数据库表字段包含枚举型字段,但不是全部,例如本方法当监控到有数据写入变动的数据库字段(可能包括各种类型的数据库字段,比如存放一般文本型,数值型字段),而枚举型字段实际存放的值也是文本型或者数值型,所述枚举型字段是指数据库表中字段的业务特征,该业务特征表现为该字段的值是可枚举的,例如类型,性别,等级。[0042]具体包括如下步骤:[0043]步骤1:通过特定的格式,针对特定业务系统枚举型字段,定义一个约束取值集合和字段类型的检查对象checkruleobject(简称cro),下面按照举例进行步骤详细实施说明;[0044]步骤1-1:举例目前数据库中有订单业务表t,t中有若干字段,其中有订单状态字段f为枚举型字段,定义该字段f对应的cro对象的的取值范围属性fv,定义枚举值集合为{‘0’、‘1’、‘2’},[0045]步骤1-2:定义字段f的cro对象中的逻辑含义属性fd,对应fv属性定义枚举值的逻辑含义描述集合为{‘未付款’、‘未发货’、‘已发货’};[0046]步骤1-3:定义字段f的cro对象中的检查级别属性cl,cl为0时表示无需进行定时检查,cl为1时表示需要进行定时检查、但无需通知只在日志中记录检查结果,cl为2时表示需要进行定时检查和通知,此处举例字段f需要进行定时间和通知,则字段f的cl属性值为2;[0047]步骤1-4:定义字段f的cro对象中的字段值类型属性ft,其值类型定义可选择为浮点型0、整形1、字符串(包括字符型)2,此处举例将其定义为整形,则字段f的ft属性值为1;[0048]步骤1-5:定义字段f的cro对象中的字段逻辑名称属性fl,定义其逻辑名称为“订单类型”,其的长度为4个字符;[0049]步骤2:将字段f的cro对象转换为特定语法结构的字符串描述;[0050]步骤2-1:构建一个有序空字符串s;[0051]步骤2-2:s的第1位字符s1值取该cro对象的检查级别属性cl,根据举例此时s=“2”;[0052]步骤2-3:s的第2位字符s2值取该cro对象的字段值类型属性ft,根据举例此时s=“21”;[0053]步骤2-4:s的第3位字符s3和第4位字符s4值为该cro对象的字段逻辑名称属性fl的字符串长度n,根据举例此时n=4,此时s=“2104订单类型”;[0054]步骤2-5:s的第n+4位字符sn+4开始为以“[”开始,以“];”结尾,中间以fv的{v1…vm}和fd的{d1…dm}组成[vi,di],i∈{1…m}的键值对,根据举例此时n=4,m=3,s=“2104订单类型[0,未付款];[1,未发货];[2,已发货];”。[0055]步骤3:将s写入对应数据库对应表t中相应字段f的备注信息;[0056]步骤4:通过自定义定时调度任务,定期读取当前数据库表字段的所有备注信息中的cro信息和当前数据库该字段的值信息,进行比较检查是否符合,如果不符合则判定为越界;[0057]步骤4-1:自定义定时调度任务程序,该任务程序可配置定时调度出发的定时策略,举例此时定义为每24小时执行一次;[0058]步骤4-2:每24小时内,该程序读取当前目标数据库中此段时间内所有的变动修改值,读取的信息包括变动的表名,变动的字段,字段之前的值,字段变动之后的值,此处举例如果订单表t发生新写入数据,写入一条数据中订单类型字段f,f的值为3,则数据库变动信息表述为{table:“t”,field:“f”,before_value:null,current_value:“3”};[0059]步骤4-3:根据步骤4-2的数据变动信息,读取发生数据变动的字段f的备注信息;[0060]步骤4-4:读取字段f的备注信息为“2104订单类型[0,未付款];[1,未发货];[2,已发货];”,由之前步骤1中已经约定的备注cro对象字符串格式来看,可判断字段f为枚举型字段。;[0061]步骤4-5:读取该字符串中的第一位字符,可得到检查级别为cl=2的,表示需要检查该字段f,并对当前表t中字段f的所有值进行group分组,得到{‘0’、‘1’、‘3’},根据字段f的备注信息字符串s=“2104订单类型[0,未付款];[1,未发货];[2,已发货];”,则可判定在该表t中字段f的取值范围是定于约束在{‘0’、‘1’、‘2’}集合中,因为{‘3’}不属于{‘0’、‘1’、‘2’}的子集,因为此可判断字段f存在值越界;[0062]步骤4-6:此时根据cro对象可得到cl为2,则在系统日志文件中记录该检查时间和对应的表名,字段名,字段值存在越界;[0063]步骤5:因为cl=2,则判定越界,通过邮件短信等形式通知数据管理员和系统开发团队相关人员,假如cl=0,则跳过步骤5;[0064]步骤6:相关干系人排查不一致原因,由系统开发团队提交字段f新的cro定义,并通过数据库管理员更新到数据库对应备注字段中,假设判定字段f的cro表达中应该增加对该值的检查约束支持,则此时字段f的备注信息应改为“2104[0,未付款];[1,未发货];[2,已发货、[3,已退回];”,从而实现了字段f的新版本cro对象的更新,也使得数据库管理员可及时了解表t的业务变化情况;[0065]步骤7:继续步骤4的定时调度任务检查,直到该定时任务终止。期间继续按照定时任务周期,不断检查字段f是否发生了新的值写入或修改。如自动越界检查终止运行,则自动越界检查结束。从而实现自动检查,无需人工干预,根据项目自身特点可将定时时间进行不同设定。[0066]本方明与现有技术相比,本发明克服现有数据库字段信息管理的不足,提供一种利用数据库字段备注信息自动检查枚举型字段值越界的方法,用以发现枚举型字段取值越界异常,从而使得数据库管理员及时发现数据异常,提醒系统开发团队修复字段约束和实际取值不一致的问题。所达到的有益效果具体为:[0067](1)扩展了数据库表字段备注的使用场景,从一般的简单注释,扩展到带有可解释的规则性定义。[0068](2)本发明中考虑了特别适合用中小型软件开发团队使用的场景,节约了软件开发运维的文档同步成本,基于一处数据库配置即可长期生效。[0069](3)本发明充分利用数据库的长期性和相对稳定性特点,即应用系统无论如何迭代和版本改进,但基于数据库的表字段结构是相对长期和稳定的结构,系统后期的迭代升级都会考虑兼容和保存当前业务数据库的ddl信息。巧妙了避免了文档在不同时期和多个系统间流转丢失和不同步的问题。[0070](4)本发明提供的针对一般业务应用系统设计中常用的枚举型字段,一旦根据规则设定和数据结构维护好字段的越界范围,即可以交由定时软件全自动执行,无需人工干预,节约了运维人力成本,使得业务系统具有一定的自动维护特性。避免了因为人工失误导致系统数据被污染。[0071](5)本发明创造性的提出了利用字符串的序列化结构存储对于字段的自动检查规则的描述,且该检查规则支持各种类型扩展,且保留了值和意义的键值对结构,实现了其本身含义的直观可解释性、且便于理解和维护、通过传统的数据库运维工具即可完成对该字符串的新增修改,方便快捷,实用价值高。且对原系统代码结构完全无侵入性影响,适用性广,可对未来的业务系统和已有业务系统都采用本发明的方法进行枚举型字段的越界自动检查管理。[0072]以上实施例不以任何方式限定本发明,凡是对以上实施例以等效变换方式做出的其它改进与应用,都属于本发明的保护范围。当前第1页12当前第1页12