CN116700906A - 一种数据库事务的处理方法及相关设备 - Google Patents
一种数据库事务的处理方法及相关设备 Download PDFInfo
- Publication number
- CN116700906A CN116700906A CN202310572399.XA CN202310572399A CN116700906A CN 116700906 A CN116700906 A CN 116700906A CN 202310572399 A CN202310572399 A CN 202310572399A CN 116700906 A CN116700906 A CN 116700906A
- Authority
- CN
- China
- Prior art keywords
- transaction
- target
- database
- information
- transaction information
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 4
- 238000000034 method Methods 0.000 claims abstract description 321
- 230000008569 process Effects 0.000 claims abstract description 280
- 230000004044 response Effects 0.000 claims abstract description 26
- 230000008859 change Effects 0.000 claims description 47
- 230000005540 biological transmission Effects 0.000 claims description 30
- 238000012545 processing Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 12
- 230000001360 synchronised effect Effects 0.000 claims description 11
- 238000012546 transfer Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 12
- 238000003780 insertion Methods 0.000 description 10
- 230000037431 insertion Effects 0.000 description 10
- 238000012217 deletion Methods 0.000 description 8
- 230000037430 deletion Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000002253 acid Substances 0.000 description 1
- 150000007513 acids Chemical class 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013475 authorization Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书提供了一种数据库事务的处理方法和相关设备。该方法包括:获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
Description
技术领域
本说明书一个或多个实施例涉及数据库技术领域,尤其涉及一种数据库事务的处理方法及相关设备。
背景技术
事务是对数据库进行访问并更新的一个执行单元,通常包含了针对数据库的一个或多个操作,每执行事务中的一个操作,就可能产生若干条事务日志,每条事务日志可以用于记录相应操作对数据库进行的更改。在多数据库之间的数据传输服务中,可以启用相应的进程来采集数据库执行事务过程中产生的一系列事务日志,并将这些采集到的事务日志按照其所属的事务进行分类整合,待事务成功提交后,可以将该事务对应的多个事务日志作为整体投递到另一数据库中,以实现数据库之间的数据同步。
然而,如果上述进程发生重启,且在重启前数据库中存在未提交的事务,则为了保证重启后的数据一致性,进程的位点会直接回退到未提交的事务开始前,以从未提交的事务开始前重新开始采集事务日志。如此一来,虽然可以避免事务日志的遗漏,保证重启后的数据一致性,但却极易造成大量事务日志的重复采集,降低效率。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种数据库事务的处理方法及相关设备。
第一方面,本说明书提供了一种数据库事务的处理方法,所述方法包括:
获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;
响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;
将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
第二方面,本说明书提供了一种数据库事务的处理装置,所述装置包括:
存储单元,用于获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;
获取单元,用于响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;
加载单元,用于将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
相应地,本说明书还提供了一种计算设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如上述各实施方式所述的数据库事务的处理方法。
相应地,本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如上述各实施方式所述的数据库事务的处理方法。
综上所述,本申请中的目标进程在采集事务对应的事务日志的过程中,可以先将当前数据库中未提交事务的事务信息存储至目标进程对应的存储空间中。基于此,若目标进程在该未提交事务提交之前发生重启,则本申请可以从上述存储空间中获取事先存储的该未提交事务的事务信息,并将该未提交事务的事务信息加载至重启后的目标进程中,使得重启后的目标进程可以基于该未提交事务的事务信息,直接从当前位点开始,重新采集该未提交事务对应的事务日志。如此,本申请通过事先将未提交事务的事务信息进行存储,使得进程即使发生重启,也可以基于事先存储的未提交事务的事务信息直接从当前位点开始重新采集该未提交事务对应的事务日志,避免了进程回退,进而避免了对重启前已提交事务对应的大量事务日志的重复采集,实现在保证进程重启前后数据一致性的前提下,极大程度上提升了事务日志的采集效率。
附图说明
图1是一示例性实施例提供的一种事务日志采集的整体流程示意图;
图2是一示例性实施例提供的一种数据传输服务的系统架构示意图;
图3是一示例性实施例提供的一种SLR的流程示意图;
图4是一示例性实施例提供的一种数据库事务的处理方法的流程示意图;
图5是一示例性实施例提供的另一种事务日志采集的整体流程示意图;
图6是一示例性实施例提供的一种事务引擎的功能结构示意图;
图7是一示例性实施例提供的一种数据库事务的处理装置的结构示意图;
图8是一示例性实施例提供的一种服务器的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
首先,对本说明书中的部分用语进行解释说明,以便于本邻域技术人员理解。
(1)事务(transaction),可以理解为对数据库中数据进行访问并更新的一个执行单元,通常包含了针对数据库的一个或多个操作,例如数据插入操作、数据删除操作和数据更新操作等各类操作。
事务具有以下四个标准属性(ACID):
a.原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的一组操作要么全部被执行,要么都不执行;如果事务中的部分操作没有成功执行,则事务中的所有操作都需要回滚,回到事务执行前的状态。
b.一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
c.隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
d.持久性(Durability):已提交的事务对数据库中的数据的改变是永久性的,后续的其他操作或者故障都不应该对其产生影响。
(2)长事务,是指持续时间较长的事务,或者说长时间未提交的事务。
(3)事务日志,用于记录事务中的各个操作对数据库进行的更改,即用于记录事务执行过程中数据库中发生的数据变更。在一示出的实施方式中,数据库的事务日志可以包括重做日志(redo log),每执行事务中的一个操作,就可能产生若干条redo日志。在事务中的所有操作均执行完成,并且事务成功提交(commit)后,该事务对应的多条redo日志可以按照产生的顺序写入数据库对应的磁盘中,以实现对数据库的更改。
(4)数据传输服务(Data Transmission Service,DTS),集数据迁移、数据订阅以及数据同步功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。DTS支持关系型数据库(例如Oracle数据库、mySQL数据库、PostgreSQL数据库等)、NoSQL数据库、大数据(OLAP)等各类数据源。
(5)DTS-reader进程,DTS中运行的进程,用于采集数据库在事务执行过程中产生的各个事务日志,并将采集到的事务日志投递到DTS-Store中。进一步地,由于多个事务可以并发执行,因此在时间线上各个事务产生的事务日志存在交叉,reader进程在某一时间段内采集到的多个事务日志可能分别对应于不同的事务,基于此,reader进程可以先将采集到的多个事务日志在本地进行分类整合,待其中任一事务成功提交后,可以将成功提交的事务所对应的多个事务日志作为一个整体投递到DTS-Store中。
(6)位点,reader进程的位点即reader进程采集事务日志的时间节点,在Oracle数据库中,reader进程的位点一般可以使用时间戳或者系统改变号(System Change Number,SCN)来表示。其中,SCN是Oracle数据库中的基础部分,是维持数据的一致性和顺序恢复的重要标志,SCN可以是在某个时间点定义数据库已提交版本的时间戳标记。Oracle数据库可以为每个已提交的事务分配一个唯一的SCN,SCN的值可以表示对数据库进行更改的逻辑时间点。
(7)DTS-store,DTS中的消息队列,用于存储DTS-reader采集到的事务日志。
(8)DTS-writer进程:DTS中运行的进程,用于从DTS-store中读取事务日志,并将该事务日志投递到其他的数据库,以对其他的数据库进行同步的数据变更。
如上所述,在用于采集事务日志的进程(例如上述reader进程)发生重启时,数据库中可能还存在未提交的事务(或者称之为未决事务),但是重启后的进程无法获知未提交的事务中的哪些操作是重启前已执行的,哪些操作是重启前未执行的,相应的,重启后的进程无法获知哪些事务日志没有被整合并投递到需要数据同步的另一数据库中。因此,为了保证进程重启后的数据一致性,进程会直接回退到未提交的事务开始前,以从该未提交的事务开始前重新采集事务日志。
请参阅图1,图1是一示例性实施例提供的一种事务日志采集的整体流程示意图。如图1所示,源数据库中存在待执行的事务1、事务2、事务3和事务4,多个事务可以并发执行,每个事务均可以包括一个或多个操作。如图1所示,每个事务可以通过其包含的一组数据操纵语言(Data Manipulation Language,DML)对数据库执行数据插入操作、数据删除操作、数据更新操作等各类操作。
如图1所示,DTS运行reader进程,该reader进程可以在源数据库执行事务过程中,依次采集其产生的事务日志。示例性的,reader进程可以从事务1的开始时间开始采集事务日志,依次采集到事务日志1-1、事务日志2-1、事务日志2-2、事务日志3-1、事务日志2-3,此时,事务2中的所有操作均执行完成,事务2成功提交,因此reader进程可以将采集到的事务2对应的事务日志2-1、事务日志2-2、事务日志2-3作为整体投递到DTS-store中。进一步地,reader进程继续采集得到事务日志3-2、事务日志4-1、事务日志4-2,此时,事务4中的所有操作均执行完成,事务4成功提交,因此reader进程可以将采集到的事务4对应的事务日志4-1、事务日志4-2作为整体投递到DTS-store中。进一步地,reader进程继续采集得到事务日志3-3,此时,事务3中的所有操作均执行完成,事务3成功提交,因此reader进程可以将采集到的事务3对应的事务日志3-1、事务日志3-2、事务日志3-3作为整体投递到DTS-store中。
进一步地,如图1所示,在事务3成功提交后和事务1提交前,reader进程发生重启,为了保证重启后的数据一致性,reader进程的位点需要直接回退到事务1开始前,以从事务1开始前重新采集事务日志。如图1所示,在事务1提交前,与其并发执行的事务2、事务3、事务4已经成功提交了,重启前的reader进程也已经成功采集到了事务2、事务3、事务4的事务日志并投递到了DTS-store中,然而,由于reader进程直接回退到了事务1开始前,从而导致reader进程会重复采集事务2、事务3、事务4的事务日志,并重复投递事务2、事务3、事务4的事务日志至DTS-store,极大程度上降低了reader进程的执行效率。除此之外,由于大量事务日志重复投递到DTS-store,进一步地,这些事务日志也会从DTS-store中重复投递到需要与源数据库进行数据同步的目标数据库中,使得目标数据库产生重复的数据插入和更新等,严重影响数据同步性能。
基于此,本说明书提供了一种将数据库中未提交事务的事务信息进行存储,以便后续在事务提交前进程就发生重启的情况下,可以将存储的未提交事务的事务信息加载到重启后的进程中,以使重启后的进程可以直接重新采集未提交事务的事务日志,从而提升事务日志的采集效率的技术方案。
在实现时,本申请可以获取源数据库中未提交的目标事务的事务信息,并将目标事务的事务信息存储至与目标进程对应的存储空间中。其中,目标进程可以用于采集与各个事务对应的事务日志。然后,响应于目标进程在目标事务提交前发生重启,本申请可以获取存储空间中事先存储的该目标事务的事务信息,并将该目标事务的事务信息加载至重启后的目标进程中,以使重启后的目标进程基于目标事务的事务信息重新采集与目标事务对应的事务日志。
在以上技术方案中,本申请中的目标进程在采集事务对应的事务日志的过程中,可以先将当前数据库中未提交事务的事务信息存储至目标进程对应的存储空间中。基于此,若目标进程在该未提交事务提交之前发生重启,则本申请可以从上述存储空间中获取事先存储的该未提交事务的事务信息,并将该未提交事务的事务信息加载至重启后的目标进程中,使得重启后的目标进程可以基于该未提交事务的事务信息,直接从当前位点开始重新采集该未提交事务对应的事务日志。如此,本申请通过事先将未提交事务的事务信息进行存储,使得进程即使发生重启,也可以基于事先存储的未提交事务的事务信息直接从当前位点开始重新采集对应的事务日志,避免了进程回退,进而避免了对重启前已提交事务对应的大量事务日志的重复采集,实现在保证进程重启前后数据一致性的前提下,极大程度上提升了事务日志的采集效率。
请参阅图2,图2是一示例性实施例提供的一种数据传输服务的系统架构示意图。如图2所示,该系统可以包括源数据库,与源数据库关联的目标数据库,以及与数据传输服务程序中运行的reader进程对应的存储空间。进一步地,该系统可以包括提供数据传输服务的服务器或者服务器集群(图2中未示出),该服务器或者服务器集群中可以包括上述存储空间。
示例性的,与源数据库关联的目标数据库可以是源数据库的备份数据库。示例性的,该备份数据库可以是针对源数据库进行完全备份的数据库,也可以是针对源数据库进行增量备份的数据库,等等,本说明书对此不做具体限定。示例性的,该备份数据库也可以是针对源数据库进行热备份的数据库,等等,本说明书对此不做具体限定。
示例性的,该存储空间可以是数据传输服务中的消息队列,即DTS-store。
如图2所示,在源数据库执行事务的过程中,本申请可以通过数据传输服务程序中运行的reader进程采集源数据库执行事务过程中产生的一系列事务日志,并在事务提交后,将针对该已提交事务(例如上述图1所示的事务2)采集到的多个事务日志(例如上述事务日志2-1、事务日志2-2、事务日志2-3)作为整体投递到reader进程对应的存储空间中。
进一步地,如图2所示,通过数据传输服务程序可以将存储空间中存储的与该已提交事务对应的多个事务日志进一步投递到目标数据库中,以使目标数据库基于该事务日志进行同步的数据变更。示例性的,本申请可以通过数据传输服务程序中运行的writer进程,读取存储空间中存储的与该已提交事务对应的多个事务日志,并将该多个事务日志投递到目标数据库中。
与此同时,如图2所示,在源数据库执行事务的过程中,还可以获取源数据库中未提交事务(not commit transaction)的事务信息,并将未提交事务的事务信息存储至reader进程对应的存储空间中。在一示出的实施方式中,可以一并通过数据传输服务程序中运行的reader进程获取源数据库中未提交事务的事务信息,并将未提交事务的事务信息存储至reader进程对应的存储空间中。
在一示出的实施方式中,请参阅图3,图3是一示例性实施例提供的一种SLR的流程示意图。如图3所示,reader进程可以将当前源数据库中未提交事务的事务信息存储(store)至reader进程对应的存储空间中。
在一示出的实施方式中,该未提交事务的事务信息可以包括该未提交事务的事务标识,该未提交事务所涉及的针对源数据库的至少一种数据变更操作对应的操作信息,以及该未提交事务的开始时间,等等,本说明书对此不做具体限定。在一些可能的实施方式中,事务信息还可以包括其他任何可能的信息,例如包括源数据库在该未提交事务的执行过程中产生的各个事务日志的日志逻辑序列号(log sequence number,LSN),等等,本说明书对此不做具体限定。示例性的,上述事务标识可以为事务的ID;上述操作信息可以包括操作类型(比如数据插入操作、数据删除操作和数据更新操作),以及各个操作涉及的数据表和数据记录,等等,本说明书对此不做具体限定。
应理解,未提交事务的事务信息可以相当于reader进程的进程状态(progressinfo),可以表明reader进程当前的事务日志采集情况。
进一步地,如图3所示,响应于reader进程发生重启,可以将存储空间中存储的未提交事务的事务信息加载(load)至重启后的reader中。然后,重启后的reader进程可以回放(replay)该未提交事务的事务信息(相当于回放重启前的reader进程的进程状态),以基于该未提交事务的事务信息重新采集该未提交事务对应的事务日志,并投递到与源数据库关联的目标数据库中,保证了重启后的数据一致性。
如上所述,本申请利用数据传输服务程序中运行的reader进程原有的存储空间(DTS-store),实现了对源数据库中未提交事务的事务信息的存储、加载和回放(即SLR),进而在后续reader进程发生重启时,可以通过将事先存储的未提交事务的事务信息加载到重启后的reader进程中,使得重启后的reader进程可以基于该未提交事务的事务信息直接从当前位点开始重新采集对应的事务日志,避免了进程回退和大量事务日志的重复采集,实现在保证重启前后数据一致性的前提下,极大程度上提升了事务日志的采集效率。
请参阅图4,图4是一示例性实施例提供的一种数据库事务的处理方法的流程示意图。该方法可以应用于服务器,示例性的,该服务器可以是用于提供数据传输服务的服务器。示例性的,该服务器具体可以是一台服务器也可以是由多台服务器构成的服务器集群,等等,本说明书对此不做具体限定。如图4所示,该方法具体可以包括如下步骤S101-步骤S103。
步骤S101,获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;目标进程用于采集与各个事务对应的事务日志。
在一示出的实施方式中,源数据库可以对应有多个待执行的事务,每个事务可以包括针对源数据库的一个或多个数据变更操作,比如包括数据插入操作、数据删除操作和数据更新操作等各类操作。事务每执行一个操作都会产生一个多或多个事务日志,每个事务日志可以用于记录数据库中发生的数据变更,具体请参阅上述用语解释,此处不再展开详述。
示例性的,事务可以包括多个数据插入操作,执行该多个数据插入操作可以在源数据库中插入相应的多条数据记录(即新增多条数据记录)。示例性的,事务可以包括多个数据删除操作,执行该多个数据删除操作可以在源数据库中删除相应的多条数据记录。示例性的,事务还可以包括多个数据更新操作,执行该多个数据更新操作可以对源数据库中相应的多条数据记录进行更新(或者说更改)。其中,在执行了事务中包括的上述数据插入操作、数据删除操作和数据更新操作后,源数据库中新增的若干条数据记录、删除的若干条数据记录以及发生更改的若干条数据记录均可以是源数据库中的增量变更。
在一示出的实施方式中,该源数据库可以为关系型数据库,可以包括一张或多张数据表。上述数据删除操作可以是在源数据库包括的一张或多张数据表中分别删除若干条数据记录;上述数据插入操作可以是在源数据库包括的一张或多张数据表中分别插入若干条数据记录;上述数据更新操作可以是对源数据库包括的一张或多张数据表中相应的若干条数据记录分别进行更新,等等,本说明书对此不做具体限定。
需要说明的是,本说明书对该源数据库的类型不做具体限定。在一些可能的实施方式中,该源数据库是任何类型的关系型数据库,例如Oracle数据库、mySQL数据库、PostgreSQL数据库,等等,本说明书对此不做具体限定。相应的,以源数据库为Oracle数据库为例,上述事务日志可以为redo日志,具体请参阅上述用语解释,此处不再展开详述。在一些可能的实施方式中,上述事务日志也可以是与其他类型的关系型数据库对应的任何可能类型的日志,本说明书对此不做具体限定。
在一示出的实施方式中,在源数据库执行事务的过程中,服务器可以采集源数据库中的增量变更。在一示出的实施方式中,服务器可以运行目标进程,通过该目标进程采集源数据库中的增量变更。在一示出的实施方式中,目标进程具体可以用于采集源数据库中执行的各个事务所对应的事务日志,从而获得源数据库在执行事务过程中产生的增量变更。
进一步地,在一示出的实施方式中,在源数据库执行事务的过程中,服务器还可以将源数据库当前未提交的一个或多个事务的事务信息进行存储。示例性的,服务器可以将源数据库当前未提交的一个或多个事务的事务信息进行持久化存储。需要说明的是,未提交的事务是指开始执行但未提交的事务,不包括未开始执行的事务。
在一示出的实施方式中,服务器可以先确定当前源数据库中未提交的目标事务,并获取未提交的目标事务的事务信息。然后,服务器可以将获取到的未提交的目标事务的事务信息进行存储。示例性的,服务器可以将获取到的未提交的目标事务的事务信息存储至与上述目标进程对应的存储空间中,以实现对目标事务的事务信息的持久化存储。
在一示出的实施方式中,该未提交的目标事务的事务信息可以包括该目标事务的事务标识,该目标事务所涉及的针对源数据库的至少一种数据变更操作对应的操作信息,以及该目标事务的开始时间,等等,本说明书对此不做具体限定。在一些可能的实施方式中,事务信息还可以包括其他任何可能的信息,例如包括源数据库在该目标事务的执行过程中产生的各个事务日志的LSN,等等,本说明书对此不做具体限定。示例性的,上述事务标识可以为事务的ID;上述操作信息可以包括操作类型(比如数据插入操作、数据删除操作和数据更新操作),以及各个操作涉及的数据表和数据记录,等等,本说明书对此不做具体限定。
在一示出的实施方式中,服务器可以周期性地获取当前源数据库中未提交的一个或多个目标事务的事务信息,并将目标事务的事务信息存储至与该目标进程对应的存储空间中。
示例性的,服务器可以按照预设的时长周期(或者说频率),周期性地确定当前源数据库中未提交的目标事务,并获取该未提交的目标事务的事务信息,然后将目标事务的事务信息存储至与该目标进程对应的存储空间中。
示例性的,该预设的时长周期可以是1秒、5秒、20秒或者1分钟等,即服务器可以每隔1秒确定一次当前源数据库中未提交的目标事务,并将当前源数据库中未提交的目标事务的事务信息存储至与该目标进程对应的存储空间中;或者,服务器也可以每隔5秒确定一次当前源数据库中未提交的目标事务,等等,本说明书对此不做具体限定。示例性的,上述预设的时长周期的具体数值可以根据实际需求和服务器的硬件条件进行设置,本说明书对此不做具体限定。
在一些可能的实施方式中,服务器在周期性地确定当前源数据库中未提交的目标事务的过程中,可能存在后续确定的未提交的目标事务与之前确定的未提交的目标事务存在重叠的情况,即源数据库中可能存在一个或多个长时间未提交的目标事务,这些长时间未提交的目标事务可以称之为长事务。相应的,考虑到在之前的周期中已经将该长时间未提交的目标事务的事务信息存储至目标进程的存储空间中了,因此,在后续的周期中,服务器可以不再对该目标事务的事务信息进行重复存储,以避免不必要的重复存储,节省存储空间。
进一步地,在一示出的实施方式中,响应于未提交的目标事务在后续成功提交,服务器可以在目标进程对应的存储空间中删除该目标事务的事务信息,从而使得目标进程对应的存储空间中仅存储未提交事务的事务信息。
进一步地,在一示出的实施方式中,响应于未提交的目标事务在后续成功提交,服务器还可以将目标进程采集到的与该目标事务对应的事务日志传输给该源数据库关联的目标数据库,以使目标数据库基于该已提交的目标事务的事务日志进行同步的数据变更。在一示出的实施方式中,服务器可以先对目标进程采集到的与该目标事务对应的事务日志进行解析,以得到该目标事务针对该源数据库的数据变更记录。进一步地,在一示出的实施方式中,服务器可以将该数据变更记录传输至与该源数据库关联的目标数据库,以使目标数据库基于该已提交的目标事务对应的数据变更记录进行同步的数据变更。示例性的,与源数据库关联的目标数据库可以是源数据库的备份数据库。
在一示出的实施方式中,具体可以通过上述目标进程获取源数据库中未提交的目标事务的事务信息,并对未提交的目标事务的事务信息进行存储。示例性的,该目标进程可以包括多个线程,其中一个线程可以用于采集源数据库执行事务过程中产生的事务日志,另一个线程可以用于周期性地获取源数据库中未提交的目标事务的事务信息,并将未提交的目标事务的事务信息存储至与目标进程对应的存储空间中。其中,目标进程中的多线程可以并发执行。
在一示出的实施方式中,服务器也可以另外运行一个进程,专门用于周期性地获取源数据库中未提交事务的事务信息,并将未提交事务的事务信息存储至与目标进程对应的存储空间中,等等,本说明书对此不做具体限定。
在一示出的实施方式中,上述目标进程可以是数据传输服务程序中运行的进程,例如上述reader进程。在一些可能的实施方式中,该目标进程也可以是其他程序中运行的用于采集事务日志的进程,本说明书对此不做具体限定。
在一示出的实施方式中,该目标进程对应的存储空间可以是该目标进程对应的消息队列。示例性的,若该目标进程为DTS中运行的reader进程,则该目标进程对应的消息队列具体可以为上述DTS中的消息队列,即DTS-store。
相应的,在一示出的实施方式中,服务器可以将未提交的目标事务的事务信息存储至与目标进程对应的消息队列中。
相应的,在一示出的实施方式中,响应于未提交的目标事务在后续成功提交,目标进程(例如reader进程)可以对采集到的与该目标事务对应的事务日志进行解析,以得到该目标事务针对该源数据库的数据变更记录。然后,该目标进程可以进一步将该数据变更记录加载至与目标进程对应的消息队列中,以由数据传输服务程序将消息队列中的数据变更记录进一步传输给与源数据库关联的目标数据库,以使目标数据库基于该数据变更记录进行同步的数据变更。
在一些可能的实施方式中,除了上述消息队列外,该目标进程对应的存储空间也可以是硬盘、内存或者其他任何可能的存储空间,本说明书对此不做具体限定。
示例性的,请参阅图5,图5是一示例性实施例提供的另一种事务日志采集的整体流程示意图。如图5所示,源数据库中存在待执行的事务1、事务2、事务3和事务4,多个事务可以并发执行,具体可参考上述图1对应实施例的描述,此处不再进行赘述。
如图5所示,DTS运行reader进程(即上述目标进程),该reader进程可以在源数据库执行事务过程中,依次采集其产生的事务日志。进一步地,如图5所示,在采集事务日志的过程中,reader进程还可以将当前源数据库中未提交事务的事务信息存储至reader进程对应的存储空间中。
示例性的,以图5中的事务2开始执行,且事务3未开始执行的情况为例,当前源数据库中存在未提交的事务1和事务2,reader进程可以获取事务1和事务2的事务信息,并将事务1和事务2的事务信息存储至reader进程对应的存储空间中。
示例性的,以图5中的事务3开始执行,且事务2未提交的情况为例,当前源数据库中存在未提交的事务1、事务2和事务3。由于reader进程对应的存储空间中已存储有事务1和事务2的事务信息,因此reader进程可以获取事务3的事务信息,并将事务3的事务信息存储至reader进程对应的存储空间中。此时,reader进程对应的存储空间中总共存储有事务1、事务2和事务3的事务信息。
示例性的,以图5中的事务2成功提交,且事务4未开始执行的情况为例,当前源数据库中存在未提交的事务1和事务3,由于reader进程对应的存储空间中已存储有事务1、事务2和事务3的事务信息,因此可以在reader进程对应的存储空间中将已提交的事务2的事务信息进行删除。此时,reader进程对应的存储空间中总共存储有事务1和事务3的事务信息。
相应的,响应于事务2成功提交,此时reader进程可以将采集到的事务2对应的事务日志2-1、事务日志2-2、事务日志2-3作为整体投递到reader进程对应的存储空间(例如DTS-store)中。进一步地,DTS中运行的writer进程可以读取存储空间中的事务2对应的事务日志2-1、事务日志2-2、事务日志2-3,并将事务2对应的事务日志2-1、事务日志2-2、事务日志2-3传输至与源数据库关联的目标数据库中,以使目标数据库进行与源数据库同步的数据变更。
在一示出的实施方式中,reader进程可以先对采集到的事务2对应的事务日志2-1、事务日志2-2、事务日志2-3进行解析,得到事务2针对源数据库的数据变更记录。然后,reader进程可以将解析得到的数据变更记录传输至reader进程对应的存储空间中。进一步地,DTS中运行的writer进程可以读取存储空间中的事务2对应的数据变更记录,并将事务2对应的数据变更记录传输至与源数据库关联的目标数据库中,以使目标数据库基于事务2对应的数据变更记录进行与源数据库同步的数据变更。
在一示出的实施方式中,reader进程也可以直接将采集到的事务2对应的事务日志2-1、事务日志2-2、事务日志2-3作为整体投递到reader进程对应的存储空间中,后续可以由writer进程读取存储空间中的事务日志2-1、事务日志2-2、事务日志2-3,并对事务日志2-1、事务日志2-2、事务日志2-3进行解析,以得到事务2针对源数据库的数据变更记录,等等,本说明书对此不做具体限定。
示例性的,以图5中的事务4开始执行但未提交的情况为例,当前源数据库中存在未提交的事务1、事务3和事务4,由于reader进程对应的存储空间中已存储有事务1和事务3的事务信息,因此reader进程可以获取事务4的事务信息,并将事务4的事务信息存储至reader进程对应的存储空间中。此时,reader进程对应的存储空间中总共存储有事务1、事务3和事务4的事务信息。
示例性的,以图5中的事务4成功提交,且事务1和事务3仍未提交的情况为例,当前源数据库中存在未提交的事务1和事务3,由于reader进程对应的存储空间中已存储有事务1、事务3和事务4的事务信息,因此可以在reader进程对应的存储空间中将已提交的事务4的事务信息进行删除。此时,reader进程对应的存储空间中总共存储有事务1和事务3的事务信息。
相应的,响应于事务4成功提交,此时reader进程可以将采集到的事务4对应的事务日志4-1、事务日志4-2作为整体投递到reader进程对应的存储空间中。进一步地,DTS中运行的writer进程可以读取存储空间中的事务4对应的事务日志4-1、事务日志4-2,并将事务2对应的事务日志4-1、事务日志4-2传输至与源数据库关联的目标数据库中,以使目标数据库进行与源数据库同步的数据变更,等等,具体请参阅上述实施例中的描述,此处不再进展开详述。
示例性的,以图5中的事务3成功提交,且事务1仍未提交的情况为例,当前源数据库中存在未提交的事务1,由于reader进程对应的存储空间中已存储有事务1和事务3事务信息,因此可以在reader进程对应的存储空间中将已提交的事务3的事务信息进行删除。此时,reader进程对应的存储空间中仅存储有事务1的事务信息。
相应的,响应于事务3成功提交,此时reader进程可以将采集到的事务3对应的事务日志3-1、事务日志3-2、事务日志3-3作为整体投递到reader进程对应的存储空间中。进一步地,DTS中运行的writer进程可以读取存储空间中的事务3对应的事务日志3-1、事务日志3-2、事务日志3-3,并将事务3对应的事务日志3-1、事务日志3-2、事务日志3-3传输至与源数据库关联的目标数据库中,以使目标数据库进行与源数据库同步的数据变更,等等,具体请参阅上述实施例中的描述,此处不再进展开详述。
在一示出的实施方式中,reader进程对应的存储空间可以部署在源数据库侧,以实现对事务日志和事务信息的就近存储;或者,reader进程对应的存储空间也可以部署在需要进行数据同步的目标数据库侧,等等,本说明书对此不做具体限定。
步骤S102,响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息。
在一示出的实施方式中,在上述数据传输服务程序突然中断,或者服务器发生故障或宕机等情况下,目标进程可能会发生重启。
在一示出的实施方式中,响应于目标进程在目标事务提交前发生重启,服务器可以获取目标进程对应的存储空间中事先存储的该目标事务的事务信息。
在一示出的实施方式中,目标进程发生重启可以包括目标进程在发生失效转移之后的进程重启,等等,本说明书对此不做具体限定。
示例性的,如图5所示,以上述未提交的目标事务为事务1为例,响应于reader进程在事务1提交前发生重启,数据传输服务程序可以从reader进程对应的存储空间中获取存储的该事务1的事务信息。
示例性的,仍以图5所示的事务执行情况为例,若reader进程在事务1和事务3提交前发生重启,数据传输服务程序可以从reader进程对应的存储空间中获取存储的该事务1和事务3的事务信息。
示例性的,仍以图5所示的事务执行情况为例,若reader进程在事务1、事务3和事务4提交前发生重启,数据传输服务程序可以从reader进程对应的存储空间中获取存储的该事务1、事务3和事务4的事务信息,等等,此处不再举例。
在一示出的实施方式中,响应于目标进程在目标事务提交前发生重启,重启后的目标进程可以主动获取存储空间中事先存储的该目标事务的事务信息。示例性的,如图5所示,响应于reader进程在事务1提交前发生重启,重启后的reader进程可以主动从reader进程对应的存储空间中获取存储的该事务1的事务信息。
步骤S103,将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
在一示出的实施方式中,响应于目标进程在目标事务提交前发生重启,服务器可以将获取到的存储空间中存储的该目标事务的事务信息加载至重启后的目标进程中,以使重启后的目标进程可以基于目标事务的事务信息重新采集与目标事务对应的事务日志。
在一示出的实施方式中,在将目标事务的事务信息加载至重启后的目标进程中后,可以基于目标事务的事务信息在重启后的目标进程中回放该未提交的目标事务,以恢复目标进程在重启前的进程状态,使得重启后的目标进程可以从当前位点开始,基于目标事务的事务信息重新采集与目标事务对应的事务日志。
示例性的,重启后的目标进程可以基于目标事务的事务信息,从该源数据库的事务日志中采集产生时间在该目标事务的开始时间之后,并且包含该目标事务的事务标识的事务日志,作为与该目标事务对应的事务日志。
示例性的,该目标事务的事务日志中还可以包含与该目标事务的至少一种数据变更操作对应的操作信息。相应的,重启后的目标进程具体可以基于目标事务的事务信息,从该源数据库的事务日志中采集产生时间在该目标事务的开始时间之后,并且包含该目标事务的事务标识以及该目标事务的至少一种数据变更操作对应的操作信息的事务日志,作为与该目标事务对应的事务日志。
示例性的,如图5所示,响应于reader进程在事务1提交前发生重启,数据传输服务程序可以将reader进程对应的存储空间中存储的事务1的事务信息加载到重启后的reader进程中,以使重启后的reader进程可以基于该事务1的事务信息从当前位点开始重新采集该事务1对应的事务日志(例如包括事务日志1-1、事务日志1-2等)。如此,重启后的reader无需再将位点回退到事务1开始前,进而也无需重新采集事务2、事务3和事务4对应的事务日志。
请参阅图6,图6是一示例性实施例提供的一种事务引擎的功能结构示意图。如图6所示,通过源数据库中的事务引擎(Transaction Engine),除了可以实现源数据库中的事务提交等操作外,还可以实现SLR控制(control),即通过事务引擎可以实现对上述未提交事务的事务信息进行存储、加载和回放的控制。
在一示出的实施方式中,本申请可以通过事务引擎控制数据传输服务程序,使得数据传输服务程序在事务引擎的控制下,实现对未提交事务的事务信息进行存储、加载和回放。例如,事务引擎可以控制数据传输服务程序周期性地获取源数据库中未提交的目标事务的事务信息,并将目标事务的事务信息存储至目标进程对应的存储空间中;以及,响应于目标进程在目标事务提交前发生重启,事务引擎可以控制数据传输服务程序将存储空间中存储的目标事务的事务信息加载至重启后的目标进程中,并进一步控制重启后的目标进程基于目标事务的事务信息重新采集该目标事务对应的事务日志,等等。
在一示出的实施方式中,本申请也可以直接由源数据库中的事务引擎实现上述对未提交事务的事务信息的存储、加载和回放。例如,由事务引擎周期性地获取源数据库中未提交的目标事务的事务信息,并将目标事务的事务信息存储至目标进程对应的存储空间中;以及,由事务引擎响应于目标进程在目标事务提交前发生重启,获取存储空间中存储的目标事务的事务信息,并将事务信息加载至重启后的目标进程中,等等,本说明书对此不做具体限定。
综上所述,本申请中的目标进程在采集事务对应的事务日志的过程中,可以先将当前数据库中未提交事务的事务信息存储至目标进程对应的存储空间中。基于此,若目标进程在该未提交事务提交之前发生重启,则本申请可以从上述存储空间中获取事先存储的该未提交事务的事务信息,并将该未提交事务的事务信息加载至重启后的目标进程中,使得重启后的目标进程可以基于该未提交事务的事务信息,直接从当前位点开始重新采集该未提交事务对应的事务日志。如此,本申请通过事先将未提交事务的事务信息进行存储,使得进程即使发生重启,也可以基于事先存储的未提交事务的事务信息直接从当前位点开始重新采集对应的事务日志,避免了进程回退,进而避免了对重启前已提交事务对应的大量事务日志的重复采集,实现在保证进程重启前后数据一致性的前提下,极大程度上提升了事务日志的采集效率。
与上述方法流程实现对应,本说明书的实施例还提供了一种数据库事务的处理装置。请参阅图7,图7是一示例性实施例提供的一种数据库事务的处理装置的结构示意图。该装置30可以应用于提供数据传输服务的服务器。如图7所示,该装置30包括:
存储单元301,用于获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;
获取单元302,用于响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;
加载单元303,用于将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
在一示出的实施方式中,所述目标事务的事务信息包括:所述目标事务的事务标识,所述目标事务所涉及的针对所述源数据库的至少一种数据变更操作对应的操作信息,所述目标事务的开始时间。
在一示出的实施方式中,所述存储单元301,具体用于:
按照预设的时长周期,周期性地获取未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与所述目标进程对应的存储空间中。
在一示出的实施方式中,所述装置30还包括:
删除单元304,用于响应于所述目标事务提交成功,将所述存储空间中存储的所述目标事务的事务信息删除。
在一示出的实施方式中,所述装置30还包括:
解析单元305,用于响应于所述目标事务提交成功,对所述目标进程采集到的与所述目标事务对应的事务日志进行解析,以得到所述目标事务针对所述源数据库的数据变更记录;
传输单元306,用于将所述数据变更记录传输至与所述源数据库关联的目标数据库,以使所述目标数据库基于所述数据变更记录进行同步的数据变更。
在一示出的实施方式中,所述目标数据库为与所述源数据库对应的备份数据库。
在一示出的实施方式中,所述目标进程为与所述源数据库对应的数据传输服务程序中运行的进程;与所述目标进程对应的存储空间为与所述目标进程对应的消息队列;
所述存储单元301,具体用于:
将所述目标事务的事务信息加载至与所述目标进程对应的消息队列中;
所述传输单元306,具体用于:
将所述数据变更记录加载至与所述目标进程对应的消息队列中,由所述数据传输服务程序将所述消息队列中的所述数据变更记录进一步传输给与所述源数据库关联的所述目标数据库,以使所述目标数据库基于所述数据变更记录进行同步的数据变更。
在一示出的实施方式中,所述源数据库为Oracle数据库;所述目标进程为与所述源数据库对应的数据传输服务程序中运行的Reader进程。
在一示出的实施方式中,所述目标进程发生重启包括所述目标进程在发生Failover失效转移之后的进程重启。
上述装置30中各个单元的功能和作用的实现过程具体详见上述图1-图6对应实施例的描述,在此不再进行赘述。应理解,上述装置30可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的处理器(CPU)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了CPU以及存储器之外,上述装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部单元或模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的装置、单元、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与上述方法实施例相对应,本说明书的实施例还提供了一种服务器。请参阅图8,图8是一示例性实施例提供的一种服务器的结构示意图。示例性的,该服务器1000可以为上述提供数据传输服务的服务器,相应的,该服务器1000可以运行上述目标进程。如图8所示,该服务器1000可以包括处理器1001和存储器1002,进一步还可以包括输入设备1004(例如键盘等)和输出设备1005(例如显示器等)。处理器1001、存储器1002、输入设备1004和输出设备1005之间可以通过总线或其他方式连接。如图8所示,存储器1002包括计算机可读存储介质1003,该计算机可读存储介质1003存储有能够由处理器1001运行的计算机程序。处理器1001可以是通用处理器,微处理器,或用于控制以上方法实施例执行的集成电路。处理器1001在运行存储的计算机程序时,可以执行本说明书实施例中数据库事务的处理方法的各个步骤,包括:获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志,等等。
对上述数据库事务的处理方法的各个步骤的详细描述请参见之前的内容,此处不再进行赘述。
与上述方法实施例相对应,本说明书的实施例还提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中数据库事务的处理方法的各个步骤。具体请参见上述图1-图6对应实施例的描述,此处不再进行赘述。
以上所述仅为本说明书的较佳实施例而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
在一个典型的配置中,终端设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (12)
1.一种数据库事务的处理方法,所述方法包括:
获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与源数据库中的各个事务对应的事务日志;
响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;
将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
2.根据权利要求1所述的方法,所述目标事务的事务信息包括:所述目标事务的事务标识和所述目标事务的开始时间。
3.根据权利要求1所述的方法,所述获取未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中,包括:
按照预设的时长周期,周期性地获取未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与所述目标进程对应的存储空间中。
4.根据权利要求1所述的方法,所述方法还包括:
响应于所述目标事务提交成功,将所述存储空间中存储的所述目标事务的事务信息删除。
5.根据权利要求1所述的方法,所述方法还包括:
响应于所述目标事务提交成功,对所述目标进程采集到的与所述目标事务对应的事务日志进行解析,以得到所述目标事务针对所述源数据库的数据变更记录;
将所述数据变更记录传输至与所述源数据库关联的目标数据库,以使所述目标数据库基于所述数据变更记录进行数据变更。
6.根据权利要求5所述的方法,所述目标数据库为与所述源数据库对应的备份数据库。
7.根据权利要求5所述的方法,所述目标进程为与所述源数据库对应的数据传输服务程序中运行的进程;与所述目标进程对应的存储空间为与所述目标进程对应的消息队列;
所述将所述目标事务的事务信息存储至与目标进程对应的存储空间中,包括:
将所述目标事务的事务信息加载至与所述目标进程对应的消息队列中;
所述将所述数据变更记录传输至与所述源数据库关联的目标数据库,以使所述目标数据库基于所述数据变更记录进行同步的数据变更,包括:
将所述数据变更记录加载至与所述目标进程对应的消息队列中,由所述数据传输服务程序将所述消息队列中的所述数据变更记录进一步传输给与所述源数据库关联的目标数据库,以使所述目标数据库基于所述数据变更记录进行同步的数据变更。
8.根据权利要求1所述的方法,所述源数据库为Oracle数据库;所述目标进程为与所述源数据库对应的数据传输服务程序中运行的Reader进程。
9.根据权利要求1-8任意一项所述的方法,所述目标进程发生重启包括所述目标进程在发生Failover失效转移之后的进程重启。
10.一种数据库事务的处理装置,所述装置包括:
存储单元,用于获取源数据库中未提交的目标事务的事务信息,并将所述目标事务的事务信息存储至与目标进程对应的存储空间中;其中,所述目标进程用于采集与各个事务对应的事务日志;
获取单元,用于响应于所述目标进程在所述目标事务提交前发生重启,获取所述存储空间中存储的所述目标事务的事务信息;
加载单元,用于将所述目标事务的事务信息加载至重启后的所述目标进程中,以使重启后的所述目标进程基于所述目标事务的事务信息重新采集与所述目标事务对应的事务日志。
11.一种计算设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如权利要求1至9任意一项所述的方法。
12.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310572399.XA CN116700906A (zh) | 2023-05-18 | 2023-05-18 | 一种数据库事务的处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310572399.XA CN116700906A (zh) | 2023-05-18 | 2023-05-18 | 一种数据库事务的处理方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116700906A true CN116700906A (zh) | 2023-09-05 |
Family
ID=87833099
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310572399.XA Pending CN116700906A (zh) | 2023-05-18 | 2023-05-18 | 一种数据库事务的处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116700906A (zh) |
-
2023
- 2023-05-18 CN CN202310572399.XA patent/CN116700906A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA3121919C (en) | System and method for augmenting database applications with blockchain technology | |
US11429599B2 (en) | Method and apparatus for updating database by using two-phase commit distributed transaction | |
US9575849B2 (en) | Synchronized backup and recovery of database systems | |
US9779128B2 (en) | System and method for massively parallel processing database | |
CN110209735B (zh) | 数据库备份方法、数据库备份装置、计算设备和存储介质 | |
CN104156361B (zh) | 一种实现数据同步的方法及系统 | |
US20150213100A1 (en) | Data synchronization method and system | |
WO2021147935A1 (zh) | 一种日志回放方法及装置 | |
CN112084161B (zh) | 基于数据库的数据处理方法、装置以及可读存储介质 | |
CN111930788B (zh) | 操作请求的处理方法、装置、设备、可读存储介质及系统 | |
CN111414403A (zh) | 数据访问方法和装置、数据存储方法和装置 | |
EP3438845A1 (en) | Data updating method and device for a distributed database system | |
CN113438275B (zh) | 数据迁移方法、装置、存储介质及数据迁移设备 | |
CN104750755A (zh) | 一种数据库主备切换后的数据回补方法及系统 | |
CN113918535B (zh) | 一种数据读取方法、装置、设备及存储介质 | |
CN115617571A (zh) | 一种数据备份方法、装置、系统、设备及存储介质 | |
CN111737331A (zh) | 一种数据库与对象存储的事务一致性处理方法及系统 | |
CN112800060A (zh) | 数据处理方法、装置、计算机可读存储介质及电子设备 | |
US12066999B1 (en) | Lock-free timestamp ordering for distributed transactions | |
CN116700906A (zh) | 一种数据库事务的处理方法及相关设备 | |
CN110928945A (zh) | 一种针对数据库的数据处理方法及装置,数据处理系统 | |
CN118312501B (zh) | 数据库版本回退方法、装置、电子设备及存储介质 | |
CN117076147B (zh) | 死锁检测方法、装置、设备和存储介质 | |
WO2024199464A1 (zh) | 数据库系统及其数据管理方法 | |
CN117171266B (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 |