Pregunta ¿Qué son las extensiones .db-shm y .db-wal en bases de datos Sqlite?


Estoy viendo un comportamiento extraño con mi aplicación y el estado de su archivo de base de datos después de ejecutar algunas pruebas que cierran la base de datos, la eliminan y la reemplazan con un accesorio de prueba. Cuando examino el archivo de base de datos con una herramienta en mi PC de depuración, no coincide con lo que la aplicación en sí misma parece informar. Es posible que este extraño comportamiento esté relacionado con este error.

Me di cuenta de que hay dos archivos con el mismo nombre base que la base de datos (con la normal .db extensión.) Las extensiones de archivo son .db-shm y .db-wal, y cada uno es más nuevo que el .db fecha y hora del archivo

Supongo que estos son algunos tipos de archivos temporales. Sin embargo, me pregunto si la aplicación se termina, ¿no deberían eliminarse? Más importante aún, supongo que cualquier información que se almacena en ellos se actualiza dentro de la .db archivo antes de que el sistema operativo finalice la aplicación. ¿Es esto correcto?


32
2017-10-15 15:25


origen


Respuestas:


Estás en lo correcto, estos son archivos temporales creados por SQLite. Si está eliminando manualmente la base de datos principal, probablemente también deba eliminarlos. De lo que puedo deducir, el WAL es un reemplazo para el diario de reversión que permite que SQLite revierte los cambios cuando falla una transacción. Cómo los usa SQLite y por qué se guardan por tanto tiempo depende de los autores de SQLite, pero en general SQLite parece bastante sólida, así que no me preocuparía demasiado por ellos. Para más información eche un vistazo aquí:

http://www.sqlite.org/fileformat2.html#walindexformat

Estos archivos son una nueva característica de SQLite 3.7. No estoy seguro de si su existencia se relaciona con el error que señala, pero el informe de error sugiere una solución alternativa de todos modos.


21
2017-10-15 18:23