专利名称:数据库表更新的动态监控系统及方法
技术领域:
本发明涉及一种数据库表更新的动态监控系统及方法背景技术在一个大型的客户服务器应用系统中,常常是很多个客户端和后台服务协同工作,基于同一个数据库共同完成一组相关的系统任务。由于多个客户端的存在,任一个客户端都可能对同一组数据库资源进行访问和操作,哪怕是进行了分组的访问权限设置。但由于缺乏动态的数据库更新通知机制,一个客户端在进行自己的操作前不可能知道相关的数据库资源是否已被其他的客户端所更改,除非进行先期的手动强制更新,因此而提交的操作事务常常会以失败而告终。
一个典型的例子是,一个大型的图书馆的图书借阅系统。当我们通过系统提交并成功得到了一个未借书籍的查询清单,但由于存在大量的借阅者,常常是就在我们浏览清单的时候,其中的某些书籍已经被其他的借阅者借走,而我们却并不知晓。因此,有可能使我们辛辛苦苦通过浏览清单后所提交的某些借阅请求被系统无情的拒绝。
此时,我们很希望系统能够拥有对数据库资源更新的动态监控机制,使我们可以时时刻刻都能得到最新的查询清单,无论是我们在浏览清单的时候。这样,我们将可以有效地避免一些不必要的操作和由此带来的失败。
在一个应用系统中,我们可以通过COM(组件对象模型)技术非常容易地实现对象间的实时通知,利用DCOM(分布式组件对象模型)和COM+(增强型组件对象模型)技术,我们甚至可以实现远程之间的实时通知。但是,在应用系统和数据库系统之间,要实现实时的通知却是非常困难的。
发明内容
本发明所要解决的技术问题是提供一种数据库表更新的动态监控系统及方法,其可以简单地发现关系型数据库中任意表的实时更新,无论这种更新是来自前台的还是来自后台的,可以向客户系统提供数据库表更新的实时通知。
为了解决上述技术问题,本发明采用了下述技术方案提供一种数据库表更新的动态监控系统,包括监控表,其存储所有用户表的表名以及其生命标志;监控触发器,该触发器将截获用户表的任意更新,维护监控表中相应纪录的表生命标识,该触发器与所述用户表一一对应,可截获相应用户表的插入、更新、删除操作;监控表备份,系统在应用部分为监控表配备了一个备份;监控模块,其通过数据库连接器访问监控表,获得用户表的生命标志,将获得的用户表生命标志同监察院控表备份进行对比,以发现更改;发布接口,输出实时的数据库表更新通知。
同时,本发明还提供一种数据库表更新的动态监控方法,包括如下步骤1)、建立监控表创建一个用户监控表,并在该表内填充所有用户表的表名以及其生命标志;2)、准备监控触发器删除现有的监控触发器,并为每一个用户表创建新的监控触发器;3)、创建监控表备份,系统在应用部分为监控表配备了一个备份;4)、实时监控访问监控表,获得用户表的生命标志,将获得的用户表的生命标志同监控表备份进行对比,以对用户表更新的事件进行实时的发布;由于采用了上述技术方案,本发明的优点是(1)基于触发器的结构,充分利用既有的系统资源触发器是关系型数据库的一项基本技术。经过配置,触发器可以发现数据库表的任意更新。基于关系型数据库触发器的设计,是我们可以充分利用既有的资源,无需额外的软硬件投资。
(2)基于标准的SQL(国际标准结构化查询语言)脚本设计,提供最大化的环境支持SQL语言是一种国际标准的数据库语言。使用基于标准SQL语言脚本的设计,使我们的设计可以不经变更或很少的变更,适用于任何类型的关系型数据库系统。
(3)表生命状态设计,提供了一种全新的设计概念表生命状态提供了一种解决关系型数据库表更新动态监控的全新概念。基于表生命状态概念的监控表和触发器设计结构,提供了一种简洁可靠的关系型数据库表实时监控策略。
(4)面向对象的全自动过程设计,支持透明的产品化集成封装和继承重载(5)全自动的过程设计,无需客户系统进行任何形式的再开发工作。独立的可封装类,基于公开的接口,向客户系统提供数据库表更新的实时通知。所有的过程是透明的。
图1是本发明的数据库表动态监控系统的结构示意图。
具体实施例方式
图1描述的是一个完整的可封装的类,封装后的类可以独立工作,向客户系统提供数据库表更新的实时通知。以次类为基础,可以组建一个动态数据的应用系统,在该系统中,数据库的数据对客户是实时的。
这里,我们使用的数据库是MICROSOFT SQL SERVER 2000,开发系统使用的是MICROSOFT VISUAL BAISIC.NET。
如图1所示系统包括监控表1,其存储所有用户表的表名以及其生命标志;监控触发器2,该触发器将截获用户表的任意更新,维护监控表中相应纪录的表生命标识,该触发器与所述用户表一一对应,可截获相应用户表的插入、更新、删除操作;监控表备份3,系统在应用部分为监控表配备了一个备份;监控模块4,其通过数据库连接器访问监控表,获得用户表的生命标志,将获得的用户表生命标志同监察院控表备份进行对比,以发现更改;发布接口(图中未示),输出实时的数据库表更新通知,系统提供了两种类型的输出,事件和DataTable(数据表)类型的属性。客户可以由此获得实时的数据库表更新通知。
本发明的数据库表更新的动态监控方法包括如下步骤
1、建立监控表步骤;2、准备监控触发器步骤;3、实时监控步骤;4、清理步骤。
一、建立监控表1)、应用系统自动创建一个用户监控表该表存储除监控表自己外的所有用户表的表名以及其生命标志。监控表结构如下
必须首先查询SYSOBJECTS(数据库系统对象表)系统表,以确认监控表的存在。如果监控表已经存在,则立即将其删除。并按上表格式重新创建监控表。使用简体中文排序规则。
注意监控表表名可以是任意的,但无论如何,他应该被视为系统的保留字,不能被另作他表名使用。
监控表应该在系统启动时,通过应用系统自动创建,在退出时自动删除。监控表可以看作是一个临时的表,其生命周期和应用系统的生命周期相同。在下面的描述中,除非特别声明,监控表不在我们的用户表之列。
2)、对监控表进行数据填充填充的过程必须通过应用系统自动完成。因为,在应用系统每次启动之前,数据库表有可能已经进行了重新的定义。
填充的过程分为两个部分a获取数据库中所有用户表表名查询SYSOBJECTS系统表,以发现所有的用户表表名列表。
b填充监控表首先,必须将监控表中的数据全部清除;然后,通过查询SYSOBJECTS系统表,获取所有的用户表表名列表,并将其插入监控表中。
通过上述创建和填充两个步骤,我们已经获得了一个包含所有除监控表自己外的用户表表名的监控表。除表名字段外,该表还包含一个重要的生命标志字段,随后系统将使用这个字段进行数据库表更新的校验。
二、准备监控触发器触发器是数据库表更新的动态监控机制的基础。
这里,使用“TBC_”作为监控触发器的保留字。为所有的除监控表外的用户表创建一个以“TBC_表名”格式命名的FOR INSERT,UPDATE,DELETE(插入、更新、删除)的触发器。因此,“TBC_表名”的所有命名应该被视作系统的保留字,不可以用于创建其他的数据库对象,否则系统将发生兼容性故障。
准备监控触发器的过程应该是自动的,其中包括两个步骤1)删除现有的监控触发器由于系统启动之前,数据库有可能已经发生了重新的定义,有很多因素已经不可预见,为了确保系统的正常运作,我们应该对所有的监控触发器进行清理。
我们必须首先使用SQL语句查询SYSOBJECTS系统表,以发现一个监控触发器的存在。如果存在,则立即将其删除对于所有用户表,我们必须执行一次清理。在Microsoft VisualBasic.Net中我们可以使用循环以遍历所有的用户表。
2)创建新的监控触发器监控触发器清理完成后,我们必须紧跟着为每一个用户表创建新的监控触发器。监控触发器的类型必须为FOR INSERT,UPDATE,DELETE的。
监控触发器应包含必要的SQL语句,一旦触发器被触发,可以立即以当前时间更新指定用户表在监控表中的生命标志。
通过上述的删除和创建两个步骤,我们已经为所有的用户表创建了一个FOR INSERT,UPDATE,DELETE的触发器。至此,对表的任意更新操作,无论是来自于前台的还是来自于后台的,都将引发刚刚创建的触发器,导致监控表中对应表的生命标志发生最新的更改。
三、实时监控上面,我们已经为数据库表更新的动态监控准备了必要的环境资源。下面,我们将通过三个简单的步骤发现并发布数据库表的更新。
这里,我们使用了一个系统定时器对监控表进行轮训,轮训的周期可以根据系统的具体情况进行相应的调整。
1)获取用户表的生命标志由于监控触发器已经为所有的用户表在监控表中维护了最新的生命标志,因此在这里我们只需要通过一个简单的监控表访问,即可以获得所有表的生命标志。
2)更新校验这里,我们在应用系统中为所有用户表的生命标志准备了一个备份。我们只需要将刚刚所获得所有用户表的生命标志同备份进行简单的逐一比对,即可以发现一个表的更新与否。
注意,非常重要的一步是,在进行新旧的比对后,必须对应用系统中的所有表的生命标志的备份进行无条件的更新,否则我们将总是会得到表的更新报告。
3)发布系统最终的目的是将表更新的事件进行实时的发布,以通知所有的客户端。
这里,我们为不同的应用需求准备了两种类型的发布接口。
aDataTable类型的属性DataTable(数据表)是ADO.NET(微软的一种最新的数据访问技术)中的核心对象。表示内存中数据的一个表。DataTable对象是可以远程处理的ADO.NET对象。客户端可以通过类似上述第2)步的新旧比较,获得表的更新事件。
b事件通知这是一种令人心悦的通知方式。这种方式下,客户端不需要再做其它的工作,只需要在事件范围内执行相应的业务响应。
实现该方式,我们只需要声明一个公开的事件,并在表发生更改时执行触发。
至此,我们实现了对数据库表的动态监控。但是作为一个完整的系统,我们还需要必要的结束过程。
四、清理应用系统结束之前,系统应该对环境进行清理。
系统的结束过程与初始化过程相对应,也包括两个主要的部分,这两个部分针对初始化过程中所创建的临时资源进行清理,主要包括两个数据库脚本。
1)删除监控触发器对所有的监控触发器,使用SQL(国际标准结构化查询语言)语句逐一查询SYSOBJECTS(数据库系统对象表)系统表,如果指定的监控触发器存在,则立即删除。
2)删除监控表使用SQL语句查询SYSOBJECTS系统表,如果指定的监控表存在,则立即删除。
至此,实现了对数据库表的动态监控的全部步骤。接下来,可以对系统进行封装,以展现给客户的是一个透明的系统。
权利要求
1.一种数据库表更新的动态监控系统,其特征在于,包括监控表(1),其存储所有用户表的表名以及其生命标志;监控触发器(2),该触发器将截获用户表的任意更新,维护监控表中相应纪录的表生命标识,该触发器与所述用户表一一对应,可截获相应用户表的插入、更新、删除操作;监控表备份(3),系统在应用部分为监控表配备了一个备份;监控模块(4),其通过数据库连接器访问监控表,获得用户表的生命标志,将获得的用户表生命标志同监察院控表备份进行对比,以发现更改;发布接口,输出实时的数据库表更新通知。
2.一种数据库表更新的动态监控方法,其特征在于,包括如下步骤1)、建立监控表创建一个用户监控表,并在该表内填充所有用户表的表名以及其生命标志;2)、准备监控触发器删除现有的监控触发器,并为每一个用户表创建新的监控触发器;3)、创建监控表备份;4)、实时监控访问监控表,获得用户表的生命标志,将获得的用户表的生命标志同监控表备份进行对比,以对用户表更新的事件进行实时的发布;
3.根据权利要求2所述的数据库更新的动态监控方法,其特征在于,还包括步骤5)、清理删除监控触发器以及监控表。
4.根据权利要求2所述的数据库更新的动态监控方法,其特征在于,所述的创建用户监控表前先确认监控表是否存在,如果监控表已经存在,则立即将其删除,并重新创建监控表。
5.根据权利要求4所述的数据库更新的动态监控方法,其特征在于,所述的监控表在系统启动时,通过应用系统自动创建,在退出时自动删除,也就是说监控表可以看作是一个临时的表,其生命周期和应用系统的生命周期相同。
6.根据权利要求2所述的数据库更新的动态监控方法,其特征在于,所述的填充步骤包括首先,将监控表中的数据全部清除;然后,通过查询SYSOBJECTS系统表,获取所有的用户表表名列表,并将其插入监控表中。
7.根据权利要求2所述的数据库更新的动态监控方法,其特征在于,所述的监控触发器包含必要的SQL语句,一旦触发器被触发,可以立即以当前时间更新指定用户表在监控表中的生命标志。
8.根据权利要求2所述的数据库更新的动态监控方法,其特征在于,所述的发布形式为事件或数据表类型的属性。
全文摘要
本发明提供一种数据库表更新的动态监控系统,包括监控表,其存储所有用户表的表名以及其生命标志;监控触发器,该触发器与所述用户表一一对应,可截获相应用户表的插入、更新、删除操作;监控表备份,系统在应用部分为监控表配备了一个备份;监控模块,其通过数据库连接器访问监控表,获得用户表的生命标志,将获得的用户表生命标志同监察院控表备份进行对比,以发现更改;发布接口,输出实时的数据库表更新通知。本发明所要解决的技术问题是提供一种数据库表更新的动态监控系统及方法,其可以简单地发现关系型数据库中任意表的实时更新,无论这种更新是来自前台的还是来自后台的,可以向客户系统提供数据库表更新的实时通知。
文档编号G06F17/30GK1673972SQ20041005342
公开日2005年9月28日 申请日期2004年8月4日 优先权日2004年8月4日
发明者卫万勇 申请人:上海宝信软件股份有限公司