是否可以在 sqlite3 中READ_ONLY数据库切换到 WAL 日记模式

Is it possible to switch READ_ONLY database to WAL journaling mode in sqlite3

本文关键字:数据库 WAL 模式 日记 ONLY sqlite3 READ 是否      更新时间:2023-10-16

我已经在READ_ONLY模式下打开了一个数据库连接。是否可以在运行时将数据库连接切换到日记模式 = WAL?

我正在使用以下代码切换到 WAL 模式

sqlite3* ppDb;
int res = sqlite3_open_v2("test.db",&ppDb,SQLITE_OPEN_READONLY,NULL,NULL, 0, NULL);
if(SQLITE_OK==res)
{
    rc = sqlite3_exec(m_dbHandle, "PRAGMA zipvfs_journal_mode=wal;", NULL,NULL, NULL))
}

sqlite3_exec语句后出现磁盘 I/O 错误。

谁能帮我解决这个问题。提前谢谢。

文档说:

无法打开只读 WAL 数据库。打开进程必须具有与数据库关联的"-shm"wal-index共享内存文件的写入权限(如果该文件存在(,或者如果"-shm"文件不存在,则对包含数据库文件的目录具有写入权限。

如果在 WAL 模式下重新打开数据库,则需要相同的写入权限。