Wie kann ich eine SQLite-Datenbank von schreibgeschützt in schreibgeschützt ändern?
Wenn ich die Update-Anweisung ausgeführt habe, habe ich immer Folgendes erhalten:
SQL-Fehler: Versuchen Sie, eine schreibgeschützte Datenbank zu schreiben
Die SQLite-Datei ist eine beschreibbare Datei im Dateisystem.
Antworten:
Diese Fehlermeldung kann mehrere Gründe haben:
Bei mehreren Prozessen ist die Datenbank gleichzeitig geöffnet ( siehe FAQ ).
Es gibt ein Plugin zum Komprimieren und Verschlüsseln der Datenbank. Die Datenbank kann nicht geändert werden.
In einer weiteren FAQ heißt es schließlich: "Stellen Sie sicher, dass das Verzeichnis mit der Datenbankdatei auch für den Benutzer beschreibbar ist, der das CGI-Skript ausführt." Ich denke, das liegt daran, dass die Engine mehr Dateien im Verzeichnis erstellen muss.
Das gesamte Dateisystem ist möglicherweise schreibgeschützt, beispielsweise nach einem Absturz.
Auf Unix-Systemen kann ein anderer Prozess die gesamte Datei ersetzen.
quelle
Ich habe dies gelöst, indem ich den Besitzer für alle Dateien in / db dir von root auf mich geändert habe.
Machen Sie es einfach
ls -l
in diesem Ordner, wenn einer der Filer im Besitz von ist,root
ändern Sie ihn einfach zu Ihnen, indem Sie:sudo chown user file
quelle
Dieser Fehler tritt normalerweise auf, wenn eine Anwendung bereits auf Ihre Datenbank zugreift und Sie versuchen, mit einer anderen Anwendung darauf zuzugreifen.
quelle
Bei Verwendung von Android.
Achten Sie darauf , die Erlaubnis zu schreiben , um Ihre hinzugefügt haben ,
EXTERNAL_STORAGE
um IhreAndroidManifest.xml
.Fügen Sie diese Zeile
AndroidManifest.xml
über und außerhalb Ihres<application>
Tags zu Ihrer Datei hinzu .Dadurch kann Ihre Anwendung auf die SD-Karte schreiben. Dies ist hilfreich, wenn
EXTERNAL_STORAGE
Sie Ihre Datenbank auf dem Gerät gespeichert haben.quelle
In der Linux-Befehlsshell habe ich Folgendes getan:
Wo enthält die Datenbankdatei.
Es klappt. Jetzt kann ich auf meine Datenbank zugreifen und Einfügeabfragen stellen.
quelle
(Diese Fehlermeldung ist normalerweise irreführend und in der Regel ein allgemeiner Berechtigungsfehler.)
Unter Windows
quelle
Ich hatte dieses Problem auch heute.
Dies wurde durch ActiveSync unter Windows Mobile verursacht. Der Ordner, in dem ich arbeitete, wurde synchronisiert, sodass der AS-Prozess von Zeit zu Zeit die DB-Datei abrief und diesen Fehler verursachte.
quelle
Geben Sie unter Linux Lese- / Schreibberechtigungen für den gesamten Ordner, der die Datenbankdatei enthält.
Außerdem blockiert SELinux möglicherweise den Schreibvorgang. Sie müssen die richtigen Berechtigungen festlegen.
In meiner SELinux Management-Benutzeroberfläche (unter Fedora 19) habe ich das Kontrollkästchen in der Zeile httpd_unified (Unify HTTPD-Behandlung aller Inhaltsdateien) aktiviert und konnte loslegen.
quelle
Um persönliche Erfahrungen auszutauschen, bin ich auf diesen Fehler gestoßen, der schließlich beide behebt. Könnte nicht unbedingt mit Ihrem Problem zusammenhängen, aber es scheint, dass dieser Fehler so allgemein ist, dass er auf Millionen von Dingen zurückgeführt werden kann.
Datenbankinstanz in einer anderen Anwendung geöffnet. Meine Datenbank schien sich in einem "gesperrten" Zustand zu befinden, sodass sie in den schreibgeschützten Modus überging. Ich konnte es aufspüren, indem ich die zweite Instanz der Anwendung stoppte, die die Datenbank gemeinsam nutzt.
Verzeichnisbaumberechtigung - Stellen Sie sicher, dass das Benutzerkonto nicht nur auf Dateiebene, sondern auf der gesamten oberen Verzeichnisebene bis zur Ebene / über Berechtigungen verfügt.
Vielen Dank
quelle
Ändern Sie unter Ubuntu den Eigentümer in die Apache-Gruppe und erteilen Sie die richtigen Berechtigungen (nein, es ist nicht 777):
Aktualisieren
Sie können die Berechtigungen auch für Gruppen und Benutzer festlegen .
quelle
Geben Sie in der Befehlszeile den Ordner ein, in dem sich Ihre Datenbankdatei befindet, und führen Sie den folgenden Befehl aus:
Dadurch werden allen Benutzern alle Berechtigungen erteilt.
quelle
Unter Windows:
tl; dr: Versuchen Sie erneut, die Datei zu öffnen.
Unser System hatte dieses Problem, und es war definitiv kein Berechtigungsproblem, da das Programm selbst die Datenbank die meiste Zeit als beschreibbar von vielen Threads aus öffnen konnte, aber gelegentlich (nur unter Windows, nicht unter OSX). Ein Thread würde diese Fehler erhalten, obwohl alle anderen Threads im Programm keine Schwierigkeiten hatten.
Wir stellten schließlich fest, dass die fehlgeschlagenen Threads nur diejenigen waren, die versuchten, die Datenbank sofort zu öffnen, nachdem ein anderer Thread sie geschlossen hatte (innerhalb von 3 ms). Wir spekulierten, dass das Problem auf die Tatsache zurückzuführen ist, dass Windows (oder die SQLite-Implementierung unter Windows) beim Schließen einer Datei nicht immer sofort die Dateiressourcen bereinigt. Wir haben dies umgangen, indem wir beim Öffnen eine Testschreibabfrage für die Datenbank ausgeführt haben (z. B. Erstellen und Löschen einer Tabelle mit einem albernen Namen). Wenn das Erstellen / Löschen fehlgeschlagen ist, haben wir 50 ms gewartet und es erneut versucht. Wir haben es wiederholt, bis wir erfolgreich waren oder 5 Sekunden vergangen sind.
Es funktionierte; Anscheinend musste nur genügend Zeit vorhanden sein, damit die Ressourcen auf die Festplatte übertragen werden konnten.
quelle
DB bearbeiten: Ich hatte Probleme beim Bearbeiten der Datenbank.
Am Ende musste ich sudo chown 'non root username' ts3server.sqlitedb
solange es nicht root war, konnte ich die Datei bearbeiten. Benutzername ist der Benutzername meines Nicht-Root-Kontos.
TeamSpeak automatisch starten: Als Ihr Nicht-Root-Konto wird
crontab -e
@reboot / path to ts3server / aka /home/ts3server/ts3server_startscript.sh gestartet
quelle
Im Projektpfad Terminal django_project #
quelle