CN111190768B - 数据库执行错误恢复方法、数据库访问方法及装置 - Google Patents
数据库执行错误恢复方法、数据库访问方法及装置 Download PDFInfo
- Publication number
- CN111190768B CN111190768B CN201911358955.3A CN201911358955A CN111190768B CN 111190768 B CN111190768 B CN 111190768B CN 201911358955 A CN201911358955 A CN 201911358955A CN 111190768 B CN111190768 B CN 111190768B
- Authority
- CN
- China
- Prior art keywords
- node
- database
- sql statement
- executed
- nodes
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1458—Management of the backup or restore process
- G06F11/1469—Backup restoration techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据库执行错误恢复方法、数据库访问方法及装置,其中,该恢复方法包括:当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点;在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点;根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;输出修改节点后的所述SQL语句的计算流图,以使所述数据库通过执行修改节点后的所述SQL语句的计算流图实现回滚。通过上述方案能够保证数据库操作的事务原子性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据库执行错误恢复方法、数据库访问方法及装置。
背景技术
事务具有原子性、一致性、隔离性和持久性等特点。所谓原子性是指事务的整个过程如原子操作一样,最终要么全部成功,要么全部失败。这种原子性是从最终结果来看的,而从最终结果来看整个过程是不可分割的。数据库中的事务是指对数据库执行一批操作,这些操作最终要么全部执行成功,要么全部失败,不会存在部分成功的情况。
例如,用户A给用户B转账100元操作,操作的过程包括将A账户扣100元和给B账户加100元两个操作。如果事务满足原子性,那么最终只有两种结果:一种是,A账户减少100元,B账户增加100元,用户A给用户B转账100元操作成功;另一种是,A、B两个账户都没有发生变化,用户A给用户B转账100元操作失败。在执行转账100元操作的过程中,如果出现一个操作不成功,但另一个操作成功,就会违反事务的原子性,此时,就需要对另一个操作进行数据库回滚,否则,就会出现一个账户扣了钱而另一个账户没加钱,或一个账户加了钱而另外一个账户没扣钱的情况。
发明内容
有鉴于此,本发明提供了一种数据库执行错误恢复方法、数据库访问方法及装置,以保证数据库操作的事务原子性。
为了达到上述目的,本发明采用以下方案实现:
根据本发明实施例的一个方面,提供了一种数据库执行错误恢复方法,包括:当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点;在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点;根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;输出修改节点后的所述SQL语句的计算流图,以使所述数据库通过执行修改节点后的所述SQL语句的计算流图实现回滚。
在一些实施例中,在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点,包括:在数据库执行的计算流图中,依次查找每个已执行完的出度为零的节点的各级子节点,直到查找到入度为零的子节点,得到该已执行完的出度为零的节点所属SQL语句的所有节点。
在一些实施例中,当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点,包括:当数据库执行出现错误时,分别根据数据库执行的计算流图中节点的执行状态标识和出度信息确认节点是否已执行完和节点的出度是否为零。
在一些实施例中,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响之前,所述数据库执行错误恢复方法还包括:根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图。根据所述SQL语句的属性修改所述SQL语句的节点,包括:根据所述SQL语句的属性修改生成的所述SQL语句的计算流图中的节点。
在一些实施例中,根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图,包括:根据每个已执行完的出度为零的节点所属SQL语句的所有节点生成一条所述SQL语句的计算流图。
在一些实施例中,根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图,包括:在多个已执行完的出度为零的节点分别对应的SQL语句存在共同节点的情况下,根据多个所述SQL语句的所有节点生成一个相应的计算流图。
在一些实施例中,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响,包括:若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;若所述SQL语句为查询类型的语句,则放弃修改所述SQL语句的节点。
在一些实施例中,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,包括:若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点。
在一些实施例中,若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点,包括:若所述SQL语句为insert语句,确认所述SQL语句的value节点已执行完成,则将所述value节点所指向的insert节点修改为delete节点,将所述value节点修改为where节点,并将所述数据库执行所述SQL语句后返回的插入行id作为参数值填充至所述where节点;若所述SQL语句为update语句,确认所述SQL语句的set节点已执行完成,则将所述数据库执行所述SQL语句后返回的set旧值作为参数值填充至所述set节点;若所述SQL语句为delete语句,确认所述SQL语句的delete节点已执行完成,则将delete节点修改为insert节点,将指向所述delete节点的where节点修改为value节点,并将所述数据库执行所述SQL语句后返回的value值作为参数值填充至所述value节点。
在一些实施例中,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,还包括:若确认所述SQL语句的value节点未执行完成,则放弃修改所述value节点;若确认所述SQL语句的set节点未执行完成,则放弃修改所述set节点的参数值;若确认所述SQL语句的delete节点已执行完成,则放弃修改所述delete节点。
根据本发明实施例的另一个方面,提供了一种数据库访问方法,包括:接收多条SQL语句,根据所述多条SQL语句生成一个计算流图;输出所述计算流图,以使数据库执行所述计算流图;利用上述任一实施例所述的数据库执行错误恢复方法在所述数据库执行出现错误时对所述数据库进行回滚;输出执行出错的信息,或使所述数据库重新执行所述计算流图。
根据本发明实施例的又一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述方法的步骤。
根据本发明实施例的再一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述方法的步骤。
本发明实施例的数据库执行错误恢复方法、数据库访问方法、电子设备及计算机可读存储介质,能够在数据库执行产生错误的时候快速找到已执行的数据库操作,然后通过对已执行操作的数据库指令产生的计算流图子图并进行修改,产生新的计算流图子图交由数据库实现,从而能够快速的对数据库进行回滚操作,从而保证了数据库事务的原子性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是本发明一实施例的数据库执行错误恢复方法的流程示意图;
图2是本发明一实施例的数据库访问方法的流程示意图;
图3是本发明一具体实施例的数据库执行错误恢复方法的流程示意图;
图4是本发明一具体实施例中判断是否对数据库进行操作的方法流程示意图;
图5是本发明一具体实施例中数据库执行出错的场景示意图;
图6是本发明一具体实施例中修改计算子流图的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
需要预先说明的是,下述实施例或示例的描述或其中所提及的特征可以以相同或类似的方式,与其他实施例或示例中的特征组合,或替换其他实施例或示例中的特征,以形成可能的实施方式。另外,本文所使用的术语“包括/包含”是指特征、要素、步骤或组件的存在,但并不排除还存在一个或多个其他特征、要素、步骤或组件。
当数据库执行出错时,需要技术人员查看大量代码确定出错的操作和已执行完的操作,以实现对数据库执行回滚操作,而查找过程非常繁琐且容易遗漏。
为了能够准确、快速地实现对数据库执行回滚,本发明实施例提供了一种数据库执行错误恢复方法,基于计算流图实现对数据库回滚操作。其中计算流图包括节点和有向边,每个节点可以代表一个从语法树中获得的关键字所生成的节点,每一条有向边可以代表一种节点直接的拓扑关系。
图1是本发明一实施例的数据库执行错误恢复方法的流程示意图。如图1所示,该数据库执行错误恢复方法可包括以下步骤S110至步骤S140。
下面将对步骤S110至步骤S140的具体实施方式进行详细说明。
步骤S110:当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点。
在数据库执行过程中,可以利用计算流图记录执行日志。例如,在计算流图中的节点尚未执行时,该节点可以有尚未执行的执行状态标识或者执行状态标识为空;在计算流图中的节点执行成功时,可以将该节点添加执行完成的执行状态标识,或者将尚未执行的执行状态标识更改为执行完成的执行状态标识;在计算流图中的节点执行错误时,可以给该节点添加执行出错的执行状态标识。
在一些实施例中,可以利用给计算流图中的节点添加的标识,来查找已执行完成且出度为零的节点。
示例性地,上述步骤S110,即,当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点,具体地,可包括步骤:当数据库执行出现错误时,分别根据数据库执行的计算流图中节点的执行状态标识和出度信息确认节点是否已执行完和节点的出度是否为零。
在计算流图中,若节点的出度为零,则说明该节点不指向任何其他节点,即没有父节点,是某条SQL语句的最后一个节点。另外,执行状态标识的具体形式不做限定,只要能区分不同的执行状态即可。
该示例中,可以根据计算流图的执行顺序、执行顺序的逆顺序、或随机顺序判断节点的执行状态标识是否是已执行完,出度是否为零。
步骤S120:在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点。
若有已执行完的出度为零的节点,则说明有执行成功的SQL语句。另外,可以有一个或多个已执行完的出度为零的节点,相应地,可以有一条或多条SQL语句执行成功。对于存在多个已执行完的出度为零的节点的情况,可以分别或一同查找出各已执行完的出度为零的节点所属SQL语句的所有节点。
在一些实施例中,可以从已执行完的出度为零的节点开始沿节点执行顺序的反方向依次查找该节点的子节点,子节点的子节点,直到找到入度为零的子节点,则该已执行完的出度为零的节点所述的SQL语句的所有节点均已找到。
示例性地,该步骤S120,即,在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点,具体地,可包括步骤:在数据库执行的计算流图中,依次查找每个已执行完的出度为零的节点的各级子节点,直到查找到入度为零的子节点,得到该已执行完的出度为零的节点所属SQL语句的所有节点。
其中,该已执行完的出度为零的节点的子节点为一级子节点,一级子节点的子节点为二级子节点,以此类推,某级子节点的入度为零,则得到该已执行完的出度为零的节点的各级子节点。可以分别或并行查找各个已执行完的出度为零的节点的各级子节点,直到每个已执行完的出度为零的节点的某级子节点的入度为零。
SQL语句的所有节点可以包括相应的已执行完的出度为零的节点和其各级子节点。按计算流图的执行顺序执行节点操作时,可以是一个节点执行完后才执行其父节点,依次执行各级父节点,最终可以执行出度为零的节点。所以,当SQL语句的最后一个节点即出度为零的节点执行完时,该节点的各级子节点可以都已执行完毕。另外,在执行SQL语句的过程中,执行到某个节点出错,则可不执行后续节点而是报错。
步骤S130:根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响。
在上述步骤S130中,该根据所述SQL语句的属性(类型)可包括修改类型的语句和查询类型的语句。在此情况下,该步骤S130,即,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响,具体地,可包括:S131,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;S132,若所述SQL语句为查询类型的语句,则放弃修改所述SQL语句的节点。该步骤S131和步骤S132为两种情况,就SQL语句属性情况不同而言,不限定执行先后顺序。
其中,当SQL语句为修改类型的语句时,需要恢复修改内容,当SQL语句为查询类型的语句时,由于未对数据产生修改性影响,所以可以不用执行恢复操作,可以跳过或返回不用处理相关或同等效果地信息。
进一步地,上述步骤S131,即,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,更具体地,可包括步骤:S1311,若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点。
其中,反向操作是指能够消除操作影响的各种操作或包含参数值的操作,例如,insert的反向操作可包括delete操作,set新值的反向操作可以是set旧值。其中,该set旧值可以是执行set语句或set节点之前数据库中表数据的值,set新值可以是执行set语句或set节点的参数值。
更进一步地,上述步骤S1311,即,若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点,具体地,可包括:若所述SQL语句为insert语句,确认所述SQL语句的value节点已执行完成,则将所述value节点所指向的insert节点修改为delete节点,将所述value节点修改为where节点,并将所述数据库执行所述SQL语句后返回的插入行id作为参数值填充至所述where节点;和/或,若所述SQL语句为update语句,确认所述SQL语句的set节点已执行完成,则将所述数据库执行所述SQL语句后返回的set旧值作为参数值填充至所述set节点;和/或,若所述SQL语句为delete语句,确认所述SQL语句的delete节点已执行完成,则将delete节点修改为insert节点,将指向所述delete节点的where节点修改为value节点,并将所述数据库执行所述SQL语句后返回的value值作为参数值填充至所述value节点。
在另一些实施例中,上述步骤S1311,即,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,(与上述实施例相应地)还可包括:若确认所述SQL语句的value节点未执行完成,则放弃修改所述value节点;和/或,若确认所述SQL语句的set节点未执行完成,则放弃修改所述set节点的参数值;和/或,若确认所述SQL语句的delete节点已执行完成,则放弃修改所述delete节点。
在一些实施例中,在通过上述步骤S120查找到SQL语句的所有节点后,可以将包含查找到的这些节点提取出来生成计算子流图,用作SQL语句的计算流图。或者,可以将产生影响的那部分节点提取出来生成计算子流图交给数据库执行回滚操作。
示例性的,该步骤S130,即,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响之前,图1所示的方法还可包括步骤:S150,根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图。其中,SQL语句的计算流图是数据库执行的计算流图的计算子流图。
在此情况下,可以基于生成的计算子流图修改其中的节点来消除执行影响。
示例性地,该步骤S130,即,根据所述SQL语句的属性修改所述SQL语句的节点,具体的,可包括:根据所述SQL语句的属性修改生成的所述SQL语句的计算流图中的节点。
在其他实施例中,可以先在数据库执行地计算流图(可以是备份)中修改节点,然后再生成计算子流图。
进一步地,在一些实施例中,可以根据一个SQL语句的所有节点生成一个计算流图。示例性地,该步骤S150,即,根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图,具体地,可包括步骤:根据每个已执行完的出度为零的节点所属SQL语句的所有节点生成一条所述SQL语句的计算流图。
在另一些实施例中,可以将多个SQL语句的所有节点生成一个计算流图。示例性地,该步骤S150,具体地,可包括步骤:在多个已执行完的出度为零的节点分别对应的SQL语句存在共同节点的情况下,根据多个所述SQL语句的所有节点生成一个相应的计算流图。
该示例中,若已执行的不同两个SQL语句中存在共同的节点,则通过该示例生成的计算子流图中共同节点是合并在一起的,以此可以简化数据库回滚的操作过程。
步骤S140:输出修改节点后的所述SQL语句的计算流图,以使所述数据库通过执行修改节点后的所述SQL语句的计算流图实现回滚。
在该步骤S140之前,生成需要恢复操作的SQL语句的计算流图,即,数据库执行整体流程的计算子流图,然后,可以将该计算子流图发送给数据库执行,从而可以消除之前已执行的SQL语句的影响,从而实现回滚。其中,该数据库可以为传统软件数据库,或者可以是硬件数据库(或称为硬件)。
在一些实施例中,数据库执行错误恢复方法可包括步骤:(1)出现错误,查看执行流图,判断是否有已执行的数据库操作,如果没有就结束,因为没有对数据库操作,因此不需要数据回滚;(2)如果有已执行的数据库操作,选择出已执行的数据库操作生成对应的计算流图子图;(3)对子图进行修改,重新交由硬件实现,从而实现对数据库的回滚操作。
本实施例中,采用计算流图的方式记录执行日志,从而能够在出现错误的时候快速找出对数据库的已执行操作,并对已执行的计算流子图进行修改,重新交由硬件操作,从而实现对数据库的回滚操作。
图2是本发明一实施例的数据库访问方法的流程示意图。如图2所示,该数据库访问方法可包括以下步骤S210~步骤S240:
步骤S210:接收多条SQL语句,根据所述多条SQL语句生成一个计算流图;
步骤S220:输出所述计算流图,以使数据库执行所述计算流图;
步骤S230:利用本发明实施例所述的数据库执行错误恢复方法在所述数据库执行出现错误时对所述数据库进行回滚;
步骤S240:输出执行出错的信息,或使所述数据库重新执行所述计算流图。
该步骤S210中,当执行某一事务时,例如转账,会涉及多条SQL语句的操作,该多条SQL语句可以对应生成一个计算流图,例如,通过合并共同的节点得到一个总的计算流图。通过一个计算流图执行一个件事务可以较好地保证事务执行的原子性。该步骤S220中,事务的计算流图可以发送给数据库(例如,FPGA(Field Programmable Gate Array,现场可编程门阵列)、GPU(Graphics Processing Unit,图形处理器)等硬件数据库)以执行该事务。该步骤230中,若事务的计算流图执行过程中出错,则可以查找计算流图,利用上述实施例的方法恢复已执行的部分操作,从而实现回滚。该步骤240中,当有节点出错时,回滚后,可以报错并停止执行后续步骤,或者再次尝试执行原来的计算流图,可以直到达到一定次数或事务操作成功。
基于与上述实施例所述方法相同的发明构思,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一实施例所述的数据库执行错误恢复方法或上述任一实施例所述的数据库访问方法的步骤。该电子设备可以计算机、服务器、硬件等。其中,硬件(硬件数据库)可以为FPGA、GPU等。
另外,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一实施例所述的数据库执行错误恢复方法或上述任一实施例所述的数据库访问方法的步骤。
为使本领域技术人员更好地了解本发明,下面将以具体实施例说明本发明的实施方式。
图3是本发明一具体实施例的数据库执行错误恢复方法的流程示意图;图4是本发明一具体实施例中判断是否对数据库进行操作的方法流程示意图;图5是本发明一具体实施例中数据库执行场景示意图;图6是本发明一具体实施例中修改计算子流图的示意图。
以张三给李四转账100元的场景为例,具体的SQL语句可为:
update accounttable set account=account-100where name="张三"
update accounttable set account=account+100where name="李四"
如图5所示,首先将SQL语句转换成为计算流图,具体每个节点的代表意思为:A代表update accounttable这个表;B和D代表where节点,选择出满足条件的行;C和E代表set节点,C对选出来的行进行减100元的操作,E对选出来的行进行加100元的操作。在计算流图执行的过程中,E节点执行出错,参见图3和图4,对数据库进行回滚操作的方法可包括以下步骤S1~S3。
S1:判断是否有已执行的数据库操作;如果有,则执行步骤S2;如果没有,则结束,因为没有对数据库操作,就不需要数据回滚。
如图4所示,具体判断方法包括以下步骤1~2:
1、判断是否存在已执行节点,若是,执行第2步,若否,返回结果为否;在场景示例中,根据图5所示的执行过程可以发现,有已执行节点。因此执行第2步;
2、判断已执行节点所属SQL语句的属性;
如果是insert语句,判断是否执行完value节点,是的话返回结果为是,否的话返回结果为否;
如果是update语句,判断是否执行完set节点,是的话返回结果为是,否的话返回结果为否;
如果是delete语句,判断是否执行完delete节点,是的话返回结果为是,否的话返回结果为否;
如果是select语句就不需要判断,直接返回结果为否,因为select语句不对数据库进行修改。
在图5所示的场景中,已执行节点所属SQL语句为update语句,所以要判断是否执行完set语句,即为节点C。如果C执行完成就代表已经对数据库进行了操作,那么就需要对数据库进行回滚操作。
S2:选择出已执行的数据库操作生成对应的计算流图子图。
具体实现方法包括步骤:找出已执行节点C,通过依次寻找子节点,依次找出节点B和节点A,就可以生成相应的计算流图子图。
S3:将计算流图子图进行修改,然后交由硬件数据库执行,从而达到数据库回滚的操作。
参见图6,具体修改方法包括以下步骤1~2:
1、判断计算流图对应的SQL语句属性:
如果是update语句,则修改set节点,将硬件数据库返回结果中的set旧值填充到对应的set节点中;
如果是insert节点,则修改insert节点为delete节点,删除value节点,将硬件数据库返回结果中的rowid(插入的行的id)填充到delete语句中的where节点;
如果是delete语句,则修改成为insert节点,将where节点修改成为value节点,将硬件数据库返回结果中的value值填充value节点。
在图3所示的示例中,可视为update节点,因此只需要将set的旧值填充到set节点中即可。
2、将新的计算流图发送给硬件数据库执行,从而实现对数据库的回滚。
本实施例中,通过采用计算流图的方法对SQL语句进行日志记录,从而在产生错误的时候快速找到已执行的数据库操作,然后通过对已操作的数据库指令产生的计算流图子图进行修改,产生新的计算流图子图交由数据库实现,从而能够快速的对数据库进行回滚操作,从而保证了数据库事务的特性。
综上所述,本发明实施例的数据库执行错误恢复方法、数据库访问方法、电子设备及计算机可读存储介质,在数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点,在数据库执行的计算流图中查找已执行完的出度为零的节点所属SQL语句的所有节点,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响,输出修改节点后的所述SQL语句的计算流图,以使所述数据库通过执行修改节点后的所述SQL语句的计算流图实现回滚,以此,能够在产生错误的时候快速找到已执行的节点,并通过修改已执行的SQL语句形成子流图交给数据库执行,能够保证数据库事务的原子性。
在本说明书的描述中,参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本发明的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种数据库执行错误恢复方法,其特征在于,包括:
当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点;
在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点;
根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;
输出修改节点后的所述SQL语句的计算流图,以使所述数据库通过执行修改节点后的所述SQL语句的计算流图实现回滚;
根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响之前,所述方法还包括:
根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图;
根据所述SQL语句的属性修改所述SQL语句的节点,包括:
根据所述SQL语句的属性修改生成的所述SQL语句的计算流图中的节点;
根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图,包括:
在多个已执行完的出度为零的节点分别对应的SQL语句存在共同节点的情况下,根据多个所述SQL语句的所有节点生成一个相应的计算流图。
2.如权利要求1所述的数据库执行错误恢复方法,其特征在于,在数据库执行的计算流图中,查找已执行完的出度为零的节点所属SQL语句的所有节点,包括:
在数据库执行的计算流图中,依次查找每个已执行完的出度为零的节点的各级子节点,直到查找到入度为零的子节点,得到该已执行完的出度为零的节点所属SQL语句的所有节点。
3.如权利要求1所述的数据库执行错误恢复方法,其特征在于,当数据库执行出现错误时,查找数据库执行的计算流图中已执行完的出度为零的节点,包括:
当数据库执行出现错误时,分别根据数据库执行的计算流图中节点的执行状态标识和出度信息确认节点是否已执行完和节点的出度是否为零。
4.如权利要求1所述的数据库执行错误恢复方法,其特征在于,根据已执行完的出度为零的节点所属SQL语句的所有节点生成所述SQL语句的计算流图,包括:
根据每个已执行完的出度为零的节点所属SQL语句的所有节点生成一条所述SQL语句的计算流图。
5.如权利要求1所述的数据库执行错误恢复方法,其特征在于,根据所述SQL语句的属性修改所述SQL语句的节点,以消除执行所述SQL语句的节点对数据库所产生的影响,包括:
若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,以消除执行所述SQL语句的节点对数据库所产生的影响;
若所述SQL语句为查询类型的语句,则放弃修改所述SQL语句的节点。
6.如权利要求5所述的数据库执行错误恢复方法,其特征在于,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,包括:
若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点。
7.如权利要求6所述的数据库执行错误恢复方法,其特征在于,若所述SQL语句为修改类型的语句,则根据所述数据库返回信息将所述SQL语句的节点修改为执行反向操作的节点,包括:
若所述SQL语句为insert语句,确认所述SQL语句的value节点已执行完成,则将所述value节点所指向的insert节点修改为delete节点,将所述value节点修改为where节点,并将所述数据库执行所述SQL语句后返回的插入行id作为参数值填充至所述where节点;
若所述SQL语句为update语句,确认所述SQL语句的set节点已执行完成,则将所述数据库执行所述SQL语句后返回的set旧值作为参数值填充至所述set节点;
若所述SQL语句为delete语句,确认所述SQL语句的delete节点已执行完成,则将delete节点修改为insert节点,将指向所述delete节点的where节点修改为value节点,并将所述数据库执行所述SQL语句后返回的value值作为参数值填充至所述value节点。
8.如权利要求7所述的数据库执行错误恢复方法,其特征在于,若所述SQL语句为修改类型的语句,则将所述SQL语句的节点修改为执行反向操作的节点,还包括:
若确认所述SQL语句的value节点未执行完成,则放弃修改所述value节点;
若确认所述SQL语句的set节点未执行完成,则放弃修改所述set节点的参数值;
若确认所述SQL语句的delete节点已执行完成,则放弃修改所述delete节点。
9.一种数据库访问方法,其特征在于,包括:
接收多条SQL语句,根据所述多条SQL语句生成一个计算流图;
输出所述计算流图,以使数据库执行所述计算流图;
利用如权利要求1至8任一项所述的数据库执行错误恢复方法在所述数据库执行出现错误时对所述数据库进行回滚;
输出执行出错的信息,或使所述数据库重新执行所述计算流图。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至9任一项所述方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至9任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911358955.3A CN111190768B (zh) | 2019-12-25 | 2019-12-25 | 数据库执行错误恢复方法、数据库访问方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911358955.3A CN111190768B (zh) | 2019-12-25 | 2019-12-25 | 数据库执行错误恢复方法、数据库访问方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190768A CN111190768A (zh) | 2020-05-22 |
CN111190768B true CN111190768B (zh) | 2020-10-16 |
Family
ID=70705838
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911358955.3A Active CN111190768B (zh) | 2019-12-25 | 2019-12-25 | 数据库执行错误恢复方法、数据库访问方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190768B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114397966B (zh) * | 2022-01-06 | 2024-09-24 | 上海沄熹科技有限公司 | 一种数据库的关键字纠错提示方法及装置 |
CN115309536B (zh) * | 2022-10-12 | 2023-01-24 | 青岛民航凯亚系统集成有限公司 | 高并发的彩票交易场景下数据一致性方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1959693A1 (en) * | 2007-02-19 | 2008-08-20 | Siemens Networks S.p.A. | Cross-layer error recovery optimisation in wireless systems |
CN102193991A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 基于oltp的数据修改方法、系统及图形数据库服务器 |
CN105608086A (zh) * | 2014-11-17 | 2016-05-25 | 中兴通讯股份有限公司 | 分布式数据库系统的事务处理方法及装置 |
CN107276814A (zh) * | 2017-06-30 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种分布式存储故障恢复信息管理系统及方法 |
CN109189613A (zh) * | 2018-09-20 | 2019-01-11 | 快云信息科技有限公司 | 一种数据库数据恢复方法及相关装置 |
CN109740916A (zh) * | 2018-12-28 | 2019-05-10 | 中科驭数(北京)科技有限公司 | 基于计算流图的时间序列处理方法、装置和存储介质 |
CN110232057A (zh) * | 2019-05-29 | 2019-09-13 | 掌阅科技股份有限公司 | 数据回滚方法、电子设备、存储介质 |
CN110427427A (zh) * | 2019-08-02 | 2019-11-08 | 北京快立方科技有限公司 | 一种通过引脚桥接实现全局事务分布式处理方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017146886A1 (en) * | 2016-02-23 | 2017-08-31 | Mayo Foundation For Medical Education And Research | Ultrasound blood flow imaging |
CN111190918B (zh) * | 2019-12-25 | 2020-12-08 | 中科驭数(北京)科技有限公司 | 基于计算流图的数据库访问方法及装置 |
-
2019
- 2019-12-25 CN CN201911358955.3A patent/CN111190768B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1959693A1 (en) * | 2007-02-19 | 2008-08-20 | Siemens Networks S.p.A. | Cross-layer error recovery optimisation in wireless systems |
CN102193991A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 基于oltp的数据修改方法、系统及图形数据库服务器 |
CN105608086A (zh) * | 2014-11-17 | 2016-05-25 | 中兴通讯股份有限公司 | 分布式数据库系统的事务处理方法及装置 |
CN107276814A (zh) * | 2017-06-30 | 2017-10-20 | 郑州云海信息技术有限公司 | 一种分布式存储故障恢复信息管理系统及方法 |
CN109189613A (zh) * | 2018-09-20 | 2019-01-11 | 快云信息科技有限公司 | 一种数据库数据恢复方法及相关装置 |
CN109740916A (zh) * | 2018-12-28 | 2019-05-10 | 中科驭数(北京)科技有限公司 | 基于计算流图的时间序列处理方法、装置和存储介质 |
CN110232057A (zh) * | 2019-05-29 | 2019-09-13 | 掌阅科技股份有限公司 | 数据回滚方法、电子设备、存储介质 |
CN110427427A (zh) * | 2019-08-02 | 2019-11-08 | 北京快立方科技有限公司 | 一种通过引脚桥接实现全局事务分布式处理方法 |
Non-Patent Citations (2)
Title |
---|
"嵌入式数据库恢复算法研究";陈敬炜;《中国优秀硕士学位论文全文数据库 信息科技辑》;20150315(第03期);第I138-126页 * |
"达梦嵌入式数据库恢复机制研究";胡进;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130715(第07期);第I137-171页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111190768A (zh) | 2020-05-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391628B (zh) | 数据同步方法及装置 | |
EP3120261B1 (en) | Dependency-aware transaction batching for data replication | |
US9135287B2 (en) | Distributed, transactional key-value store | |
CN107515874B (zh) | 一种分布式非关系型数据库中同步增量数据的方法与设备 | |
US9672244B2 (en) | Efficient undo-processing during data redistribution | |
US10866866B2 (en) | Query fault processing method and processing apparatus | |
US10108658B1 (en) | Deferred assignments in journal-based storage systems | |
JPH04229374A (ja) | 部品表処理およびプロジェクトネットワーク処理のための方法およびシステム | |
CN111190768B (zh) | 数据库执行错误恢复方法、数据库访问方法及装置 | |
CN110287170B (zh) | 数据库升级方法、状态数据调用方法、设备和存储介质 | |
CN110597821B (zh) | 数据仓库表结构变更方法及装置 | |
CN110706101A (zh) | 在区块链中并发执行交易的方法和装置 | |
US6944635B2 (en) | Method for file deletion and recovery against system failures in database management system | |
CN112559496B (zh) | 一种分布式数据库事务原子性实现方法及装置 | |
CN117541385A (zh) | 一种基于关联规则项的频繁金融交易挖掘方法和装置 | |
US7051051B1 (en) | Recovering from failed operations in a database system | |
CN112463857A (zh) | 基于关系数据库支持回溯数据查询的数据处理方法及系统 | |
JP2023546818A (ja) | データベースシステムのトランザクション処理方法、装置、電子機器、及びコンピュータプログラム | |
CN113391956A (zh) | 一种双园区的数据校验方法及装置 | |
Bernasconi et al. | Index-resilient zero-suppressed bdds: Definition and operations | |
CN116700635B (zh) | 固态硬盘数据恢复方法及固态硬盘 | |
CN112800185B (zh) | 移动终端中界面结点的匹配文本生成、匹配方法及装置 | |
CN118445212B (zh) | 一种软件测试驱动的代码生成方法和装置 | |
CN113672277B (zh) | 代码同步方法、系统、计算机设备和存储介质 | |
CN111209295B (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 |