none
SQLite 'Database is locked' RRS feed

  • Pregunta

  • Buenas a tod@s,

            Desarrollamos una aplicación en la que varios usuarios pueden trabajar a la vez en red sobre ella. Está desarrollada con VB.Net y tenemos como base de datos SQLite ver 3. Estamos usando para ello el System.Data.SQLite ADO Provider (Versión del archivo 1.0.66.0).

            El problema que tenemos es que, en ocasiones, la aplicación queda bloqueada totalmente al acceder a los datos, ya sea para consultar como para un cambio de datos en la misma. El error generado es 'Database is locked'. Esto nos ocurre cuando estamos realizando una consulta pesada sobre la base de datos...como por ejemplo un listado de almacén y otro usuario intenta realizar una operación sobre la base de datos. Es entonces cuando se arroja esa excepción aunque las tablas que intervienen no sean las mismas. Es como si toda la base de datos quedase bloqueada por el proceso que en ese momento lanza la conexión a la base de datos.

          - ¿Hay alguna opción para controlar este problema de concurrencia con SQLite?

          - Las mismas consultas sobre otra Base de Datos, además, son mucho más rápidas que sobre SQLite, ¿Existe alguna forma o tratamiento para acelerar las consultas sobre SQLite? Sabemos que es una Base de Datos que trabja directamente sobre el disco duro, aún así, alguna forma de acelerar las consultas?

           - Nos estamos planteando migrar a otro Gesto de Base de Datos ¿Cuál nos recomiendan viendo las necesidad que tenemos?

         

         Gracias por su atención, esperando las respuetas.
         Reciban un cordial saludo.


    David

    martes, 8 de julio de 2014 17:15

Todas las respuestas

  • Cuando solo vayas a hacer operaciones de lectura, abre tu SQLiteConnection en modo lectura:

    var str = "Data Source=c:\\midb.db;Version=3;Read Only=True;";
    var cnn = new SQLiteConnection(str);
    cnn.Open();
    // etc

    Nota el "Read Only=True" en la cadena de conexión. Tu operación intensiva de lectura/escritura sobre la BD la abres normal, y utilizas el modo lectura sólo para las operaciones de lectura que harás mientras se actualiza la BD.

    Saludos.



    Fernando A. Gómez F.
    fermasmas.wordpress.com
    Galería de ejemplos

    miércoles, 9 de julio de 2014 16:48