Oracle streams的异常修复系统及方法
技术领域
本发明涉及Oracle数据复制和数据共享应用领域,更具体地,涉及一种OracleStreams的异常修复系统及方法。
背景技术
各领域的业务系统运作通常需要多个数据库,因此,在分布式的多个数据库间进行数据共享很有必要。应用程序和用户希望能够实时地获取到最新数据,Oracle Streams则提供了专一的信息共享方案。
简单的说Oracle Streams是受管理的信息流,这个信息流可以存在于不同的应用程序之间或数据库之间,也可以存在于同一个应用程序或数据库的内部。应用程序和数据库既可以位于同一台机器,也可以单独存放。使用Oracle Streams可以控制要捕获的消息、消息传播的方式以及当这些消息到达预设目标时的使用和应用方式。Oracle Streams能够捕获由DML(Dara Manipulation Language,数据操作语言)和DDL(Data DefinitionLanguage,数据定义语言)命令产生的对数据库的修改,并将这种变化定义为LCRs(LogicalChange Records)的消息。
在分布式环境中,数据由多个数据库共享,全局的数据的一致性对整个系统尤为重要。然而,由于在数据初始化过程中或数据库中数据发生变更,会引起Oracle Streams数据应用的删除冲突、更新冲突、唯一性冲突等问题,或数据长时间应用会引起数据表空间不足。Oracle Streams虽然能够检测和处理部分数据冲突,但是此检测和处理过程的操作复杂且不具有通用性和自动化处理的特性。目前在Oracle Streams技术领域尚没有针对Streams数据同步异常处理的平台或系统。
发明内容
本发明是为了解决上述问题而提出的,其目的在于提供一种Oracle streams的异常修复系统,对数据库中的Oracle streams数据同步异常进行解决与处理。
本发明的另一目的是提供一种Oracle streams的异常修复方法。
为实现上述目的,本发明提供一种Oracle streams的异常修复系统,包括:错误解析模块,检测Oracle streams进程状态,并确定Oracle streams进程是否异常;规则库,对规则进行存储;处理模块,在错误解析模块确定Oracle streams进程是异常进程的情况下从规则库中提取相应规则,并将此相应规则应用到异常进程,对异常进程进行处理。
优选地,所述规则的处理逻辑包括:(1)获取出错信息的LCRs消息,LCRs消息包含对数据库的修改信息,包括源数据库信息、操作类型、操作的原始值和操作的新值,LCRs消息包含一个或多个LCR消息;(2)按照顺序解析异常LCR消息,获得消息的操作类型,DML操作命令的操作类型一般分为三种,插入、删除、修改操作;(3)根据操作类型进行消息的处理,如异常消息为插入(INSERT)操作,若异常原因为主键冲突,则根据原始消息创建新消息,将操作类型转化为删除(DELETE),获得消息的旧(OLD)值为当前的值,根据OLD值的主键信息将目标端的冲突消息删除,并重新应用原始消息;(4)若原始LCR操作类型为更新(UPDATE),错误的原因可能为目标端数据主键字段存在、个别字段不一致或者目标端主键数据不存在。若与目标端数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的新(NEW)值,执行该新消息进行插入操作,然后执行原始的LCR消息,若目标端数据不存在,则将该LCR消息的操作类型转变为INSERT,将修改后的消息进行插入操作;(5)若原始LCR消息操作类型为DELETE,错误的原因可能为数据不一致或者目标端数据不存在。数据不一致是LCR消息中的原始数据与目标端的数据存在主键一致但个别字段数据不一致的情况,数据不存在是源端删除的数据在目标端不存在情况。若错误类型为数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;若目标端数据不存在,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;(6)若数据同步过程中发生的异常为数据库本身运行的异常信息,如表空间不足,资源忙等原因,则使用正则表达式(该正则表达式需要根据错误的内容进行人工书写)对同步过程中异常信息的报错内容进行截取,获得具体的信息,从而拼接出在目标端需要执行的操作。
优选地,还包括:规则管理模块,用于对规则进行管理,进行规则的增加、删除和修改。
优选地,如果错误解析模块确定Oracle streams进程是异常进程,则进行错误解析,解析出异常进程的错误号。
优选地,处理模块根据错误号从规则存储管理模块中提取相应规则。
优选地,还包括:数据库访问模块,实现数据库的底层的访问,获得Oraclestreams进程,并且将处理模块的处理进程应用到数据库中的Oracle streams进程。
优选地,还包括:通知模块,对处理模块的处理结果、不能处理的异常进程及规则存储管理模块中的异常规则进行通知。
本发明还提供一种Oracle streams的异常修复方法,包括以下步骤:
步骤1:编写并添加规则;
步骤2:配置需要监控的数据源消息,检测Oracle streams进程状态,并确定Oracle streams进程是否异常;
步骤3:当确定Oracle streams进程是异常进程时,进行错误解析,解析出异常进程的错误号;
步骤4:根据错误号提取相应规则,并将此相应规则应用到异常进程,对异常进程进行处理。
优选地,还包括步骤5:对处理结果进行通知。
优选地,所述规则处理逻辑包括:(1)获取出错信息的LCRs消息,LCRs消息包含对数据库的修改信息,包括源数据库信息、操作类型、操作的原始值和操作的新值,LCRs消息包含一个或多个LCR消息;(2)按照顺序解析异常LCR消息,获得消息的操作类型,DML操作命令的操作类型一般分为三种,插入、删除、修改操作;(3)根据操作类型进行消息的处理,如异常消息为INSERT操作,若异常原因为主键冲突,则根据原始消息创建新消息,将操作类型转化为DELETE,获得消息的OLD为当前的值,根据OLD值的主键信息将目标端的冲突消息删除,并重新应用原始消息;(4)若原始LCR操作类型为UPDATE,错误的原因可能为目标端数据主键字段存在、个别字段不一致或者目标端主键数据不存在。若与目标端数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;若目标端数据不存在,则将该LCR消息的操作类型转变为INSERT,将修改后的消息进行插入操作;(5)若原始LCR消息操作类型为DELETE,错误的原因可能为数据不一致或者目标端数据不存在。数据不一致是LCR消息中的原始数据与目标端的数据存在主键一致但个别字段数据不一致的情况,数据不存在是源端删除的数据在目标端不存在情况。若错误类型为数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;若目标端数据不存在,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;(6)若数据同步过程中发生的异常为数据库本身运行的异常信息,如表空间不足,资源忙等原因,则使用正则表达式(该正则表达式需要根据错误的内容进行人工书写)对同步过程中异常信息的报错内容进行截取,获得具体的信息,从而拼接出在目标端需要执行的操作。
本发明提供的Oracle streams的异常修复系统及方法,可以通过错误解析模块自动检测到Oracle streams异常的进程并通过预先添加到规则库中的规则进行处理,实现了对Oracle streams异常的智能修复及处理。对于无法处理的异常,系统会通过通知模块自动发出通知,实现了Oracle Streams可持续的运行,大大降低了人工维护成本。
附图说明
图1为本发明提供的Oracle streams的异常修复系统的结构框图。
图2为本发明提供的Oracle streams的异常修复方法的步骤框图。
具体实施方式
以下,参照附图详细说明本发明的优选实施例。在说明本发明的实施例时,如果对相关公知要素或功能的具体描述有碍于本发明的要旨,那么将省略其详细说明。
图1为本发明提供的Oracle streams的异常修复系统的结构框图。
参照图1,本发明提供一种Oracle streams的异常修复系统,包括:错误解析模块102,用于检测Oracle streams进程状态,并确定Oracle streams进程状态,并确定Oraclestreams进程是否异常,所述Oracle streams进程包括捕获进程、传播进程和应用进程等;规则库103,用于对规则进行存储;处理模块104,在错误解析模块103确定Oracle streams进程是异常进程的情况下从规则库中提取相应规则,并将此规则应用到异常进程,对异常进程进行处理。
所述Oracle streams的异常修复系统还包括:规则管理模块106,用于对规则进行管理,包括对规则的查看、增加、删除及修改等操作,可实现对异常规则的修改和对新规则的添加,也可对规则进行查询与预览。用户可以在规则管理模块106中动态添加和删除规则,实现了系统的可扩充性,大大提高了对Oracle Streams异常处理能力。
本发明提供的Oracle streams的异常修复系统,还包括:数据库访问模块101,与数据库最底层进行连接,实现数据库的底层的访问,可获得数据库中Oracle streams进程状态并发送给错误解析模块120,并将处理模块140的处理进程应用到数据库中的Oraclestreams进程。所述数据库访问模块101可连接多个数据库。
本发明提供的Oracle streams的异常修复系统,还包括:通知模块105,用于对处理模块104的处理结果、不能处理的错误及规则存储管理模块103中的异常规则进行通知和预警。
在所述错误解析模块102中,每个Oracle streams异常进程都有相匹配的错误号,所述错误解析模块102确定Oracle streams进程是异常进程时,进行错误解析,解析出异常进程的错误号,匹配相应的处理规则,若匹配成功,则将此错误号发送给处理模块104,所述处理模块104根据错误号从规则库103中提取相应规则,并将该规则应用到异常进程进行处理;若匹配不成功,则将该异常进程发送给通知模块105,对用户进行通知。
图2为本发明提供的Oracle streams的异常修复方法的步骤框图。
参照图2,本发明提供一种Oracle streams的异常修复方法,具体包括如下步骤:
步骤201:编写并添加规则。更具体的,用户编写规则,该规则的命名与相应的错误号对应,并将该规则添加在规则管理模块106中,该模块可对规则进行灵活管理,可以修改删除已有规则和添加新规则。
步骤202:配置需要监控的数据源消息,检测Oracle streams进程状态,并确定Oracle streams进程是否异常。更具体的,用户在数据库访问模块101配置需要监控的数据源信息,数据库访问模块101对数据库底层进行访问,检测Oracle streams进程状态,并确定Oracle streams进程是否异常。所配置的数据源不局限与数据库的个数。
步骤203:当确定Oracle streams进程是异常进程时,进行错误解析,解析出异常进程的错误号。更具体的,当错误解析模块102检测到Oracle streams进程是异常进程时,进行错误解析,解析出异常进程的错误号,并将此错误号发送给处理模块104;
步骤204:根据错误号提取相应规则,并将此相应规则应用到异常进程,对异常进程进行处理。更具体的,处理模块104根据错误号从规则库103中提取相应规则,并将该规则应用到该异常进程,然后通过数据库访问模块101对异常进程解决处理;
步骤205:对处理结果进行通知。更具体的,当处理模块140对异常进程处理失败时,通知模块150会对失败的处理结果进行通知,用户可手动处理或在规则管理模块中添加或修改规则继续处理。
在以上说明中,所述规则的处理逻辑如下:
(1)获取出错信息的LCRs消息,LCRs消息包含对数据库的修改信息,包括源数据库信息、操作类型、操作的原始值和操作的新值,LCRs消息包含一个或多个LCR消息。
(2)按照顺序解析异常LCR消息,获得消息的操作类型,DML操作命令的操作类型一般分为三种,插入、删除、修改操作。
(3)根据操作类型进行消息的处理,如异常消息为插入(INSERT)操作,若异常原因为主键冲突,则根据原始消息创建新消息,将操作类型转化为删除(DELETE),获得消息的旧(OLD)值为当前的值,根据OLD值的主键信息将目标端的冲突消息删除,并重新应用原始消息。
(4)若原始LCR操作类型为更新(UPDATE),错误的原因可能为目标端数据主键字段存在、个别字段不一致或者目标端主键数据不存在。若与目标端数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的新(NEW)值,执行该新消息进行插入操作,然后执行原始的LCR消息;若目标端数据不存在,则将该LCR消息的操作类型转变为INSERT,将修改后的消息进行插入操作。
(5)若原始LCR消息操作类型为DELETE,错误的原因可能为数据不一致或者目标端数据不存在。数据不一致是LCR消息中的原始数据与目标端的数据存在主键一致但个别字段数据不一致的情况,数据不存在是源端删除的数据在目标端不存在情况。若错误类型为数据不一致,则根据LCR消息的原始值,获得消息的主键,根据消息的主键信息删除目标端的数据,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息;若目标端数据不存在,根据原始LCR消息创建新的消息,然后将新消息的操作类型修改为INSERT,将原始LCR消息的OLD值作为新消息的NEW值,执行该新消息进行插入操作,然后执行原始的LCR消息。
(6)若数据同步过程中发生的异常为数据库本身运行的异常信息,如表空间不足,资源忙等原因,则使用正则表达式(该正则表达式需要根据错误的内容进行人工书写)对同步过程中异常信息的报错内容进行截取,获得具体的信息,从而拼接出在目标端需要执行的操作。
根据本发明提供的Oracle streams的异常修复系统及方法,用户将需要监控的Streams进程信息注册给系统,注册完成之后系统会按上述方法对Oracle的捕获进程、传播进程、应用进程等进行监控及处理。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。