CN111159156B - SQLite数据库的备份方法和装置 - Google Patents
SQLite数据库的备份方法和装置 Download PDFInfo
- Publication number
- CN111159156B CN111159156B CN201911407587.7A CN201911407587A CN111159156B CN 111159156 B CN111159156 B CN 111159156B CN 201911407587 A CN201911407587 A CN 201911407587A CN 111159156 B CN111159156 B CN 111159156B
- Authority
- CN
- China
- Prior art keywords
- lock
- database
- selected database
- incomplete
- successfully
- 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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种SQLite数据库的备份方法及装置,应用于存储设备中,所述方法包括:打开所述存储设备上的至少一个选定数据库;分别为所述至少一个选定数据库添加共享锁;备份所述至少一个选定数据库;释放所述至少一个选定数据库上的共享锁;关闭所述至少一个选定数据库。应用本申请的实施例,可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
Description
技术领域
本申请涉及网络通信技术领域,特别设计一种SQLite数据库的备份方法和装置。
背景技术
随着科技的飞速发展,企业及个人对各类信息系统、软件、网站的依赖性越来越高,数据库作为信息存储的核心技术担当着重要的角色。为了避免断电、设备异常卡死、版本升级不兼容、操作错误等造成数据库中存储的数据丢失,数据库备份尤为重要。
SQLite数据库是目前常用的一种数据库。请参见图1,图1为SQLite数据库的备份方法,包括:
S11:打开源数据库。
S12:打开备份数据库。
S13:创建备份数据库对象。
S14:申请到共享锁后调用创建的备份数据库对象拷贝源数据库中未拷贝页面中的设定数量的页面到备份数据库中,确定未拷贝页面的数量是否为零,若确定未拷贝页面的数量大于零,则执行S15;若确定未拷贝页面的数量为零,则执行S16。
S15:释放共享锁后主动暂停备份设定时长,并监控在设定时长内是否有其他进程对源数据库执行写操作。设定时长可以但不限于设定为200毫秒,由于在设定时长内不会在源数据库上持有共享锁,其他业务进程可以对源数据执行写操作,若监控到其他进程对源数据库执行写操作,则需要重新备份整个源数据库,执行S14,将整个源数据库中的页面作为未拷贝页面,若未监控到其他进程对源数据库执行写操作,则执行S14,将源数据库中除去已拷贝页面之外的页面作为未拷贝页面。
S16:释放备份数据库对象。
S17:关闭备份数据库。
S18:关闭源数据库。
上述方法中,如果在设定时长内有某个进程长时间频繁对源数据库执行写操作,可能导致S14与S15不断切换,而无法成功备份源数据库。因此,上述SQLite数据库的备份方法存在漏洞,无法确保成功备份源数据库。
发明内容
有鉴于此,本申请提供一种SQLite数据库的备份方法和装置,以解决相关技术中存在漏洞,无法确保成功备份源数据库的问题。
具体地,本申请是通过如下技术方案实现的:
一种SQLite数据库的备份方法,应用于存储设备中,所述方法包括:
打开所述存储设备上的至少一个选定数据库;
分别为所述至少一个选定数据库添加共享锁;
备份所述至少一个选定数据库;
释放所述至少一个选定数据库上的共享锁;
关闭所述至少一个选定数据库。
一种SQLite数据库的备份装置,应用于存储设备中,所述装置包括:
第一打开模块,用于打开所述存储设备上的至少一个选定数据库;
添加模块,用于分别为所述至少一个选定数据库添加共享锁;
备份模块,用于备份所述至少一个选定数据库;
第一释放模块,用于释放所述至少一个选定数据库上的共享锁;
关闭模块,用于关闭所述至少一个选定数据库。
一种电子设备,所述电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存储的程序时,实现上述的方法步骤。
一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法步骤。
由以上本申请提供的技术方案可见,打开存储设备上的至少一个选定数据库后,分别为至少一个选定数据库添加共享锁,备份至少一个选定数据库后,才会释放至少一个选定数据库上的共享锁,关闭至少一个选定数据库,由于可以为至少一个选定数据库中的每个选定数据库申请到共享锁,也就可以确保此时没有一个选定数据库正在执行写操作,从而可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
附图说明
图1为相关技术中示出的一种SQLite数据库的备份方法的流程图;
图2为本申请示出的一种SQLite数据库的备份方法的流程图;
图3为本申请示出的一种SQLite数据库的写操作方法的流程图;
图4为本申请示出的一种SQLite数据库的备份装置的结构示意图;
图5为本申请示出的一种电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了解决上述问题,本发明实施例提供了一种SQLite数据库的备份方法,以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。请参见图2,图2为本申请示出的一种SQLite数据库的备份方法的流程图,应用于存储设备的备份进程中。
S21:打开存储设备上的至少一个选定数据库。
存储设备上通常会包括多个数据库,可以备份其中的一个或多个数据库,这些数据库可以定义为选定数据库。
由于有些数据库会出现同步修改的情况,例如:A配置修改时需要同步修改a.db数据库的tb_a表中a字段及b.db数据库的tb_b表中的b字段,为了避免同步修改的数据库逐个备份导致备份数据库中出现a.db及b.db中一个记录已更新,而另一个记录未更新的配置不一致现象,因此,同步修改的两个数据库必须同时备份,这两个数据库可以确定选定数据库,之后可以联合打开存储设备上所有的选定数据库。具体可以打开数据库函数接口中打开数据库后返回的数据库句柄中包括的每个数据库。
S22:分别为至少一个选定数据库添加共享锁。
调用封装好的设置数据库共享锁函数,分别为至少一个选定数据库添加共享锁,由于共享锁与排他锁是互斥的,从而可以确保写数据库操作不能将持有的锁升级到排它锁实现将写在缓存中的信息写到数据库中,相当于写操作暂时停留在写缓存阶段,因此添加共享锁后可以保证存储设备上没有进程再执行向这些选定数据库中写信息。
S23:备份至少一个选定数据库。
备份的方式有很多种,可以自行编写备份函数,也可以使用SQLite数据库的备份函数或通过shell的复制命令实现备份。
S24:释放至少一个选定数据库上的共享锁。
备份完所有选定数据库后,为了其他业务进程可以使用这些选定数据库,需要及时释放这些选定数据库上的共享锁。
S25:关闭至少一个选定数据库。
由以上本申请提供的技术方案可见,打开存储设备上的至少一个选定数据库后,分别为至少一个选定数据库添加共享锁,备份至少一个选定数据库后,才会释放至少一个选定数据库上的共享锁,关闭至少一个选定数据库,由于可以为至少一个选定数据库中的每个选定数据库申请到共享锁,也就可以确保此时没有一个选定数据库正在执行写操作,从而可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
具体的,上述S21中的分别为至少一个选定数据库添加共享锁,实现过程具体包括:
轮询至少一个选定数据库,为轮询到的选定数据库添加共享锁,将未成功添加共享锁的选定数据库的标识保存在未完成链表中,并将添加次数加1;
确定未完成链表是否为空、以及添加次数是否达到设定阈值;
若确定未完成链表不为空且添加次数未达到设定阈值,则轮询未完成链表,为轮询到的选定数据库添加共享锁,将成功添加共享锁的选定数据库的标识从未完成链表中删除,并将添加次数加1,执行确定未完成链表是否为空、以及添加次数是否达到设定阈值的步骤;
若确定未完成链表为空且添加次数未达到设定阈值,则确定成功为至少一个选定数据库添加共享锁。
SQLite数据库没有提供公共的加锁、解锁函数,因此为了保证打开的所有选定数据库可以同时填加共享锁或释放共享锁,需要封装设置数据库共享锁函数。
轮询至少一个选定数据库添加共享锁时,如果遇到加锁失败,先将该数据库的标识存储到未完成链表中,对下一个选定数据库加共享锁,轮询完至少一个选定数据库后,在对未完成链表中的选定数据库添加共享锁,因为在为其他选定数据库添加共享锁的这段时间很可能该选定数据库的锁资源已经被释放了,从而减少了等待时间,可以缩短添加共享锁的总时长。
还可以设置设定阈值,来确定添加次数是否达到设定阈值,若达到设定阈值,而未完成链表中还不为空,说明需要添加共享锁的选定数据库出现死锁,因为SQLite数据库中只有未决锁和排它锁不允许在数据库增加新的共享锁,而业务进程写数据库时在提交之前不会持有未决锁或者排它锁,而正常情况下提交事务是毫秒级的很快就会释放锁资源,可以成功添加共享锁,如果多次尝试添加共享锁一直失败则代表有进程特别频繁的写数据库或出现死锁情况,导致无法加共享锁,此时,可以发出共享锁添加失败提示信息,可以但不限于为:“当前系统中XXX(XXX为数据库名称,可以根据设置数据库共享锁函数输出参数获得)数据库正在被修改或存在死锁问题,请稍后重试或联系维护工程师处理。”。
一种可选的实施方式,上述方法还包括:
确定是否成功备份至少一个选定数据库;
若确定成功备份至少一个选定数据库,则在得到的备份文件中添加完整标记;
若确定未成功备份至少一个选定数据库,则发出未完成备份提示信息。
备份过程中由于存储设备断电或者某种操作导致备份进程被强制退出,出现只有部分数据库备份完成、甚至备份数据库中出现损坏的情况(Linux系统中执行写操作时进程被强制退出会概率出现文件损坏情况),为避免使用这种情况备份出来的数据库替换设备上的数据库会出现不一致的情况,可以使用完整标记文件来标记整个备份操作是否完整。备份文件对应的备份文件夹中存在完整标记,表示备份数据库是完整的;若备份文件夹中没有完整标记,向用户发出未完成备份提示信息。其中,完整标记可以但不限于设置在一个单独的文件中。
一种可选的实施方式,请参见图3,图3所示为一种SQLite数据库的写操作方法的流程图,应用于存储设备的业务进程中。
S31:打开存储设备上的待写入数据库。
需要执行写操作的数据库可以定义为待写入数据库。
S32:接收到至少一个写SQL语句后,执行预设命令开启事务。
如果业务进程写数据库时执行至少一个写SQL语句,为保证多个SQL语句的原子性、提高数据库操作执行效率则需开启事务。为保证多个进程同时操作同一数据库时不会出现并发写操作导致死锁现象,同时保证即使有业务进程长时间不关闭事务,备份进程也能够成功添加共享锁,业务进程可以执行预设命令开启事务,预设命令可以但不限于为BEGIN IMMEDIATE。
SQLite数据库有5种不同的锁状态:未加锁(UNLOCK)、共享(SHARED)、预留(RESERVERD)、未决(PENDING)和排他(EXCLUSIVE)。每个数据库连接在同一时刻只能处于其中一种状态,每种状态(未加锁状态除外)都有一种锁与之对应。假如,有事务1(隐式事务的写操作)和事务2(BEGIN IMMEDIATE事务的写操作),其相关技术中的锁转换分别流程为UNLOCKED->PENDING->SHARED->RESERVED->PENDING->EXCLUSIVE->UNLOCKED、RESERVED->PENDING->EXCLUSIVE->UNLOCKED。如果事务1先开始,并且在占用SHARED之后获取RESERVED之前,事务2占用了RESERVED,事务2因为事务1占用了SHARED,不能将PENDING升级到EXCLUSIVE,等待事务1释放SHARED;而此时事务1因为事务2占用了RESERVED或PENDING,不能将SHARED升级到RESERVED,等待事务2释放SHARED或PENDING,因而会发生死锁。因此写数据库操作隐式事务和BEGIN IMMEDIATE事务可能发生死锁问题。为兼容业务进程写操作不加事务情况(使用的为隐式事务),同时避免死锁发生,需修改隐式事务写操作锁转换流程,使隐式事务的写操作锁转换流程保持与BEGIN IMMEDIATE事务锁转换流程一致,即从获取RESERVED开始。
S33:依次申请事务对应的锁转换流程中包括的各个锁后,执行写操作。
此时写操作是在缓存中写入数据。
S34:确定是否成功完成写操作,若确定成功完成写操作,则执行S35;若确定未成功完成写操作,则执行S36。
S35:将写入的数据更新到待写入数据库中,执行S37。
该步骤是将S33中写入缓存的数据存储到待写入数据库的磁盘中。
S36:撤销写操作,执行S37。
由于未完成写操作,写入的数据是不完整的,因此,该次写操作无效,可以撤销写操作,也就是删除S33中写入缓存中的数据。
S37:释放最后一个锁后关闭待写入数据库。
具体的,上述S34中的依次申请事务对应的锁转换流程中包括的各个锁,实现过程具体包括:
针对事务对应的锁转换流程中包括的每个锁,执行:
确定当前锁的申请次数是否超过设定次数;
若确定当前锁的申请次数未超过设定次数,则等待设定时长后重新申请当前锁,确定是否成功申请当前锁,若确定成功申请当前锁,则确定在锁转换流程中当前锁是否是最后一个锁,若确定在锁转换流程中当前锁不是最后一个锁,则申请锁转换流程中当前锁之后的下一个锁;若确定未成功申请当前锁,则将当前锁的申请次数加1后,执行确定当前锁的申请次数是否超过设定次数的步骤;
若确定当前锁的申请次数超过设定次数,则发出当前锁的申请失败提示信息。
可以修改已有的打开数据库函数,设置数据库的繁忙处理函数,预先定义繁忙处理函数的设定时长和设定次数,调用打开数据库函数打开数据库时,若业务进程无法获取锁资源,不会立即返回失败,而是等待设定时长后重新尝试请求锁资源,直到获取锁资源成功或者达到设定次数发出当前锁的申请失败提示信息。其中,设定时长和设定次数可以根据实际需要进行设定,例如,设定时长可以为20毫秒、30毫秒等等,设定次数可以为2000次、2500次、3000次等等。
请参见图4,图4为本申请示出的一种SQLite数据库的备份装置的结构示意图,应用于存储设备中,该装置包括:
第一打开模块41,用于打开存储设备上的至少一个选定数据库;
添加模块42,用于分别为至少一个选定数据库添加共享锁;
备份模块43,用于备份至少一个选定数据库;
第一释放模块44,用于释放至少一个选定数据库上的共享锁;
关闭模块45,用于关闭至少一个选定数据库。
由以上本申请提供的技术方案可见,打开存储设备上的至少一个选定数据库后,分别为至少一个选定数据库添加共享锁,备份至少一个选定数据库后,才会释放至少一个选定数据库上的共享锁,关闭至少一个选定数据库,由于可以为至少一个选定数据库中的每个选定数据库申请到共享锁,也就可以确保此时没有一个选定数据库正在执行写操作,从而可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
具体的,添加模块,用于分别为至少一个选定数据库添加共享锁,具体用于:
轮询至少一个选定数据库,为轮询到的选定数据库添加共享锁,将未成功添加共享锁的选定数据库的标识保存在未完成链表中,并将添加次数加1;
确定未完成链表是否为空、以及添加次数是否达到设定阈值;
若确定未完成链表不为空且添加次数未达到设定阈值,则轮询未完成链表,为轮询到的选定数据库添加共享锁,将成功添加共享锁的选定数据库的标识从未完成链表中删除,并将添加次数加1,执行确定未完成链表是否为空、以及添加次数是否达到设定阈值的步骤;
若确定未完成链表为空且添加次数未达到设定阈值,则确定成功为至少一个选定数据库添加共享锁。
具体的,添加模块,还用于:
若确定未完成链表不为空且添加次数达到设定阈值,则发出共享锁添加失败提示信息。
一种可选的实施方式,备份模块,还用于:
确定是否成功备份至少一个选定数据库;
若确定成功备份至少一个选定数据库,则在得到的备份文件中添加完整标记;
若确定未成功备份至少一个选定数据库,则发出未完成备份提示信息。
一种可选的实施方式,上述装置还包括:
第二打开模块,用于打开存储设备上的待写入数据库;
第一执行模块,用于接收到至少一个写SQL语句后,执行预设命令开启事务;
第二执行模块,与依次申请事务对应的锁转换流程中包括的各个锁后,执行写操作;
确定模块,用于确定是否成功完成写操作;
处理模块,用于若确定成功完成写操作,则将写入的数据更新到待写入数据库中;若确定未成功完成写操作,则撤销写操作;
第二释放模块,用于释放最后一个锁后关闭待写入数据库。
具体的,上述第二执行模块,用于依次申请事务对应的锁转换流程中包括的各个锁,具体用于:
针对事务对应的锁转换流程中包括的每个锁,执行:
确定当前锁的申请次数是否超过设定次数;
若确定当前锁的申请次数未超过设定次数,则等待设定时长后重新申请当前锁,确定是否成功申请当前锁,若确定成功申请当前锁,则确定在锁转换流程中当前锁是否是最后一个锁,若确定在锁转换流程中当前锁不是最后一个锁,则申请锁转换流程中当前锁之后的下一个锁;若确定未成功申请当前锁,则将当前锁的申请次数加1后,执行确定当前锁的申请次数是否超过设定次数的步骤;
若确定当前锁的申请次数超过设定次数,则发出当前锁的申请失败提示信息。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请实施例还提供了一种电子设备,请参见图5所示,包括处理器510、通信接口520、存储器530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。
存储器530,用于存放计算机程序;
处理器510,用于执行存储器530上所存放的程序时,执行上述实施例中任一所述的SQLite数据库的备份方法。
通信接口520用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
由以上本申请提供的技术方案可见,打开存储设备上的至少一个选定数据库后,分别为至少一个选定数据库添加共享锁,备份至少一个选定数据库后,才会释放至少一个选定数据库上的共享锁,关闭至少一个选定数据库,由于可以为至少一个选定数据库中的每个选定数据库申请到共享锁,也就可以确保此时没有一个选定数据库正在执行写操作,从而可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
相应地,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的SQLite数据库的备份方法。
由以上本申请提供的技术方案可见,打开存储设备上的至少一个选定数据库后,分别为至少一个选定数据库添加共享锁,备份至少一个选定数据库后,才会释放至少一个选定数据库上的共享锁,关闭至少一个选定数据库,由于可以为至少一个选定数据库中的每个选定数据库申请到共享锁,也就可以确保此时没有一个选定数据库正在执行写操作,从而可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
Claims (12)
1.一种SQLite数据库的备份方法,应用于存储设备中,其特征在于,所述方法包括:
打开所述存储设备上的至少一个选定数据库;
分别为所述至少一个选定数据库添加共享锁;
备份所述至少一个选定数据库;
释放所述至少一个选定数据库上的共享锁;
关闭所述至少一个选定数据库;
分别为所述至少一个选定数据库添加共享锁,具体包括:
轮询所述至少一个选定数据库,为轮询到的选定数据库添加共享锁,将未成功添加共享锁的选定数据库的标识保存在未完成链表中,并将添加次数加1;
确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值;
若确定所述未完成链表不为空且所述添加次数未达到所述设定阈值,则轮询所述未完成链表,为轮询到的选定数据库添加共享锁,将成功添加共享锁的选定数据库的标识从所述未完成链表中删除,并将所述添加次数加1,执行所述确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值的步骤;
若确定所述未完成链表为空且所述添加次数未达到所述设定阈值,则确定成功为所述至少一个选定数据库添加共享锁。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述未完成链表不为空且所述添加次数达到所述设定阈值,则发出共享锁添加失败提示信息。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定是否成功备份所述至少一个选定数据库;
若确定成功备份所述至少一个选定数据库,则在得到的备份文件中添加完整标记;
若确定未成功备份所述至少一个选定数据库,则发出未完成备份提示信息。
4.根据权利要求1-3任一所述的方法,其特征在于,所述方法还包括:
打开所述存储设备上的待写入数据库;
接收到至少一个写SQL语句后,执行预设命令开启事务;
依次申请所述事务对应的锁转换流程中包括的各个锁后,执行写操作;
确定是否成功完成所述写操作;
若确定成功完成所述写操作,则将写入的数据更新到所述待写入数据库中;若确定未成功完成所述写操作,则撤销所述写操作;
释放最后一个锁后关闭所述待写入数据库。
5.根据权利要求4所述的方法,其特征在于,依次申请所述事务对应的锁转换流程中包括的各个锁,具体包括:
针对所述事务对应的锁转换流程中包括的每个锁,执行:
确定当前锁的申请次数是否超过设定次数;
若确定所述当前锁的申请次数未超过所述设定次数,则等待设定时长后重新申请所述当前锁,确定是否成功申请所述当前锁,若确定成功申请所述当前锁,则确定在所述锁转换流程中所述当前锁是否是最后一个锁,若确定在所述锁转换流程中所述当前锁不是最后一个锁,则申请所述锁转换流程中所述当前锁之后的下一个锁;若确定未成功申请所述当前锁,则将所述当前锁的申请次数加1后,执行所述确定当前锁的申请次数是否超过设定次数的步骤;
若确定所述当前锁的申请次数超过所述设定次数,则发出所述当前锁的申请失败提示信息。
6.一种SQLite数据库的备份装置,应用于存储设备中,其特征在于,所述装置包括:
第一打开模块,用于打开所述存储设备上的至少一个选定数据库;
添加模块,用于分别为所述至少一个选定数据库添加共享锁;
备份模块,用于备份所述至少一个选定数据库;
第一释放模块,用于释放所述至少一个选定数据库上的共享锁;
关闭模块,用于关闭所述至少一个选定数据库;
所述添加模块,用于分别为所述至少一个选定数据库添加共享锁,具体用于:
轮询所述至少一个选定数据库,为轮询到的选定数据库添加共享锁,将未成功添加共享锁的选定数据库的标识保存在未完成链表中,并将添加次数加1;
确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值;
若确定所述未完成链表不为空且所述添加次数未达到所述设定阈值,则轮询所述未完成链表,为轮询到的选定数据库添加共享锁,将成功添加共享锁的选定数据库的标识从所述未完成链表中删除,并将所述添加次数加1,执行所述确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值的步骤;
若确定所述未完成链表为空且所述添加次数未达到所述设定阈值,则确定成功为所述至少一个选定数据库添加共享锁。
7.根据权利要求6所述的装置,其特征在于,所述添加模块,还用于:
若确定所述未完成链表不为空且所述添加次数达到所述设定阈值,则发出共享锁添加失败提示信息。
8.根据权利要求6所述的装置,其特征在于,所述备份模块,还用于:
确定是否成功备份所述至少一个选定数据库;
若确定成功备份所述至少一个选定数据库,则在得到的备份文件中添加完整标记;
若确定未成功备份所述至少一个选定数据库,则发出未完成备份提示信息。
9.根据权利要求6-8任一所述的装置,其特征在于,所述装置还包括:
第二打开模块,用于打开所述存储设备上的待写入数据库;
第一执行模块,用于接收到至少一个写SQL语句后,执行预设命令开启事务;
第二执行模块,与依次申请所述事务对应的锁转换流程中包括的各个锁后,执行写操作;
确定模块,用于确定是否成功完成所述写操作;
处理模块,用于若确定成功完成所述写操作,则将写入的数据更新到所述待写入数据库中;若确定未成功完成所述写操作,则撤销所述写操作;
第二释放模块,用于释放所述一个锁后关闭所述待写入数据库。
10.根据权利要求9所述的装置,其特征在于,所述第二执行模块,用于依次申请所述事务对应的锁转换流程中包括的各个锁,具体用于:
针对所述事务对应的锁转换流程中包括的每个锁,执行:
确定当前锁的申请次数是否超过设定次数;
若确定所述当前锁的申请次数未超过所述设定次数,则等待设定时长后重新申请所述当前锁,确定是否成功申请所述当前锁,若确定成功申请所述当前锁,则确定在所述锁转换流程中所述当前锁是否是最后一个锁,若确定在所述锁转换流程中所述当前锁不是最后一个锁,则申请所述锁转换流程中所述当前锁之后的下一个锁;若确定未成功申请所述当前锁,则将所述当前锁的申请次数加1后,执行所述确定当前锁的申请次数是否超过设定次数的步骤;
若确定所述当前锁的申请次数超过所述设定次数,则发出所述当前锁的申请失败提示信息。
11.一种电子设备,其特征在于,所述电子设备包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存储的程序时,实现权利要求1-5任一所述的方法步骤。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-5任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911407587.7A CN111159156B (zh) | 2019-12-31 | 2019-12-31 | SQLite数据库的备份方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911407587.7A CN111159156B (zh) | 2019-12-31 | 2019-12-31 | SQLite数据库的备份方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111159156A CN111159156A (zh) | 2020-05-15 |
CN111159156B true CN111159156B (zh) | 2023-04-28 |
Family
ID=70559865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911407587.7A Active CN111159156B (zh) | 2019-12-31 | 2019-12-31 | SQLite数据库的备份方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111159156B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114138808A (zh) * | 2021-12-07 | 2022-03-04 | 中国建设银行股份有限公司 | 数据更新方法、装置、电子设备及可读存储介质 |
CN116414907A (zh) * | 2021-12-30 | 2023-07-11 | 中兴通讯股份有限公司 | 数据库表的复制方法、装置、电子设备及存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2397393A1 (en) * | 2001-08-15 | 2003-02-15 | Iti, Inc. | Synchronization of plural databases in a database replication system |
CN101958783A (zh) * | 2010-10-15 | 2011-01-26 | 杭州迪普科技有限公司 | 一种单板间信息交互方法及虚拟中间层装置 |
CN102043838A (zh) * | 2009-10-09 | 2011-05-04 | 软件股份公司 | 主数据库系统、复制其数据的方法以及复制数据库系统 |
CN103677967A (zh) * | 2012-09-03 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种数据库的远程数据服务系统及任务调度方法 |
CN104166600A (zh) * | 2014-08-01 | 2014-11-26 | 腾讯科技(深圳)有限公司 | 数据备份与恢复方法及装置 |
CN104866577A (zh) * | 2015-05-26 | 2015-08-26 | 深圳市六度人和科技有限公司 | 一种基于嵌入式数据库的数据处理方法及装置 |
CN106155839A (zh) * | 2015-04-28 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种用于备份数据的方法与设备 |
CN106844363A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于数据库进行物理热备及数据恢复的方法和设备 |
CN107066480A (zh) * | 2016-12-20 | 2017-08-18 | 阿里巴巴集团控股有限公司 | 主备数据库的管理方法、系统及其设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7805423B1 (en) * | 1999-11-15 | 2010-09-28 | Quest Software, Inc. | System and method for quiescing select data modification operations against an object of a database during one or more structural operations |
US20130332910A1 (en) * | 2012-05-22 | 2013-12-12 | Nec Laboratories America, Inc. | Dynamic livelock analysis of multi-threaded programs |
US10417257B2 (en) * | 2015-10-21 | 2019-09-17 | Oracle International Corporation | Non-blocking database table alteration |
US10585874B2 (en) * | 2016-04-25 | 2020-03-10 | International Business Machines Corporation | Locking concurrent commands in a database management system |
CN106598748B (zh) * | 2016-12-22 | 2019-11-08 | 深圳市科脉技术股份有限公司 | 避免sqlite数据库并发访问时产生文件死锁的方法 |
US10503427B2 (en) * | 2017-03-10 | 2019-12-10 | Pure Storage, Inc. | Synchronously replicating datasets and other managed objects to cloud-based storage systems |
CN112988706A (zh) * | 2021-03-09 | 2021-06-18 | 广州小鹏汽车科技有限公司 | 数据管理方法、装置以及电子控制器 |
-
2019
- 2019-12-31 CN CN201911407587.7A patent/CN111159156B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2397393A1 (en) * | 2001-08-15 | 2003-02-15 | Iti, Inc. | Synchronization of plural databases in a database replication system |
CN102043838A (zh) * | 2009-10-09 | 2011-05-04 | 软件股份公司 | 主数据库系统、复制其数据的方法以及复制数据库系统 |
CN101958783A (zh) * | 2010-10-15 | 2011-01-26 | 杭州迪普科技有限公司 | 一种单板间信息交互方法及虚拟中间层装置 |
CN103677967A (zh) * | 2012-09-03 | 2014-03-26 | 阿里巴巴集团控股有限公司 | 一种数据库的远程数据服务系统及任务调度方法 |
CN104166600A (zh) * | 2014-08-01 | 2014-11-26 | 腾讯科技(深圳)有限公司 | 数据备份与恢复方法及装置 |
CN106155839A (zh) * | 2015-04-28 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 一种用于备份数据的方法与设备 |
CN104866577A (zh) * | 2015-05-26 | 2015-08-26 | 深圳市六度人和科技有限公司 | 一种基于嵌入式数据库的数据处理方法及装置 |
CN106844363A (zh) * | 2015-12-03 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 用于数据库进行物理热备及数据恢复的方法和设备 |
CN107066480A (zh) * | 2016-12-20 | 2017-08-18 | 阿里巴巴集团控股有限公司 | 主备数据库的管理方法、系统及其设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111159156A (zh) | 2020-05-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107077382B (zh) | 在多租户应用服务器环境中进行事务恢复的系统和方法 | |
US9563636B2 (en) | Allowing writes to complete without obtaining a write lock to a file | |
TW396306B (en) | A method of executing perform locked operation instructions for supporting recovery of data consistency if lost due to processor failure, and a method of recovering the data consistency after processor failure | |
US7823008B2 (en) | Maintaining consistency in a remote copy data storage system | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
US7330860B2 (en) | Fault tolerant mechanism to handle initial load of replicated object in live system | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
US9218251B1 (en) | Method to perform disaster recovery using block data movement | |
EP3200096A1 (en) | Remote replication method and apparatus based on duplicated data deletion | |
CN102971711A (zh) | 用于处理批工作单元的设备 | |
US9514170B1 (en) | Priority queue using two differently-indexed single-index tables | |
CN111159156B (zh) | SQLite数据库的备份方法和装置 | |
CN110753084B (zh) | 上链数据读取方法、缓存服务器及计算机可读存储介质 | |
CN113254536A (zh) | 数据库事务处理方法、系统、电子设备及存储介质 | |
CN115145697A (zh) | 数据库事务的处理方法、装置及电子设备 | |
CN110737716B (zh) | 一种数据写入的方法和装置 | |
US20170068603A1 (en) | Information processing method and information processing apparatus | |
CN111309799A (zh) | 数据合并的实现方法、装置、系统及存储介质 | |
CN110377614B (zh) | 一种分布式环境下的订单处理锁系统 | |
US20200225923A1 (en) | Abort installation of firmware bundles | |
WO2023111910A1 (en) | Rolling back database transaction | |
CN114036164A (zh) | 一种乐观锁和悲观锁组合的高并发交易加锁方法及系统 | |
CN112765126A (zh) | 数据库事务的管理方法、装置、计算机设备和存储介质 | |
US7502792B2 (en) | Managing database snapshot storage | |
EP4174645A1 (en) | Mirror image distribution method, electronic device, and storage medium |
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 |