2011-10-15 15 views
32

Veo 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 por 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 this bug.¿Qué son las extensiones .db-shm y .db-wal en las bases de datos Sqlite?

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

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 dato almacenado en ellos se actualiza dentro del archivo .db antes de que el sistema operativo finalice la aplicación. ¿Es esto correcto?

+0

@ satur9nine eso es realmente extraño ... Me pidieron que actualizara el código de otra persona ... y durante las pruebas me di cuenta de que su uso de los datos centrales funcionaba bien con iOS 6.x ... pero luego cuando lo probé en iOS 7 .x .. resultó en los anteriores '.db-shm' y' .db-wal' .. ¿le pasó esto a alguien más? – abbood

+2

En iOS 7 parece que contienen todas las transacciones. El archivo db es una base de datos vacía para mí. Necesito tomar los tres archivos para ver los contenidos "reales" de la base de datos. –

Respuesta

21

Tiene razón, 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 obtener más información echar 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.

+2

Pero, ¿qué pasa con el archivo .shm? ¿Puedes arrojar algo de luz sobre eso? –

+0

Según el enlace: el archivo mmapped está en el mismo directorio que la base de datos y tiene el mismo nombre que la base de datos con un sufijo "-shm" adjunto. – satur9nine

Cuestiones relacionadas