CN112965949B - 一种远程读取oracle日志文件的方法 - Google Patents
一种远程读取oracle日志文件的方法 Download PDFInfo
- Publication number
- CN112965949B CN112965949B CN202110232980.8A CN202110232980A CN112965949B CN 112965949 B CN112965949 B CN 112965949B CN 202110232980 A CN202110232980 A CN 202110232980A CN 112965949 B CN112965949 B CN 112965949B
- Authority
- CN
- China
- Prior art keywords
- file
- read
- data
- reading
- log
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/178—Techniques for file synchronisation in file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种远程读取ORACLE日志文件的方法,包括如下步骤:步骤S1,远程读取组件向部署于生产库的日志代理组件发送连接请求以建立连接,于建立连接后,确定要读取的日志文件,发送读指令;步骤S2,日志代理组件于接收到远程读取组件的读指令后,根据读指令打开新日志文件或继续使用原打开文件,获取日志文件的序号FileSeq以及读指令的读指令序号CmdSeq、文件偏移存储在本地,并于打开的文件中读取数据块发送给远程读取组件;步骤S3,远程读取组件接收日志代理组件发送的数据,对接收的数据进行分析,判断所接收的数据是否包含旧数据,于所接收的数据包含旧数据时调整接收偏移RecvOff。
Description
技术领域
本发明涉及数据库同步技术领域,特别是涉及一种远程读取ORACLE日志文件的方法。
背景技术
ORACLE数据库是一种使用非常广泛的数据库,ORACLE数据库将数据的变化存储在称为REDOLOG的文件中,REDOLOG一般有若干组,由管理员配置决定,ORACLE对这些REDOLOG以循环覆盖的方式写入,每个REDOLOG有一个唯一且递增的逻辑编号FileSeq,其数据以块为单位组织,通常每块大小为512字节,每块内包含了这一唯一编号,可以用于区分是新数据还是旧数据,旧数据块的编号跟比文件编号小。
通常情况下,数据库同步软件可以通过读取并分析REDOLOG文件来提取数据库的变化,并同步到远程数据库中。
目前,REDOLOG有三种存储形式,文件系统、块设备和ASM。当以ASM存储时,同步软件可以通过ORACLE提供的接口远程读取,而以另两种形式存储时,同步软件只能以文件方式在本地读取。
但是,在同步软件部署时,有些情形因资源限制、安全限制等原因用户不愿意将日志分析组件部署在生产库上,另外有一些特殊平台,因软件开发及移植难度等原因,同步软件不能支持,当遇到上述情况,如果恰巧ORACLE REDOLOG是以文件或者块设备方式存储,便无法同步。
对于上述情况,虽然现有技术中可以通过文件共享的方式远程读取REDOLOG,但这种方法读取效率不理想,且部署上会给用户造成麻烦。
发明内容
为克服上述现有技术存在的不足,本发明之目的在于提供一种远程读取ORACLE日志文件的方法,以在占用生产库的资源、可移植性强以及读取效率高的基础上实现远程读取ORACLE日志文件的目的。
为达上述目的,本发明提出一种远程读取ORACLE日志文件的方法,包括如下步骤:
步骤S1,远程读取组件向部署于生产库的日志代理组件发送连接请求以建立连接,于建立连接后,确定要读取的文件,发送读指令,所述读指令至少包括需要读取的文件偏移Offset、读指令序号CmdSeq,当首次读取一个日志文件时,读指令还包含文件完整路径信息;
步骤S2,日志代理组件于接收到远程读取组件的读指令后,根据读指令打开新文件,并获取REDOLOG的序号FileSeq以及读指令的读指令序号CmdSeq、文件偏移Offset存储在本地,并于打开的新文件中读取数据块发送给远程读取组件;
步骤S3,远程读取组件接收日志代理组件发送的数据,对接收的数据进行分析,判断所接收的数据是否包含旧数据,于所接收的数据包含旧数据时通过调整接收偏移RecvOff以避免重复读取旧数据块。
优选地,步骤S1进一步包括:
步骤S100,远程读取组件向所述日志代理组件发送连接请求,以与日志代理组件建立连接;
步骤S101,初始化读指令序号CmdSeq;
步骤S102,确定要读取的文件,设置接收偏移RecvOff为需要读取的文件偏移;
步骤S103,更新读指令序号,向所述日志代理组件发送读指令。
优选地,于步骤S101中,设置读指令序号CmdSeq为0。
优选地,于步骤S103中,将当前读指令序号CmdSeq加1,然后向所述日志代理组件发送读指令。
优选地,步骤S2进一步包括:
步骤S200,当所述日志代理组件与远程读取组件建立连接后,设置自身状态为空闲状态。
步骤S201,尝试接收远程读取组件的读指令,若接收到读指令,则根据读指令打开新文件,并提取REDOLOG的序号FileSeq,存储在本地,从读指令中提取读指令序号CmdSeq和文件偏移Offset,并存储在本地,并将自身状态设置为读状态,若没有接收到读指令,则直接进入到步骤S202;
步骤S202,若所述日志代理组件处于读状态,则读取数据块,将读取的数据发送到所述远程读取组件,并检查读出的数据,判断读取的数据是否为旧数据或者是否已经读到文件末尾,若属于旧数据或者已经读到文件末尾,则将自身状态设置为空闲状态;
步骤S203,数据发送完毕后更新本地偏移Offset;
步骤S204,返回步骤S201尝试接收新的读指令。
优选地,于步骤S201中,若没有接收到读指令,则直接进入步骤S202。
优选地,于步骤S201中,当接收到读指令时,如果读指令中包含文件名,则检查配置,判断文件是否允许读取,若不允许,直接关闭连接,若允许,则若已有打开的文件,则关闭已打开文件,并根据读指令打开新文件,若没有已打开的文件,则直接根据读指令打开新文件。
优选地,于步骤S202中,通过判断数据块中的FileSeq是否小于保存的REDOLOG的序号FileSeq判断读取的数据是否为旧数据。
优选地,步骤S3进一步包括:
步骤S300,所述远程读取组件通过socket接收日志代理组件发送的数据。
步骤S301,若接收的数据携带的读指令序号CmdSeq与本地最后发送的读指令序号CmdSeq不一致,则丢弃此包,返回步骤S300继续接收日志代理组件发送的数据,若一致,则进入步骤S302。
步骤S302,更新接收偏移RecvOff;
步骤S303,分析接收数据,如果接收数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,等待新数据产生,而后跳转到步骤S103;
步骤S304,当整个文件处理完成,则返回步骤S102继续下一个文件的读取,否则继续步骤S300。
优选地,于步骤S303中,若接收的数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,同时为避免一直读取旧数据,暂停若干时间,等待新数据产生,而后再跳转到步骤S103。
与现有技术相比,本发明一种远程读取ORACLE日志文件的方法通过远程读取组件向部署于生产库的日志代理组件发送连接请求以建立连接,确定要读取的文件,发送读指令至日志代理组件,日志代理组件根据读指令打开新文件,并获取REDOLOG的序号FileSeq以及读指令的读指令序号CmdSeq、文件偏移Offset存储在本地,并于打开的新文件中读取数据块发送给远程读取组件,通过本发明,可在占用生产库的资源、可移植性强以及读取效率高的基础上实现远程读取ORACLE日志文件的目的。
附图说明
图1为本发明一种远程读取ORACLE日志文件的方法的步骤流程图。
具体实施方式
以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。
在介绍本发明之前,先介绍一些ORACLE数据库的相关概念:
Oracle操作:Oracle的操作除了包含数据的增删改(DML)操作外,还包括一些事务方面的操作及其他操作。
Oracle数据库事务:一个Oracle的数据库事务可能会包括一批DML操作,或者DDL操作。事务一般以Begin操作为开始,以Commit或Rollback操作为结束。
Oracle的Redo文件:Oracle的重做日志文件,记录了Oracle所产生的所有事务数据,用于确保Oracle数据库的故障恢复。每个Oracle实例会有一组在线Redo文件循环使用,并且可以将用过的Redo文件进行归档。每个Redo都有一个序号FileSeq与之唯一相对应。
Record:Oracle的redo文件内部的记录数据。每个redo文件都由一个个Record组成,每个Record包含了一组Oracle的操作数据。
图1为本发明一种远程读取ORACLE日志文件的方法的步骤流程图。如图1所示,本发明一种远程读取ORACLE日志文件的方法,包括如下步骤:
步骤S1,远程读取组件向部署于生产库的日志代理组件发送连接请求以请求建立连接,于建立连接后,确定要读取的日志文件,发送读指令,所述读指令至少包括需要读取的文件偏移Offset、读指令序号CmdSeq,当首次读取一个日志文件时,所述读指令还包含完整文件路径信息。
在本发明中,将日志解析组件分为日志代理组件和远程读取组件,其中日志代理组件部署在生产库上,负责读取日志文件并发送给远程读取组件,远程读取组件部署在第三方机器上,与日志代理组件交互,读取日志并解析数据。也就是说,在本发明具体实施例中,同步软件与远程读取组件部署于第三方机器上,日志代理组件部署于生产库,与日志文件一起,所述生产库具体指承载着业务的Oracle数据库。
具体地,步骤S1进一步包括:
步骤S100,远程读取组件向所述日志代理组件发送连接请求,以与日志代理组件建立连接,所述连接请求中至少包含其IP地址信息。
在本发明中,日志代理组件需要保证一定的数据安全性,因此日志代理组件端需要配置允许接入的IP、允许访问的目录以及文件,当接收到远程读取组件的连接请求时,检查连接来源IP是否在允许范围内,若是,则与其建立连接,如果非法,则直接关闭连接。
步骤S101,初始化读指令序号CmdSeq。
具体地,设置读指令序号CmdSeq为0,该读指令序号CmdSeq每次发送读指令时都会做加1调整,代表一次新的读取任务。
步骤S102,确定要读取的日志文件,设置接收偏移RecvOff为需要读取的文件偏移。
一般来说,在系统刚启动同步时,同步软件(即远程读取组件的使用者,它通过驱动远程读取组件从日志代理组件获取日志数据)会通过SQL语言查询ORACLE数据库的日志完整路径(ORACLE提供了v$logfile视图,里面包含日志路径信息),从其文件头即偏移0开始处理日志文件;在暂停再继续的情况下,同步软件通常会记录下中断的位置再继续。
步骤S103,更新读指令序号,向日志代理组件发送读指令,所述读指令至少包括文件偏移Offset以及读指令序号CmdSeq,若首次读取一个日志文件,则所述读指令还包括文件完整路径信息,所述文件完整路径信息可追加在读指令消息尾部,为可变长字符串。
一般来说,有几种情况会导致远程读取组件发送读指令:
1、初始化时,即由远程读取组件确定要读取的日志及文件偏移,然后发送读指令;
2、一个文件处理完毕(见S304),由远程读取组件来设置下一个要读取的文件,及文件偏移(为0),然后发送读指令
3、读一个文件时遇到旧数据,远程读组件需要发送读指令,从旧数据的起始偏移重新读,见步骤S303。
在本发明具体实施例中,将当前读指令序号CmdSeq加1,然后向日志代理组件发送读指令,即发送的读指令中序号为当前读指令序号CmdSeq加1之后的读指令序号CmdSeq,日志代理组件发送回来的数据中也会包含读指令序号CmdSeq,不是该CmdSeq的数据则会在后续接收动作中被丢弃,见步骤S301。
步骤S2,日志代理组件于接收到远程读取组件的读指令后,如果读指令包含文件完整文件路径信息,则根据读指令打开新日志文件,并从该REDOLOG日志文件头部数据中获取文件序号FileSeq存储在本地,否则继续使用原来已打开的日志文件;获取读指令的读指令序号CmdSeq、文件偏移Offset存储在本地,根据此设置当前打开的日志文件的偏移,根据打开的日志文件读取数据块发送给远程读取组件。
具体地,步骤S2进一步包括:
步骤S200,当日志代理组件与远程读取组件建立连接后,设置自身状态为空闲状态。
步骤S201,尝试接收远程读取组件的读指令,若接收到读指令,如果该读指令包含完整文件路径信息,则根据读指令打开新日志文件,并提取REDOLOG日志文件的序号FileSeq存储在本地,否则继续使用原来打开的日志文件,并从读指令中提取读指令序号CmdSeq和文件偏移Offset,存储在本地,将自身状态设置为读状态,进入步骤S202,若没有接收到读指令,则直接进入步骤S202。
一般来说,读指令都是在同步软件认为有必要时才需要发送,比如读到旧数据时,需要要从某个偏移开始重新读取,或者需要读新的文件时,这时需要发送读指令,除此之外,一般情况下不会发送读指令,实际工作中,日志代理组件和远程读取组件相互配合,它们一个连续发,一个连续收,在本发明中,读指令是强制性的指令,日志代理组件需要按读指令调整读取的位置。
优选地,于步骤S201中,当接收到读指令时,如果读指令中包含文件完整路径信息,则检查配置(即日志代理组件配置了允许接入的IP,允许访问的目录以及文件),判断文件是否允许读取,若不允许,直接关闭连接,若允许,则如果已有打开的文件,则关闭现有文件,然后根据读指令打开新文件,若没有已打开的文件,则直接根据读指令打开新文件。
步骤S202,当日志代理组件处于读状态,则根据记录的文件偏移读取数据块,并检查读取的数据块,判断读取的数据是否为旧数据(例如通过判断数据块头部中的序号FileSeq是否小于保存的REDOLOG的序号FileSeq)或者已经读到文件末尾,若属于旧数据(如数据块中的FileSeq小于保存的REDOLOG的序号FileSeq)或者已经读到文件末尾,则将自身状态设置为空闲状态,避免后续读取大量无用的数据,并将读取的数据发送到远程读取组件,所发送的内容包括文件偏移Offset、读指令序号、REDOLOG数据及长度,所述文件偏移Offset指的是当前读取的数据块在当前打开的REDOLOG日志文件内的偏移,REDOLOG数据指的是当前读出的数据块,REDOLOG数据可能很大,比如在GB级别,不可能一次性读出,每次只依次读出一部分,比如64KB。
也就是说,当日志代理组件读取到旧数据时,则会停止读操作,等待直到收到新的读指令。
步骤S203,数据发送完毕后更新本地存储的文件偏移Offset,即原文件偏移Offset加上读出的数据长度。
步骤S204,返回步骤S201尝试接收新的读指令。
如果日志代理组件当前状态为空闲,则暂停运行1毫秒,等待新的读指令。
可见,在本发明中,日志代理组件只负责读取和传输,在接到一次读指令后,可连续读取和发送数据,减少了交互,运行效率高;且日志代理组件可自行判断数据是否有效,限制无效数据读取,占用资源少;在可移植性方面,它逻辑非常简单,用C语言实现,代码量很少,操作人员可以在部署现场几分钟内完成编译,然后运行,跨平台无障碍。
步骤S3,远程读取组件接收日志代理组件发送的数据,对接收的数据进行分析,判断所接收的数据是否包含旧数据,于所接收的数据包含旧数据时调整接收偏移RecvOff以准备重新读取那些不包含新值的数据块,并跳转至S103重新发送读指令要求重读数据。也就是说,本发明在接收到旧数据后,远程读取组件的逻辑则是将文件RecvOff调整到旧数据所在的文件偏移以重复读取相同位置的数据,直到出现新数据为止。
具体地,步骤S3进一步包括:
步骤S300,远程读取组件通过socket接收日志代理组件发送的数据。
步骤S301,若接收的数据携带的读指令序号CmdSeq与本地最后发送的读指令序号CmdSeq不一致,则丢弃此包,返回步骤S300继续接收日志代理组件发送的数据,若一致,则进入步骤S302。
步骤S302,更新接收偏移RecvOff,更新后的接收偏移RecvOff为更新前的接收偏移RecvOff加上接收的数据字节数。
步骤S303,对接收数据进行分析,根据分析结果,如果接收的数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,同时为避免一直读取旧数据,暂停若干时间,等待新数据产生,而后跳转到步骤S103,若接收的数据没有旧数据,则直接进入步骤S304。需说明的是,日志代理组件与远程读取组件是按相同的策略运行的,若远程读组件在S302中收到旧数据时,则会返回S103,重发读指令,以重置读位置;同时,日志代理组件在读到旧数据时,会停止读操作,等待直到收到新的读指令。
具体地,由于日志的每个数据块的头部都包含文件序号FileSeq,如果接收到的文件序号FileSeq比当前读的文件序号FileSeq小(需说明的是,日志文件头和日志文件的每个数据块中都包含文件序号FileSeq,它们的含义一致,都是日志数据的逻辑文件号,但它们未必一致,因为ORACLE的日志数据是循环覆盖的,当一个日志正在被改写时,可能其文件头以及前半部分的数据块里包含的文件序号FileSeq是新的,比如都是100,而后半部分的数据块里包含的文件序号FileSeq是旧的,比如都是98),则说明数据没有更新过,为旧数据,需调整接收偏移RecvOff为最后的新数据偏移。此处对旧数据的判断与日志代理组件对旧数据的判断是一致的,两者判断的不同在于它们判断的目的,日志代理组件是为了减少无效数据发送,它进入了空闲状态;而远程读取组件是为了调整读日志的位置,确保读出所有的新数据。
例如,当前的接收偏移RecvOff=8192,接收到的数据包内容为offset=8192,长度=2048,其中数据的前512字节为新数据,后1536字节为旧的数据,此时将接收偏移RecvOff调整为8192+512=8704,而不是8192+2048=10240,同时暂停若干时间,例如1毫秒,以避免一直读取旧数据,因为当ORACLE数据库一直不改写该REDOLOG文件时,远程读取组件和日志代理组件就会不停地读取文件偏移为8704的数据,占用大量资源,暂停1毫秒则会让这个重复读取的频率大为降低。
在日志解析过程中,大部分情况是由前向后顺序读取文件内容,当遇到旧数据块时,意味着处理速度快于生产库的数据变化速度,需要重复读取该数据块,直到有新的数据产生。为达到尽量高的效率,本发明将针对日志解析过程中日志读取的特点,最大限度地减少代理和读者的交互,以减少浪费在交互上的时间。
步骤S304,当整个REDOLOG文件处理完成,则返回步骤S102继续下一个文件的读取,否则继续步骤S300。例如当处理到的文件偏移和文件大小相同时则说明当前REDOLOG文件处处理完成,返回步骤S102继续下一个文件的读取
实施例
在本实施例中,将日志解析组件分为两部分:日志代理组件和远程读取组件。
日志代理组件(以下简称Proxy)部署在生产库上,负责读取文件并发送给远程读取组件;
远程读取组件(以下简称Reader)部署在第三方机器,同Proxy交互,读取日志并解析数据。
在日志解析过程中,大部分情况是由前向后顺序读取文件内容,当遇到旧数据块时,意味着处理速度快于生产库的数据变化速度,需要重复读取该数据块,直到有新的数据产生。为达到尽量高的效率,本发明将针对日志解析过程中日志读取的特点,最大限度地减少代理和读者的交互,以减少浪费在交互上的时间。
本实施例中,Reader的运转流程如下:
1)连接到Proxy;
2)设置读指令序号(CmdSeq)为0,此序号每次发送读指令时都会进行加1调整,代表一次新的读取任务;
3)确定要读取的文件;
4)设置接收偏移(RecvOff)为需要读取的文件偏移;
5)将CmdSeq加1,发送读指令,所述读指令内容包括:
a)文件偏移Offset(8字节)
b)读指令序号CmdSeq(4字节)
c)如果文件还没有打开,在消息尾部追加完整文件路径信息,为可变长字符串。
6)通过socket接收Proxy发送的数据;
a)如果接收的数据携带的CmdSeq与本地最后发送的CmdSeq不一致,则丢弃此包,继续执行步骤6),否则,执行下面步骤;
b)更新接收偏移RecvOff,即原接收偏移RecvOff加上接收的数据字节数;
c)通过远程读取组件分析接收数据;
d)如果接收数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,为避免一直读取旧数据,暂停1毫秒,等待新数据产生,而后跳转到步骤5);
e)如果整个文件已经处理完成,则跳转到步骤3),否则继续执行步骤6)。
在本实施例中,Proxy需要保证一定的数据安全性,因此在启动时,Proxy需要配置允许接入的IP、允许访问的目录和文件,其运转流程如下:
1)接受Reader的连接,检查连接来源IP是否在允许范围内;如果非法,则直接关闭连接,否则,继续后续步骤;
2)设置自身状态为空闲状态;
3)尝试接收数据包,如果有数据,处理接收数据。如果没有数据,则执行步骤4),Proxy接收到的数据只有一种,就是读指令,如果读指令中包含文件名,则检查配置,判断文件是否允许读取,如不允许,直接关闭连接,如允许,则关闭现有文件(如果有的话),然后打开新日志文件,并提取日志文件的序号FileSeq,存储在本地。从读指令中提取CmdSeq和Offset,并存储在本地,将自身状态设置为读状态;
4)如果处于读状态,则读取数据块,检查读出的数据,如果数据属于旧数据,即数据块中的FileSeq小于保存的FileSeq,或者已经读到文件末尾,则将自身状态设置为空闲状态,避免后续读取大量无用的数据。将读取的数据发送给Reader,并在发送完毕后更新本地Offset,Offset加上读出的数据长度。发送的内容包括:
a)数据偏移
b)读指令序号
c)REDOLOG数据及长度
如果状态为空闲,则暂停运行1毫秒,以等待新的读指令
5)重复步骤3)
可见,本发明中,Proxy只负责读取和传输,在接到一次读指令后,可连续读取和发送数据,减少了交互,运行效率高;且可自行判断数据是否有效,限制无效数据读取,占用资源少。在可移植性方面,它逻辑非常简单,用C语言实现,代码量很少,操作人员可以在部署现场几分钟内完成编译,然后运行,跨平台无障碍。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
Claims (9)
1.一种远程读取ORACLE日志文件的方法,包括如下步骤:
步骤S1,远程读取组件向部署于生产库的日志代理组件发送连接请求以建立连接,于建立连接后,确定要读取的日志文件,发送读指令,所述读指令至少包括需要读取的文件偏移Offset、读指令序号CmdSeq,当首次读取该日志文件时,读指令包含还包括该日志文件的完整文件路径信息;
步骤S2,日志代理组件于接收到远程读取组件的读指令后,若所述读指令包含完整文件路径信息,则根据读指令打开新日志文件,并从新日志文件头部数据中获取文件序号FileSeq存储在本地,否则继续使用原打开文件;获取读指令的读指令序号CmdSeq、文件偏移Offset存储在本地,并根据此设置当前打开文件的偏移,于打开的文件中读取数据块发送给远程读取组件;步骤S2进一步包括:
步骤S200,当所述日志代理组件与远程读取组件建立连接后,设置自身状态为空闲状态;
步骤S201,尝试接收远程读取组件的读指令,若接收到读指令,若所述读指令包含完整文件路径信息,则根据读指令打开新日志文件,并提取新日志文件的序号FileSeq存储在本地,否则继续使用原打开文件,并从接收的读指令中提取读指令序号CmdSeq和文件偏移Offset存储在本地,并将自身状态设置为读状态;
步骤S202,若所述日志代理组件处于读状态,则根据记录的文件偏移读取已打开文件的数据块,并检查读取的数据块,判断读取的数据是否为旧数据或者是否已经读到文件末尾,若属于旧数据或者已经读到文件末尾,则将自身状态设置为空闲状态,同时,将读取的数据发送到所述远程读取组件;
步骤S203,数据发送完毕后更新本地文件偏移Offset;
步骤S204,返回步骤S201等待新的读指令;
步骤S3,远程读取组件接收日志代理组件发送的数据,对接收的数据进行分析,判断所接收的数据是否包含旧数据,于所接收的数据包含旧数据时调整接收偏移RecvOff,并跳转至步骤S1重新发送读指令要求重读数据。
2.如权利要求1所述的一种远程读取ORACLE日志文件的方法,其特征在于,步骤S1进一步包括:
步骤S100,远程读取组件向所述日志代理组件发送连接请求,以与日志代理组件建立连接;
步骤S101,初始化读指令序号CmdSeq;
步骤S102,确定要读取的日志文件,设置接收偏移RecvOff为需要读取的文件偏移;
步骤S103,更新读指令序号,向所述日志代理组件发送读指令,若首次读取一个日志文件,所述读指令还包括文件完整路径信息。
3.如权利要求2所述的一种远程读取ORACLE日志文件的方法,其特征在于:于步骤S101中,设置读指令序号CmdSeq为0。
4.如权利要求2所述的一种远程读取ORACLE日志文件的方法,其特征在于:于步骤S103中,将当前读指令序号CmdSeq加1,然后向所述日志代理组件发送读指令。
5.如权利要求4所述的一种远程读取ORACLE日志文件的方法,其特征在于:于步骤S201中,若没有接收到读指令,则直接进入步骤S202。
6.如权利要求5所述的一种远程读取ORACLE日志文件的方法,其特征在于:优选地,于步骤S201中,当接收到读指令时,如果读指令中包含完整文件路径信息,则检查配置,判断相应文件是否允许读取,若不允许,直接关闭连接,若允许,则若已有打开的文件,则关闭已打开文件,并根据读指令打开新文件,若没有已打开的文件,则直接根据读指令打开新文件。
7.如权利要求6所述的一种远程读取ORACLE日志文件的方法,其特征在于:于步骤S202中,通过判断数据块中的文件序号FileSeq是否小于保存的日志文件的序号FileSeq判断读取的数据是否为旧数据。
8.如权利要求7所述的一种远程读取ORACLE日志文件的方法,其特征在于,步骤S3进一步包括:
步骤S300,所述远程读取组件通过socket接收日志代理组件发送的数据;
步骤S301,若接收的数据携带的读指令序号CmdSeq与本地最后发送的读指令序号CmdSeq不一致,则丢弃此包,返回步骤S300继续接收日志代理组件发送的数据,若一致,则进入步骤S302;
步骤S302,更新接收偏移RecvOff;
步骤S303,分析接收数据,如果接收数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,等待新数据产生,而后跳转到步骤S103;
步骤S304,当整个文件处理完成,则返回步骤S102继续下一个文件的读取,否则继续步骤S300。
9.如权利要求8所述的一种远程读取ORACLE日志文件的方法,其特征在于:于步骤S303中,若接收的数据包含旧数据,则调整接收偏移RecvOff为最后的新数据偏移,同时为避免一直读取旧数据,暂停若干时间,等待新数据产生,而后再跳转到步骤S103。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110232980.8A CN112965949B (zh) | 2021-03-03 | 2021-03-03 | 一种远程读取oracle日志文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110232980.8A CN112965949B (zh) | 2021-03-03 | 2021-03-03 | 一种远程读取oracle日志文件的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112965949A CN112965949A (zh) | 2021-06-15 |
CN112965949B true CN112965949B (zh) | 2022-11-22 |
Family
ID=76276438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110232980.8A Active CN112965949B (zh) | 2021-03-03 | 2021-03-03 | 一种远程读取oracle日志文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112965949B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035889A (zh) * | 2010-12-16 | 2011-04-27 | 上海泰捷通信技术有限公司 | 远程通讯终端的软件测试方法 |
CN105005618A (zh) * | 2015-07-21 | 2015-10-28 | 杭州合众数据技术有限公司 | 一种异构数据库之间的数据同步方法及系统 |
CN105677876A (zh) * | 2016-01-12 | 2016-06-15 | 国家电网公司 | 一种基于物理级的数据库日志挖掘方法 |
CN110309161A (zh) * | 2019-06-06 | 2019-10-08 | 新华三大数据技术有限公司 | 一种数据同步方法、装置及服务器 |
CN110647415A (zh) * | 2019-08-14 | 2020-01-03 | 平安科技(深圳)有限公司 | 数据库检测方法、装置、设备及计算机可读存储介质 |
CN111061690A (zh) * | 2019-11-22 | 2020-04-24 | 武汉达梦数据库有限公司 | 一种基于rac的数据库日志文件读取方法和装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241185B (zh) * | 2018-08-27 | 2021-03-30 | 武汉达梦数据库股份有限公司 | 一种数据同步的方法以及数据同步装置 |
US11151114B2 (en) * | 2018-12-04 | 2021-10-19 | International Business Machines Corporation | Log reader and parser sharing determination in a change data capture environment |
CN110555055A (zh) * | 2019-07-19 | 2019-12-10 | 国网辽宁省电力有限公司大连供电公司 | 针对Oracle数据库重做日志文件的数据挖掘方法 |
CN110413481A (zh) * | 2019-07-25 | 2019-11-05 | 厦门市美亚柏科信息股份有限公司 | 用于日志取证分析的方法、装置及计算机可读介质 |
CN111666334A (zh) * | 2020-04-27 | 2020-09-15 | 无锡网科信息技术有限公司 | 一种高并发数据和数据库同步的方法及其系统 |
-
2021
- 2021-03-03 CN CN202110232980.8A patent/CN112965949B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102035889A (zh) * | 2010-12-16 | 2011-04-27 | 上海泰捷通信技术有限公司 | 远程通讯终端的软件测试方法 |
CN105005618A (zh) * | 2015-07-21 | 2015-10-28 | 杭州合众数据技术有限公司 | 一种异构数据库之间的数据同步方法及系统 |
CN105677876A (zh) * | 2016-01-12 | 2016-06-15 | 国家电网公司 | 一种基于物理级的数据库日志挖掘方法 |
CN110309161A (zh) * | 2019-06-06 | 2019-10-08 | 新华三大数据技术有限公司 | 一种数据同步方法、装置及服务器 |
CN110647415A (zh) * | 2019-08-14 | 2020-01-03 | 平安科技(深圳)有限公司 | 数据库检测方法、装置、设备及计算机可读存储介质 |
CN111061690A (zh) * | 2019-11-22 | 2020-04-24 | 武汉达梦数据库有限公司 | 一种基于rac的数据库日志文件读取方法和装置 |
Non-Patent Citations (3)
Title |
---|
Oracle远程数据库同步方法研究;王锐等;《煤炭技术》;20110810(第08期);全文 * |
基于Oracle Data Guard的数据灾备系统设计和实现;常俊超;《河南水利与南水北调》;20100620(第06期);全文 * |
基于数据块的关系数据库日志挖掘技术;彭巍等;《计算机系统应用》;20160715(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112965949A (zh) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100333260B1 (ko) | 터미널에뮬레이터데이터스트림차분시스템 | |
US6453343B1 (en) | Methods, systems and computer program products for maintaining a common checkpoint cache for multiple sessions between a single client and server | |
US6061714A (en) | Persistent cache synchronization and start up system | |
US7251747B1 (en) | Method and system for transferring data using a volatile data transfer mechanism such as a pipe | |
CN107634984B (zh) | 一种基于单向传输通道的文件同步方法 | |
EP3816783B1 (en) | Method and device for data migration | |
CN113568686B (zh) | Lua语言的异步处理方法、装置、计算机设备和存储介质 | |
CN102779244B (zh) | 一种文件操作的执行方法及装置 | |
CN112953983A (zh) | Sftp传输方法及装置 | |
CN111182060A (zh) | 报文的检测方法及装置 | |
JPH08314825A (ja) | コマンドスクリプトの実行制御方法 | |
CN114371811A (zh) | 用于存储管理的方法、电子设备和计算机程序产品 | |
CN106488534A (zh) | 获取网络接入点的方法及系统 | |
CN112965949B (zh) | 一种远程读取oracle日志文件的方法 | |
CN110427296A (zh) | 一种基于硬件wdt进行监测的方法、设备及可读介质 | |
WO2021109777A1 (zh) | 一种数据文件的导入方法及装置 | |
WO2020094063A1 (zh) | 存储数据的方法、装置、存储介质及电子装置 | |
US7461372B2 (en) | System for optimizing distribution of information employing a universal dictionary | |
CN114185718A (zh) | 一种数据同步方法、装置、计算机设备及存储介质 | |
CN112231409B (zh) | 数据库同步的初始化装载方法、装置、设备和存储介质 | |
KR101082850B1 (ko) | 자료 동기화를 위한 모바일 단말기 및 그 방법 | |
CN109040264B (zh) | 一种高性能的主备接口机数据处理方法 | |
KR100884543B1 (ko) | 자료 동기화 방법 및 그에 따른 자료 동기화 게이트웨이 | |
CN117235186B (zh) | 一种历史信息同步方法 | |
WO2021147375A1 (zh) | 数据管理方法、装置、设备、计算机可读存储介质及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |