Skip to content

Glosario

Registro de escritura anticipada (WAL)

Modo de registro de SQLite en el que los cambios confirmados se añaden a un archivo -wal aparte antes de copiarse a la base de datos principal en un checkpoint.

El registro de escritura anticipada (write-ahead log, WAL) es uno de los modos de registro de SQLite. En lugar de modificar directamente el archivo de la base de datos, SQLite añade cada página modificada, como una trama, a un archivo aparte llamado <database>-wal, y no toca el archivo principal hasta que un checkpoint copia las páginas de vuelta (sqlite.org). Los lectores combinan ambos: para cada página usan la versión confirmada más reciente del WAL si existe y, si no, la del archivo de la base. Un tercer archivo, -shm, es un índice de memoria compartida que SQLite puede reconstruir y que no contiene evidencia adicional.

El WAL empieza con una cabecera de 32 bytes (número mágico, tamaño de página, secuencia de checkpoint, dos valores de sal y sumas de comprobación). Cada trama es una cabecera de 24 bytes seguida de una página completa. La cabecera de trama registra el número de página, una marca de confirmación (commit), las sales y sumas de comprobación acumuladas, lo que permite a un lector ignorar las transacciones no confirmadas y las tramas que quedan de una generación anterior del WAL.

Por qué importa en una investigación

wpndatabase.db funciona en modo WAL. Por eso las notificaciones más recientes suelen estar solo en wpndatabase.db-wal, y una base copiada sin su WAL, o en otro momento, las pierde o mezcla estados. El WAL también puede contener varias versiones de la misma página: las tramas más antiguas pueden conservar filas de notificaciones que se borraron después, lo que las convierte en una fuente de recuperación junto con los freeblocks y la freelist.

Ejemplo

wpndatabase.db-wal
  Cabecera WAL (32 bytes): sal-1, sal-2 ...
  Trama 1: página 5, no es trama de commit
  Trama 2: página 4, trama de commit    -> transacción 1 confirmada
  Trama 3: página 4, trama de commit    -> versión más reciente de la página 4
  Trama 4: página 9, sin commit después -> ignorada

Aquí la página 4 existe en tres versiones: la del archivo, la de la trama 2 y la de la trama 3. El parser aplica las tramas 1 a 3, señala las filas que solo están en el WAL o que cambian en él, y talla las versiones antiguas en busca de filas borradas.

Términos relacionados

Carga la base con su -wal en el Windows Notification Parser y sigue la guía de adquisición para recolectar ambos en el mismo instante.