首页
学习
活动
专区
工具
TVP
发布

Flush caches to disk mid-transaction

int sqlite3_db_cacheflush(sqlite3*);

如果在调用sqlite3_db_cacheflush(D)接口时在数据库连接D上打开写入事务,则当前未使用的pager-cache中的任何脏页都将写入磁盘。如果由活动SQL语句创建的数据库游标正在读取数据库游标,或者它是数据库文件的第1页(第1页始终“正在使用”),则可能正在使用脏页面。sqlite3_db_cacheflush(D)接口为所有模式(“main”,“temp”和所有连接的数据库)刷新缓存。

如果此功能需要在脏页面刷新到磁盘之前获取额外的数据库锁定,则它会这样做。如果无法立即获取这些锁并且配置了繁忙处理程序回调,则会以通常的方式调用它。如果仍然无法获得所需的锁定,则会跳过数据库并尝试刷新属于下一个(如果有的话)数据库的脏页面。如果因为无法获取锁而跳过任何数据库,但不会发生其他错误,则此函数将返回SQLITE_BUSY。

如果在将dirty的页面刷新到磁盘时发生任何其他错误(例如IO错误或内存不足情况),则会放弃处理,并立即将SQLite错误代码返回给调用方。

否则,如果没有错误发生,sqlite3_db_cacheflush()将返回SQLITE_OK。

此函数不会设置sqlite3_errcode()和sqlite3_errmsg()函数返回的数据库句柄错误代码或消息。

扫码关注腾讯云开发者

领取腾讯云代金券