一种基于Oracle数据库全同步的快照选取方法及装置
文献发布时间:2023-06-19 12:07:15
技术领域
本发明涉及计算机数据备份技术领域,特别是涉及一种基于Oracle数据库全同步的快照选取方法及装置。
背景技术
Oracle数据库是使用非常广泛的计算机软件,在生产环境中为了满足容灾和读写分离等需求,经常会部署数据库同步软件,将源库实时同步到目标库。源库的数据在实时变化,目标库也会随之实时更新。数据库同步分全量和增量两个同步阶段,全量同步是将某一时间点上的所有数据同步到目标端;增量同步则是在全量同步的基础上,把每一次的变化同步到目标端。
目前,在全同步过程中首先会进行锁表操作,锁表是为了排除事务的干扰,获取一个此表无事务的时间点,然后以此为快照获取表数据,并且增量装载也以此为过滤条件,从而在不需要容错的情况下达到源和目标的数据一致性。但是,锁表就意味着存在影响用户业务的风险。虽然锁表、获取SCN(System Change Number,系统改变号)、解锁这3步操作中没有其它动作,动作之间不等待,但是在繁忙的系统中,锁表这一动作的影响可能超出我们的想象,尝试锁表可能会导致死锁,业务软件卡死。
发明内容
为克服上述现有技术存在的不足,本发明之目的在于提供一种基于Oracle数据库全同步的快照选取方法及装置,以实现Oracle数据库的无需锁表全同步的快照选取目的。
为达上述目的,本发明提供一种基于Oracle数据库全同步的快照选取方法,包括如下步骤:
步骤S1,当进行同步表操作时,向日志解析模块发出SCN查询请求,以获取快照所需的SCN;
步骤S2,日志解析模块在接收到SCN查询请求时,扫描当前时间点日志解析模块记录的数据,查找是否有相关表的操作,根据是否有相关表操作的查询结果确定快照所需的SCN。
优选地,于步骤S2中,如果日志解析模块记录的数据中有相关表的操作,则选择其中最早的事务的SCN作为快照点。
优选地,如果在日志解析模块记录的数据中没找到表的相关操作,则选取最后一个提交的与表相关的事务的SCN作为快照点。
为达到上述目的,本发明还提供一种基于Oracle数据库全同步的快照选取装置,包括:
查询请求单元,用于在进行同步表操作时,向日志解析模块发出SCN查询请求,以获取快照所需的SCN;
日志解析模块,用于在接收到SCN查询请求时,扫描当前时间点日志解析模块记录的数据,查找是否有相关表的操作,根据是否有相关表操作的查询结果确定快照所需的SCN。
优选地,如果所述日志解析模块记录的数据中有相关表的操作,则选择其中最早的事务的SCN作为快照点。
优选地,如果在日志解析模块记录的数据中没找到表的相关操作,则选取最后一个提交的与表相关的事务的SCN作为快照点。
与现有技术相比,本发明一种基于Oracle数据库全同步的快照选取方法及装置通过在进行同步表操作时向日志解析模块发出SCN查询请求,扫描日志解析模块记录的数据,找是否有相关表的操作,如果有则选其中最早的操作的SCN作为快照点,如果没有则选取最后一个提交的事务的SCN作为快照点,从而实现Oracle数据库的无需锁表全同步的快照选取目的。
附图说明
图1为本发明一种基于Oracle数据库全同步的快照选取方法的步骤流程图;
图2为本发明实施例中确定快照所需的SCN的示意图;
图3为本发明一种基于Oracle数据库全同步的快照选取装置的系统结构图。
具体实施方式
以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。
在说明本发明之前,先介绍几个相关概念:
SCN:系统改变号,用来区分所有操作的先后顺序,SCN在数据库中是一个单一的不断的随着数据库一致性状态的改变而自增的序列。正如一个时间戳代表着时间里面的某一个固定的时刻点一样,每一个SCN值也代表着数据库在运行当中的一个一致性的点,大的SCN值所对应的事务总是比小SCN值的事务发生的更晚。因此把SCN说成是Oracle数据库的逻辑时间戳是很恰当的。
快照:包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。也就是说oracle快照对应的是某一时间点的数据。比如:SELECT*FROM FLASH_TBL AS OF SCN1257245;该语句表示的就是以1257245为快照点查询FLASH_TBL的数据。
REDOLOG:即ORACLE重做日志。REDOLOG记录了ORACLE数据库中事务的开始信息,事务的操作,和事务的结束信息以及SCN。
图1为本发明一种基于Oracle数据库全同步的快照选取方法的步骤流程图。如图1所示,本发明一种基于Oracle数据库全同步的快照选取方法,包括如下步骤:
步骤S1,当对Oracle数据库进行同步表操作时,向日志解析模块发出SCN查询请求,以获取快照所需的SCN。
在本发明中,由于日志解析模块清楚地记录了当前分析到日志中的事务分布情况,而且通常来说,日志解析的进度跟业务的差距在秒级,基本反映了当前的业务情况,因此实际上,当需要使用快照,只要选一个比较近的时间点就可以,而无需实时。
因此,在本发明中,当执行全同步模块(即同步软件的全量同步)在进行同步表操作时,首先会向日志解析模块发送SCN查询请求,以获取合适的SCN。
步骤S2,日志解析模块在接收到SCN查询请求时,扫描当前时间点日志解析模块记录的数据,查找是否有相关表的操作,根据是否有相关表操作的查询结果确定快照所需的SCN。
具体地,如果日志解析模块记录的数据中有相关表的操作,则选择其中最早的相关表的操作的SCN作为快照点,如果在日志解析模块当前时间点记录的数据(redolog)中没找到表的相关操作,则选取最后一个提交的与表相关的事务的SCN作为快照点。
在本发明具体实施例中,假设当前全同步的模块进行同步表A的操作,如图2所示,与表A相关的事务分布情况如图所示,在繁忙的系统中,会有大量并行事务在运行,在本发明实施例中仅选取典型情况予以简化。
(1)如图2所示的查询1,如果在该时间点发出查询请求,日志解析模块假如以T3的提交时间点SCN3为快照点,T2、T3的修改b和c两个操作对于快照来说是可见的,而且会在增量装载时被SCN3过滤掉,因为它们小于SCN3;而T1的修改a对于快照不可见,而且它也会被SCN3过滤掉,那么操作a的数据就丢失了,所以SCN3不合适;
如果日志解析模块选择最早的操作T1的a操作(这里假设a是最早的一条操作)的时间点SCNa为快照点,则T1、T2、T3的数据在快照中不可见,且a、b、c不会在增量中被过滤掉,所以SCNa是合适的时间点。
(2)如图所示的查询2,如果查询是在查询2的位置发生的,情况稍有不同。日志解析现场中现存的事务中不存在对于表A的修改,T1、T2、T3均已获取了完整的事务数据,现存的事务不包括这3者,此时如果选择最后一个解析完成的事务(T1)的提交时间SCN1为快照点,则T1、T2、T3的数据在快照中均可见,且a、b、c操作会在增量装载中被SCN1过滤掉,目标库的数据是完整的,因此SCN1是合适的时间点。
图3为本发明一种基于Oracle数据库全同步的快照选取装置的系统结构图如图3所示,本发明一种基于Oracle数据库全同步的快照选取装置,包括:
查询请求单元301,用于在进行同步表操作时,向日志解析模块发出SCN查询请求,以获取快照所需的SCN。
在本发明中,由于日志解析模块清楚地记录了当前分析到日志中的事务分布情况,而且通常来说,日志解析的进度跟业务的差距在秒级,基本反映了当前的业务情况,因此实际上,当需要使用快照,只要选一个比较近的时间点就可以,而无需实时。
因此,在本发明中,当执行全同步的模块在进行同步表操作时,首先会向日志解析模块发送SCN查询请求,以获取合适的SCN。
日志解析模块302,用于在接收到SCN查询请求时,扫描当前时间点日志解析模块记录的数据,查找是否有相关表的操作,根据是否有相关表操作的查询结果确定快照所需的SCN。
具体地,如果日志解析模块记录的数据中有相关表的操作,则选择其中最早的操作的SCN作为快照点,如果在日志解析模块记录的数据中没找到表的相关操作,则选取最后一个提交的事务的SCN作为快照点。
综上所述,本发明一种基于Oracle数据库全同步的快照选取方法及装置通过在进行同步表操作时向日志解析模块发出SCN查询请求,扫描日志解析模块记录的数据,找是否有相关表的操作,如果有则选其中最早的操作的SCN作为快照点,如果没有则选取最后一个提交的事务的SCN作为快照点,从而实现Oracle数据库的无需锁表全同步的快照选取目的。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
- 一种基于Oracle数据库全同步的快照选取方法及装置
- 一种基于快照的oracle数据库保护方法