位置: 编程技术 - 正文

SQLite学习手册(SQLite在线备份)

编辑:rootadmin

一、常用备份:

下面的方法是比较简单且常用的SQLite数据库备份方式,见如下步骤: 1). 使用SQLite API或Shell工具在源数据库文件上加共享锁。 2). 使用Shell工具(cp或copy)拷贝数据库文件到备份目录。 3). 解除数据库文件上的共享锁。 以上3个步骤可以应用于大多数场景,而且速度也比较快,然而却存在一定的刚性缺陷,如: 1). 所有打算在源数据库上执行写操作的连接都不得不被挂起,直到整个拷贝过程结束并释放文件共享锁。 2). 不能拷贝数据到in-memory数据库。 3). 在拷贝过程中,一旦备份数据库所在的主机出现任何突发故障,备份数据库可能会被破坏。 在SQLite中提供了一组用于在线数据库备份的APIs函数(C接口),可以很好的解决上述方法存在的不足。通过该组函数,可以将源数据库中的内容拷贝到另一个数据库,同时覆盖目标数据库中的数据。整个拷贝过程可以以增量的方式完成,在此情况下,源数据库也不需要在整个拷贝过程中都被加锁,而只是在真正读取数据时加共享锁。这样,其它的用户在访问源数据库时就不会被挂起。二、在线备份APIs简介:

SQLite提供了以下3个APIs函数用于完成此操作,这里仅仅给出它们的基本用法,至于使用细节可以参考SQLite官方网站"APIs Reference"( 1). 函数sqlite3_backup_init()用于创建sqlite3_backup对象,该对象将作为本次拷贝操作的句柄传给其余两个函数。 2). 函数sqlite3_backup_step()用于数据拷贝,如果该函数的第二个参数为-1,那么整个拷贝过程都将在该函数的一次调用中完成。 3). 函数sqlite3_backup_finish()用于释放sqlite3_backup_init()函数申请的资源,以避免资源泄露。 在整个拷贝过程中如果出现任何错误,我们都可以通过调用目的数据库连接的sqlite3_errcode()函数来获取具体的错误码。此外,如果sqlite3_backup_step()调用失败,由于sqlite3_backup_finish()函数并不会修改当前连接的错误码,因此我们可以在调用sqlite3_backup_finish()之后再获取错误码,从而在代码中减少了一次错误处理。见如下代码示例(来自SQLite官网):

三、高级应用技巧: 在上面的例子中,我们是通过sqlite3_backup_step()函数的一次调用完成了整个拷贝过程。该实现方式仍然存在之前说过的挂起其它写访问连接的问题,为了解决该问题,这里我们将继续介绍另外一种更高级的实现方式--分片拷贝,其实现步骤如下: 1). 函数sqlite3_backup_init()用于创建sqlite3_backup对象,该对象将作为本次拷贝操作的句柄传给其余两个函数。 2). 函数sqlite3_backup_step()被调用用于拷贝数据,和之前方法不同的是,该函数的第二个参数不再是-1,而是一个普通的正整数,表示每次调用将会拷贝的页面数量,如5。 3). 如果在函数sqlite3_backup_step()调用结束后,仍然有更多的页面需要被拷贝,那么我们将主动休眠ms,然后再重复步骤2). 4). 函数sqlite3_backup_finish()用于释放sqlite3_backup_init()函数申请的资源,以避免资源泄露。 在上述步骤3)中我们主动休眠ms,此期间,该拷贝操作不会在源数据库上持有任何读锁,这样其它的数据库连接在进行写操作时亦将不会被挂起。然而在休眠期间,如果另外一个线程或进程对源数据库进行了写操作,SQLite将会检测到该事件的发生,从而在下一次调用sqlite3_backup_step()函数时重新开始整个拷贝过程。唯一的例外是,如果源数据库不是in-memory数据库,同时写操作是在与拷贝操作同一个进程内完成,并且在操作时使用的也是同一个数据库连接句柄,那么目的数据库中数据也将被此操作同时自动修改。在下一次调用sqlite3_backup_step()时,也将不会有任何影响发生。   事实上,在SQLite中仍然提供了另外两个辅助性函数backup_remaining()和backup_pagecount(),其中前者将返回在当前备份操作中还有多少页面需要被拷贝,而后者将返回本次操作总共需要拷贝的页面数量。显而易见的是,通过这两个函数的返回结果,我们可以实时显示本次备份操作的整体进度,计算公式如下: Completion = % * (pagecount() - remaining()) / pagecount() 见以下代码示例(来自SQLite官网):

推荐整理分享SQLite学习手册(SQLite在线备份),希望有所帮助,仅作参考,欢迎阅读内容。

SQLite学习手册(SQLite在线备份)

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

SQLite 错误码整理 #defineSQLITE_OK0/*成功|Successfulresult*//*错误码开始*/#defineSQLITE_ERROR1/*SQL错误或丢失数据库|SQLerrorormissingdatabase*/#defineSQLITE_INTERNAL2/*SQLite内部逻辑错误|Internallo

SQLite3 API 编程手册 前序:...1一、版本...1二、基本编译...2三、SQLITE操作入门...2(1)基本流程...2(2)SQL语句操作...4(3)操作二进制...8(4)事务处理...四、给数据库加

SQLite3中的日期时间函数使用小结 importsqlite3conn=sqlite3.connect('/tmp/sqlite.db')cur=conn.cursor()接下来干嘛呢?建一张表吧。这里需要注意的是,SQLite不支持在创建表的同时创建索引,所以要分两

标签: SQLite学习手册(SQLite在线备份)

本文链接地址:https://www.jiuchutong.com/biancheng/312811.html 转载请保留说明!

上一篇:SQLite3 命令行操作指南

下一篇:SQLite 错误码整理(sqlcode错误码100)

  • 预提所得税的计税依据
  • 代销和委托代销区别
  • 房产税会计分录怎么写
  • 利税总额计算公式利润表怎么计算
  • 调整未分配利润影响所得税吗
  • 季度预缴能不能弥补亏损
  • 未过户的车辆对车辆影响
  • 结转当月材料采购成本的会计分录怎么做?
  • 增值税零税率发票预缴税额
  • 软件著作权销售好做吗
  • 总分公司能互相开票吗
  • 营业执照缴纳印花税贴花怎么缴纳
  • 2月的发票入在1月可以吗
  • 普通发票打歪了可以用吗
  • 印花税计入税金及附加什么时候开始
  • 建筑企业在工程所在地全额征收
  • 污泥处置费用怎么开票
  • 代理手续费税收分类编码
  • 建安行业核定征收企业所得税
  • 董事会会费计入哪里
  • 没有发生关联交易需要关联申报吗?
  • 用工会经费发放福利
  • 发票抬头开错跨月了怎么办?
  • 申报是不是就是报税
  • 关联方之间债务豁免账务处理
  • 购买公司付款会计分录
  • 华为鸿蒙系统怎么看安卓版本
  • win7防火墙设置不了
  • 社保缴费要和工龄一致吗
  • php实现的中秋博饼游戏之掷骰子并输出结果功能详解
  • 怎么更改定位位置信息
  • 使用PHP similar text计算两个字符串相似度
  • php的类
  • php23种设计模式
  • 鸿蒙系统怎么设置桌面小组件
  • 对公转账存款
  • kb4586853更新
  • mode exe
  • 高德地图api获取当前经纬度的城市地图
  • tepac接口
  • 我找到了这个
  • php通用分页类
  • php抓取网页图片
  • 如何解决Vue3没有代码提示问题?
  • system error
  • 在vue项目如何引入异步组件?
  • 公司垫付的工伤医药费怎么报销
  • db2之间的数据库迁移
  • 混合销售如何做会计分录
  • 今年利润弥补以前年度亏损如何记账
  • 金税盘怎么向分盘分配发票
  • 财务报表中的净资产在哪里
  • mysql如何做优化
  • 征税小规模纳税申报
  • 长期股权投资中同一控制和非同一控制的区别
  • 在建工程科目核算只针对固定资产吗
  • 在建工程项目包括
  • 营业账簿如何缴纳税款
  • 怎么看懂自己的收入纳税
  • 什么是大病医疗救助
  • 租写字楼水电费自己付吗
  • xp系统自带浏览器打不开网页
  • Windows Server 2008下的网络排错
  • ubuntu15.10中文版
  • wps2019视频
  • office2016formac更新了什么 新版macoffice软件功能一览
  • win8 开机
  • linux 测试工具
  • Linux系统中下载文件的wget命令操作实例
  • jQuery Mobile 和 Kendo UI 的比较
  • xml文件网络传输
  • 定制家具加盟品牌
  • android布局文件放在哪
  • shell脚本wc
  • unity官方插件
  • android studio绑定按钮
  • 房租收入影响个人所得税汇算
  • 福建省国税局领导班子介绍
  • 安徽省电子税务局怎么添加办税人员
  • 地铁发票如何取得
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设