¿Cómo puedo cambiar una base de datos SQLite de solo lectura a lectura-escritura?
Cuando ejecuté la declaración de actualización, siempre obtuve:
Error de SQL: intente escribir una base de datos de solo lectura
El archivo SQLite es un archivo grabable en el sistema de archivos.
Respuestas:
Puede haber varias razones para este mensaje de error:
Varios procesos tienen la base de datos abierta al mismo tiempo ( consulte las preguntas frecuentes ).
Hay un complemento para comprimir y cifrar la base de datos. No permite modificar la base de datos.
Por último, otra pregunta frecuente dice: "Asegúrese de que el usuario que ejecuta el script CGI también pueda escribir en el directorio que contiene el archivo de la base de datos". Creo que esto se debe a que el motor necesita crear más archivos en el directorio.
Todo el sistema de archivos puede ser de solo lectura, por ejemplo, después de un bloqueo.
En los sistemas Unix, otro proceso puede reemplazar todo el archivo.
fuente
Resolví esto cambiando el propietario de root a mí en todos los archivos en / db dir.
Simplemente hágalo
ls -l
en esa carpeta, si alguno de los archivadores es propiedad deroot
simplemente cámbielo a usted, usando:sudo chown user file
fuente
Este error suele ocurrir cuando una aplicación ya accede a su base de datos y está intentando acceder a ella con otra aplicación.
fuente
Si usa Android.
Asegúrese de haber agregado el permiso para escribir a su
EXTERNAL_STORAGE
a suAndroidManifest.xml
.Agregue esta línea a su
AndroidManifest.xml
archivo arriba y fuera de su<application>
etiqueta.Esto permitirá que su aplicación escriba en la tarjeta SD. Esto ayudará si
EXTERNAL_STORAGE
es donde ha almacenado su base de datos en el dispositivo.fuente
En el shell de comandos de Linux, lo hice:
Donde contiene el archivo de la base de datos.
Funciona. Ahora puedo acceder a mi base de datos y realizar consultas de inserción.
fuente
(este mensaje de error suele ser engañoso y suele ser un error de permisos general)
En Windows
fuente
Hoy también tuve este problema.
Fue causado por ActiveSync en Windows Mobile: la carpeta en la que estaba trabajando estaba sincronizada, por lo que el proceso AS tomó el archivo de base de datos de vez en cuando y causó este error.
fuente
En Linux, otorgue permisos de lectura / escritura a toda la carpeta que contiene el archivo de base de datos.
Además, SELinux podría estar bloqueando la escritura. Debes configurar los permisos correctos.
En mi GUI de administración de SELinux (en Fedora 19), marqué la casilla en la línea etiquetada httpd_unified (Unificar el manejo HTTPD de todos los archivos de contenido), y estaba listo para comenzar.
fuente
Para compartir la experiencia personal que encontré con este error que finalmente corrigió ambos. Puede que no esté necesariamente relacionado con su problema, pero parece que este error es tan genérico que puede atribuirse a miles de cosas.
Instancia de base de datos abierta en otra aplicación. Mi base de datos parecía haber estado en un estado "bloqueado", por lo que pasó al modo de solo lectura. Pude rastrearlo deteniendo la segunda instancia de la aplicación que comparte la base de datos.
Permiso del árbol de directorio: asegúrese de asegurarse de que la cuenta de usuario tenga permiso no solo a nivel de archivo, sino a todo el nivel de directorio superior hasta el nivel /.
Gracias
fuente
En Ubuntu, cambie el propietario al grupo Apache y otorgue los permisos adecuados (no, no es 777):
Actualizar
También puede configurar los permisos para el grupo y el usuario .
fuente
Desde la línea de comando, ingrese la carpeta donde se encuentra su archivo de base de datos y ejecute el siguiente comando:
Esto otorgará todos los permisos a todos los usuarios.
fuente
En Windows:
tl; dr: Intente abrir el archivo nuevamente.
Nuestro sistema sufría este problema, y definitivamente no era un problema de permisos, ya que el programa en sí podría abrir la base de datos como escribible desde muchos subprocesos la mayor parte del tiempo, pero ocasionalmente (solo en Windows, no en OSX), un hilo obtendría estos errores aunque todos los demás hilos del programa no tuvieran dificultades.
Finalmente descubrimos que los subprocesos que fallaban eran solo aquellos que intentaban abrir la base de datos inmediatamente después de que otro subproceso la había cerrado (en 3 ms). Especulamos que el problema se debía al hecho de que Windows (o la implementación de sqlite en Windows) no siempre limpia de inmediato los recursos del archivo al cerrar un archivo. Lo solucionamos ejecutando una consulta de escritura de prueba contra la base de datos al abrir (por ejemplo, crear y luego soltar una tabla con un nombre tonto). Si la creación / eliminación falló, esperamos 50 ms y lo intentamos nuevamente, repitiendo hasta que lo logramos o transcurrieron 5 segundos.
Funcionó; aparentemente, solo necesitaba tiempo suficiente para que los recursos se descargaran en el disco.
fuente
Edite la base de datos: estaba teniendo problemas para editar la base de datos. Terminé teniendo que
sudo chown 'nombre de usuario no root' ts3server.sqlitedb
siempre que no fuera root, podría editar el archivo. El nombre de usuario es el nombre de usuario de mi cuenta no root.
Inicio automático TeamSpeak: como su cuenta no root
crontab -e
@reboot / ruta a ts3server / aka /home/ts3server/ts3server_startscript.sh start
fuente
En la ruta del proyecto Terminal django_project #
fuente