一种自动监测数据库中记录变化的方法和系统技术方案

技术编号:7759121 阅读:674 留言:0更新日期:2012-09-14 01:02
本发明专利技术公开了一种自动监测数据库中记录变化的方法,包括:分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。本发明专利技术还提供相应的系统。本发明专利技术可不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。并且根据本发明专利技术可以灵活实现异构数据库间的数据交换。

【技术实现步骤摘要】

本专利技术涉及数据存储及管理
,尤其涉及一种自动监测数据库中记录变化的方法和系统
技术介绍
在数据库系统应用中,应用的数据交换中间件,需要对不同数据库的对应数据表变化做监视,将变化的数据记录自动同步到各目标数据库中。有时还需要进行数据库之间的数据交换,以根据其他数据库的数据变化来做相应的处理。添加,删除或修改数据库的对象,一旦误操作,可能会导致大麻烦,需要一个数据库管理员或开发人员对相关可能受影响的实体进行代码的重写。因此有必要对数据库数据记录的变化进行自动监测。 然而数据库系统厂商不会对自身产品修改,其数据库结构也不会修改。现有技术中,对数据库中数据记录的变化进行自动监测的方法通常有如下两种第一种,通过数据库触发器来捕获数据记录变化。为了在数据库结构发生变动时,能够进行跟踪、记录,可以利用DDL触发器来记录类似“用户建立表”这种变化的操作,这样可以大大减轻跟踪和定位数据库模式的变化的繁琐程度。DDL触发器是一种特殊的触发器,在响应数据定义语言(DDL)语句时触发。可以用于在数据库中执行管理任务,例如,审核以及规范数据库操作。使用DDL触发器,可以达到以下几种目的要防止对数据库架构进行某些更改;希望数据库中发生某种情况以响应数据库架构中的更改;要记录数据库架构中的更改或事件。与标准的DML触发器一样,DDL触发器在响应事件时执行存储过程。但与标准的DML触发器不同的是,它们并不在响应对表或视图的UPDATE、INSERT或DELETE语句时执行存储过程。它们主要在响应数据定义语言(DDL)语句执行存储过程。执行DDL式操作的系统存储过程也可以激发DDL触发器。首先,需要建立一个表,用来记录数据库范围内所有DDL操作;用于保存DDL事件的表在创建好之后,还需要建立一个DDL触发器,监控数据库中DDL_DATABASE_LEVEL_EVENTS 级别的所有事件通过创建一个日志表来保存所有DDL操作以及创建数据库级别的DDL触发器,能够成功地捕获数据库中所有DDL级的变化,为DBA跟踪和监视任何改变提供了更强大的功倉泛。这种方法依赖于数据库的触发器配置,当数据记录发生变化时,由数据库主动将变化信息发送出来。第二种方案,在表中增加一个时间戳字段记录数据更新时间。当在某一重要的时间段需要监控某张表的变化情况,包含插入、更新、删除。举例来说,当把数据导出到外部的系统时,希望导出的是全部的数据,而且最好是导出上次导出之后变动的数据。作为DBA,可采传统的触发器操作,来构建一个元数据表或一个时间戳列来监控数据的变化。例如,使用CheckSum O and CheckSum_Agg()函数通常用于检测一个表的数据是否更改。这是一个代替触发器的更好的方法,只是该操作会引起表扫描的操作。于是仍然使用元数据来跟踪数据的变化,只是新建列用于保存CHECKSUM_AGG(BINARY_CHECKSUM(*)),它将会在全表中产生一个唯一值,以区别数正如你所看到的那样,对于单个的变化的情况,CHECKSUM是使用比较好的,但是CHECKSUM_AGG O却不能反应数据的变化据的变化情况。但是发现调整前后CHECKSUM_AGG(BINARY_CHECKSUM(*))的值是一样的,不能区分。CHECKSUM_AGG()函数尽管被描述为能监测表数据的变化,在实际测试中是不行的。尤其是对表进行对称数据修改时,无法监测。该第二种方法在数据表中加入一个时间戳字段,记录数据记录变化的时间,达到监视数据记录变化的目的。这两种方案都需要依赖于具体数据库的特性,比如做编程才能实现对数据记录变化的监视,不具备通用性。
技术实现思路
有鉴于此,本专利技术提供一种自动监测数据库记录变化的方法和系统,不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。本专利技术提供的一种自动监测数据库记录变化的方法,包括分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。 本专利技术提供的一种自动监测数据库记录变化的系统,包括存储单元,用于分别为所监测的目标数据库中的各数据表建立状态表,该状态表中保存有所述数据表的数据记录对应的哈希值及主键值;扫描单元,用于定期自动扫描数据库中各数据表;计算单元,用于计算得到各数据记录对应的哈希值集合;对比单元,用于将扫描所述数据表得到的哈希值与所述存储单元中状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。综上所述,本专利技术提供的自动监测数据库记录变化的技术方案,不从具体数据库出发,而是从技术标准SQL语句的执行读取数据库中数据表中的记录,然后生成对应的哈希值,记录该记录的主键值和哈希值,保存于状态表中,以备后续的扫描对比,发现数据记录的具体变化动作。不依赖于具体数据库,就可自动监测数据库中对应数据表的数据记录发生了增删改的哪种变化。本专利技术可不依赖具体数据库的特性实现对数据记录变化的监视,具备通用性。并且根据本专利技术可以灵活实现异构数据库间的数据交换。附图说明图I为本专利技术提供的一种自动监测数据库记录变化的方法流程图;图2为本专利技术提供的自动监测数据库记录变化的系统架构示意图。具体实施例方式鉴于现有技术中,对数据库中数据记录的变化进行自动监测的方法存在不足,本专利技术针对非侵入式数据库提出一种自动监测数据库中记录变化的方法和系统,不依赖于具体数据库,就可自动分辨出数据库中对应数据表的数据记录发生了哪些具体变化。非侵入式不需要在目标数据库中做多余的工作,就可以实现目标。即对数据库依赖较小,通用性较高。 数据库记录变化指数据库中各数据表的记录发生的增加、删除或修改的变化。参照图1,本专利技术提供一种自动监测数据库中记录变化的方法,包括如下步骤S01,分别为所监测的目标数据库中的各数据表建立状态表,分别计算各数据表中数据记录对应的哈希值及主键值,并将所得到的哈希值及主键值保存到所述状态表中;S02,定期自动扫描数据库中各数据表,计算得到各数据记录对应的哈希值集合;S03,将扫描所述数据表得到的哈希值与所述状态表保存的哈希值对比,确定所述数据表中记录是否发生的变化。具体实施方案中,数据库可采用下述任一种类型oracle、mysql、access、sqlite。所述计算得到出各数据记录对应的哈希值是通过标准的SQL语句读取后计算出数据记录对应的哈希值。具体地,假设需要关注某数据库中的表A、表B,监测其变化的步骤为I)为表A、表B分别建立状态表a和表b,分别计算表A和表B的数据记录对应的哈希值及主键值,并分别将表A和表B的数据记录对应的哈希值及主键值保存到两张状态表表a和表b中;通过标准SQL查询语句,读取表B各记录的主键,即作为本方法中所需的主键值;读取表B各记录的所有字段,转成字符串形式,然后计算出对应的哈希值(MD5),作为本方法中所需的记录哈希值。2)定期自动扫描数据库表A和表B,计算出数据记录对应的哈希值集合;3)将扫描表A所得哈希值与表a保存的哈希值对比,得出表A记录发生的变化;扫描表本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:雷章史明昌郑国柱
申请(专利权)人:北京地拓科技发展有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1