著录项信息
专利名称 | 一种自动监测数据库中记录变化的方法和系统 |
申请号 | CN201210039995.3 | 申请日期 | 2012-02-20 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-09-12 | 公开/公告号 | CN102662946A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 北京地拓科技发展有限公司 | 申请人地址 | 北京市海淀区农大南路1号硅谷亮城5号楼201
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京地拓科技发展有限公司 | 当前权利人 | 北京地拓科技发展有限公司 |
发明人 | 雷章;史明昌;郑国柱 |
代理机构 | 北京润泽恒知识产权代理有限公司 | 代理人 | 苏培华 |
摘要
本发明公开了一种自动监测数据库中记录变化的方法,包括:分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。本发明还提供相应的系统。本发明可不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。并且根据本发明可以灵活实现异构数据库间的数据交换。
一种自动监测数据库中记录变化的方法和系统\n技术领域\n[0001] 本发明涉及数据存储及管理技术领域,尤其涉及一种自动监测数据库中记录变化的方法和系统。\n背景技术\n[0002] 在数据库系统应用中,应用的数据交换中间件,需要对不同数据库的对应数据表变化做监视,将变化的数据记录自动同步到各目标数据库中。有时还需要进行数据库之间的数据交换,以根据其他数据库的数据变化来做相应的处理。添加,删除或修改数据库的对象,一旦误操作,可能会导致大麻烦,需要一个数据库管理员或开发人员对相关可能受影响的实体进行代码的重写。因此有必要对数据库数据记录的变化进行自动监测。\n[0003] 然而数据库系统厂商不会对自身产品修改,其数据库结构也不会修改。\n[0004] 现有技术中,对数据库中数据记录的变化进行自动监测的方法通常有如下两种:\n[0005] 第一种,通过数据库触发器来捕获数据记录变化。\n[0006] 为了在数据库结构发生变动时,能够进行跟踪、记录,可以利用DDL触发器来记录类似“用户建立表”这种变化的操作,这样可以大大减轻跟踪和定位数据库模式的变化的繁琐程度。\n[0007] DDL触发器是一种特殊的触发器,在响应数据定义语言(DDL)语句时触发。可以用于在数据库中执行管理任务,例如,审核以及规范数据库操作。\n[0008] 使用DDL触发器,可以达到以下几种目的:\n[0009] 要防止对数据库架构进行某些更改;\n[0010] 希望数据库中发生某种情况以响应数据库架构中的更改;\n[0011] 要记录数据库架构中的更改或事件。\n[0012] 与标准的DML触发器一样,DDL触发器在响应事件时执行存储过程。但与标准的DML触发器不同的是,它们并不在响应对表或视图的UPDATE、INSERT或DELETE语句时执行存储过程。它们主要在响应数据定义语言(DDL)语句执行存储过程。执行DDL式操作的系统存储过程也可以激发DDL触发器。\n[0013] 首先,需要建立一个表,用来记录数据库范围内所有DDL操作;\n[0014] 用于保存DDL事件的表在创建好之后,还需要建立一个DDL触发器,监控数据库中DDL_DATABASE_LEVEL_EVENTS级别的所有事件:\n[0015] 通过创建一个日志表来保存所有DDL操作以及创建数据库级别的DDL触发器,能够成功地捕获数据库中所有DDL级的变化,为DBA跟踪和监视任何改变提供了更强大的功能。\n[0016] 这种方法依赖于数据库的触发器配置,当数据记录发生变化时,由数据库主动将变化信息发送出来。\n[0017] 第二种方案,在表中增加一个时间戳字段记录数据更新时间。\n[0018] 当在某一重要的时间段需要监控某张表的变化情况,包含插入、更新、删除。举例来说,当把数据导出到外部的系统时,希望导出的是全部的数据,而且最好是导出上次导出之后变动的数据。\n[0019] 作为DBA,可采传统的触发器操作,来构建一个元数据表或一个时间戳列来监控数据的变化。\n[0020] 例如,使用CheckSum()and CheckSum_Agg()函数通常用于检测一个表的数据是否更改。这是一个代替触发器的更好的方法,只是该操作会引起表扫描的操作。于是仍然使用元数据来跟踪数据的变化,只是新建列用于保存CHECKSUM_AGG(BINARY_CHECKSUM(*)),它将会在全表中产生一个唯一值,以区别数正如你所看到的那样,对于单个的变化的情况,CHECKSUM是使用比较好的,但是CHECKSUM_AGG()却不能反应数据的变化据的变化情况。\n[0021] 但是发现调整前后CHECKSUM_AGG(BINARY_CHECKSUM(*))的值是一样的,不能区分。CHECKSUM_AGG()函数尽管被描述为能监测表数据的变化,在实际测试中是不行的。尤其是对表进行对称数据修改时,无法监测。\n[0022] 该第二种方法在数据表中加入一个时间戳字段,记录数据记录变化的时间,达到监视数据记录变化的目的。\n[0023] 这两种方案都需要依赖于具体数据库的特性,比如做编程才能实现对数据记录变化的监视,不具备通用性。\n发明内容\n[0024] 有鉴于此,本发明提供一种自动监测数据库记录变化的方法和系统,不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。本发明提供的一种自动监测数据库记录变化的方法,包括:\n[0025] 分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;\n[0026] 定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;\n[0027] 将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。\n[0028] 本发明提供的一种自动监测数据库记录变化的系统,包括:\n[0029] 存储单元,用于分别为所监测的目标数据库中的各数据表建立状态表,该状态表中保存有所述数据表的数据记录对应的哈希值及主键值;\n[0030] 扫描单元,用于定期自动扫描数据库中各数据表;\n[0031] 计算单元,用于计算得到各数据记录对应的哈希值集合;\n[0032] 对比单元,用于将扫描所述数据表得到的哈希值与所述存储单元中状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。\n[0033] 综上所述,本发明提供的自动监测数据库记录变化的技术方案,不从具体数据库出发,而是从技术标准SQL语句的执行读取数据库中数据表中的记录,然后生成对应的哈希值,记录该记录的主键值和哈希值,保存于状态表中,以备后续的扫描对比,发现数据记录的具体变化动作。不依赖于具体数据库,就可自动监测数据库中对应数据表的数据记录发生了增删改的哪种变化。本发明可不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。并且根据本发明可以灵活实现异构数据库间的数据交换。\n附图说明\n[0034] 图1为本发明提供的一种自动监测数据库记录变化的方法流程图;\n[0035] 图2为本发明提供的自动监测数据库记录变化的系统架构示意图。\n具体实施方式\n[0036] 鉴于现有技术中,对数据库中数据记录的变化进行自动监测的方法存在不足,本发明针对非侵入式数据库提出一种自动监测数据库中记录变化的方法和系统,不依赖于具体数据库,就可自动分辨出数据库中对应数据表的数据记录发生了哪些具体变化。\n[0037] 非侵入式:不需要在目标数据库中做多余的工作,就可以实现目标。即对数据库依赖较小,通用性较高。\n[0038] 数据库记录变化:指数据库中各数据表的记录发生的增加、删除或修改的变化。\n[0039] 参照图1,本发明提供一种自动监测数据库中记录变化的方法,包括如下步骤:\n[0040] S01,分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;\n[0041] S02,定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;\n[0042] S03,将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。\n[0043] 具体实施方案中,数据库可采用下述任一种类型:\n[0044] oracle、mysql、access、sqlite。\n[0045] 所述计算得到出各数据记录对应的哈希值是通过标准的SQL语句读取后计算出数据记录对应的哈希值。\n[0046] 具体地,假设需要关注某数据库中的表A、表B,监测其变化的步骤为:\n[0047] 1)为表A、表B分别建立状态表a和表b,分别计算表A和表B的数据记录对应的哈希值及主键值,并分别将表A和表B的数据记录对应的哈希值及主键值保存到两张状态表表a和表b中;\n[0048] 通过标准SQL查询语句,读取表B各记录的主键,即作为本方法中所需的主键值;\n读取表B各记录的所有字段,转成字符串形式,然后计算出对应的哈希值(MD5),作为本方法中所需的记录哈希值。\n[0049] 2)定期自动扫描数据库表A和表B,计算出数据记录对应的哈希值集合;\n[0050] 3)将扫描表A所得哈希值与表a保存的哈希值对比,得出表A记录发生的变化;\n扫描表B所得哈希值与表b保存的哈希值对比,得出表B记录发生的变化。\n[0051] 由于本发明提供的方法是通过标准的SQL语句读取所监视表的记录,例如读取表B的记录,就用select*from B】后计算出数据记录对应的哈希值作为数据变化前后比较的基础的,不依赖于具体数据库的特性,所有具有较好的通用性,在实际生产中可以支持多种数据库环境。\n[0052] 本发明提供的自动监测数据库记录变化的方法不依赖于具体数据库的特性,可以对不同数据库数据表记录变化做监视,比如oracle、mysql、access、sqlite等,具备通用性。\n[0053] 根据本发明可以灵活实现异构数据库间的数据交换。\n[0054] 由于本方法是基于标准SQL来实现的,那么就适用于所有兼容标准SQL语句执行的数据库,即可以检测中各数据库,数据表的记录变化。这些变化的记录就可以通过另外一种交换机制,同步到其他数据库中。\n[0055] 因此,基于本发明可实现异构数据库间数据交换。\n[0056] 参照图2,本发明实施例提供的自动监测数据库中记录变化的系统200,包括:\n[0057] 存储单元210,用于存储分别为所监测的目标数据库中的各数据表建立状态表,该状态表中保存有所述数据表的数据记录对应的哈希值及主键值;\n[0058] 扫描单元220,用于定期自动扫描数据库中各数据表;\n[0059] 读取数据库中数据表中的记录,并提供给计算单元230;\n[0060] 计算单元230,用于计算得到各数据记录对应的哈希值集合;\n[0061] 对比单元240,用于将扫描所述数据表得到的哈希值与存储单元210中状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。\n[0062] 所述数据库为下述任一种类型:\n[0063] oracle、mysql、access、sqlite。\n[0064] 其中,计算单元230包括:\n[0065] 数据读取模块230a,通过标准的SQL语句读取数据库中数据记录;\n[0066] 计算模块230b,计算得到出各数据记录对应的哈希值。\n[0067] 综上所述,本发明提供的自动监测数据库记录变化的技术方案,不从具体数据库出发,而是从技术标准SQL语句的执行读取数据库中数据表中的记录,然后生成对应的哈希值,记录该记录的主键值和哈希值,保存于状态表中,以备后续的扫描对比,发现数据记录的具体变化动作。不依赖于具体数据库,就可自动监测数据库中对应数据表的数据记录发生了增删改的哪种变化。\n[0068] 应用实例\n[0069] 在全国水土保持监测网络与信息系统工程建设中应用的数据交换中间件,采用本发明提供的技术方案自动对不同数据库的对应数据表变化做监视,将变化的数据记录自动同步到各目标数据库中。\n[0070] 由于其非侵入的特征,可以使全国各流域和省份的数据库安装及配置都采用默认方式即可,然后启动本发明中提及的系统,即可实现对各流域和省份的数据库记录作自动检测。然后由其他程序将检测中发现的变化信息同步到各地方的数据库中。\n[0071] 以上对本发明所提供的一种自动监测数据库中记录变化的技术方案,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
法律信息
- 2015-10-07
- 2012-11-07
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 201210039995.3
申请日: 2012.02.20
- 2012-09-12
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-04-21
|
2009-10-23
| | |
2
| |
2011-06-15
|
2009-12-11
| | |
3
| |
2008-03-05
|
2007-09-26
| | |
4
| |
2009-06-24
|
2009-01-06
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |