SQLite数据库的备份方法和装置制造方法及图纸

技术编号:24168566 阅读:48 留言:0更新日期:2020-05-16 02:13
本申请提供一种SQLite数据库的备份方法及装置,应用于存储设备中,所述方法包括:打开所述存储设备上的至少一个选定数据库;分别为所述至少一个选定数据库添加共享锁;备份所述至少一个选定数据库;释放所述至少一个选定数据库上的共享锁;关闭所述至少一个选定数据库。应用本申请的实施例,可以消除相关技术中存在的漏洞,确保一次性备份完所有的选定数据库。

Backup method and device of SQLite database

【技术实现步骤摘要】
SQLite数据库的备份方法和装置
本申请涉及网络通信
,特别设计一种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:释放至少一个选定数据库上的共享锁。备份完所有选定数据库后,为了其他业务进程可以使用这些选定数据库,需要及时释放这些选定本文档来自技高网
...

【技术保护点】
1.一种SQLite数据库的备份方法,应用于存储设备中,其特征在于,所述方法包括:/n打开所述存储设备上的至少一个选定数据库;/n分别为所述至少一个选定数据库添加共享锁;/n备份所述至少一个选定数据库;/n释放所述至少一个选定数据库上的共享锁;/n关闭所述至少一个选定数据库。/n

【技术特征摘要】
1.一种SQLite数据库的备份方法,应用于存储设备中,其特征在于,所述方法包括:
打开所述存储设备上的至少一个选定数据库;
分别为所述至少一个选定数据库添加共享锁;
备份所述至少一个选定数据库;
释放所述至少一个选定数据库上的共享锁;
关闭所述至少一个选定数据库。


2.根据权利要求1所述的方法,其特征在于,分别为所述至少一个选定数据库添加共享锁,具体包括:
轮询所述至少一个选定数据库,为轮询到的选定数据库添加共享锁,将未成功添加共享锁的选定数据库的标识保存在未完成链表中,并将添加次数加1;
确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值;
若确定所述未完成链表不为空且所述添加次数未达到所述设定阈值,则轮询所述未完成链表,为轮询到的选定数据库添加共享锁,将成功添加共享锁的选定数据库的标识从所述未完成链表中删除,并将所述添加次数加1,执行所述确定所述未完成链表是否为空、以及所述添加次数是否达到设定阈值的步骤;
若确定所述未完成链表为空且所述添加次数未达到所述设定阈值,则确定成功为所述至少一个选定数据库添加共享锁。


3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述未完成链表不为空且所述添加次数达到所述设定阈值,则发出共享锁添加失败提示信息。


4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
确定是否成功备份所述至少一个选定数据库;
若确定成功备份所述至少一个选定数据库,则在得到的备份文件中添加完整标记;
若确定未成功备份所述至少一个选定数据库,则发出未完成备份提示信息。


5.根据权利要求1-4任一所述的方法,其特征在于,所述方法还包括:
打开所述存储设备上的待写入数据库;
接收到至少一个写SQL语句后,执行预设命令开启事务;
依次申请所述事务对应的锁转换流程中包括的各个锁后,执行写操作;
确定是否成功完成所述写操作;
若确定成功完成所述写操作,则将写入的数据更新到所述待写入数据库中;若确定未成功完成所述写操作,则撤销所述写操作;
释放所述最后一个锁后关闭所述待写入数据库。


6.根据权利要求5所述的方法,其特征在于,依次申请所述事务对应的锁转换流程中包括的各个锁,具体包括:
针对所述事务对应的锁转换流程中包括的每个锁,执行:
确定当前锁的申请次数是否超过设定次数;
若确定所述当前锁的申请次数未超过所述设定次数,则等待设定时长后重新申请所述当前锁,确定是否成功申请所述当前锁,若确定成功申请所述当前锁,则确定在所述锁转换流程中所述当前锁是否是最后一个锁,若确定在所述锁转换流程中所述当前锁不是最后一个锁,则申请所述锁转换流程中所述当前锁之后的下一个锁;若确定未成功申请所述当前锁,则将所述当前锁的申请次数加1后,执行所述确定当前锁的申请次数是否超过设定次数的步骤;
若确定所述当前锁的申请次数超过所述设定次数,则发出所述当前锁的申请失败提示信息。


7.一种SQLite数据库的备份装置,应用于存储设备中,其特征在于,所述装置包括:
第一打开模块,用于打开所述存储设备上的至少一个选定数据库;
添加模块,用于分别为所述至少一个选定数据库添加共享锁;
备份模块,用于备份所述至少一个选定数据库;
第一释放模块,用于释放所述至少一个选定数据库上的共享锁;
关闭模...

【专利技术属性】
技术研发人员:谢春平符志清
申请(专利权)人:杭州迪普科技股份有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1