Ich habe gelesen, dass WAL-Modus ermöglicht einem Benutzer Benutzer während einer Schreibsitzung zu lesen.
Daher sollte ich in der Lage sein, 3 Sitzungen zu haben, die Daten und eine schreibende Daten gleichzeitig lesen. Das klingt nach einer guten Sache für meinen Gebrauch, also dachte ich, ich sollte den Sitzungstyp definieren, damit das System weiß, ob diese Sitzung ein Leser ist oder ein Schreiber, der das Verbindungsflag verwendet.
http://php.net/manual/en/sqlite3.open.php#refsect1-sqlite3.open-parameters
Darin heißt es hier, dass, wenn die Sitzung nicht sauber geschlossen wird, dass die -shm
und -wal
Dateien werden trotz nicht entfernt
https://www.sqlite.org/tempfiles.html#write_ahead_log_wal_files
Nach einer Lesesitzung damit die temporären Dateien nicht entfernt werden, wurde die Sitzung bedeutet nicht sauber geschlossen Aufruf der Close-Funktion und Rückgabe true
, also warum werden die Dateien nicht gelöscht, wenn die SQLITE3_OPEN_READONLY
Flag verwenden? Sollte ich überhaupt eine Flagge benutzen?PHP SQLite PRAGMA journal_mode = wal und readonly Benutzer
Antwort
Sie haben SQLites Konzept von "Lesern" und "Schreibern" mit der Fähigkeit des PHP SQLite3-Treibers in Verbindung gebracht, eine Datei schreibgeschützt zu öffnen.
die SQLITE3_OPEN_READONLY
Flag verwenden wird PHP führen alle Operationen mit einer Warnung schreiben zu blockieren:
zu schreibenWarnung: SQLite3 :: exec(): Versuch, eine Nur-Lese-Datenbank in ...
Dies kann nützlich sein, wenn Sie sicherstellen möchten, dass keine Schreibvorgänge von Ihrer Anwendung aus vorgenommen werden können (möglicherweise als Sicherheitsmaßnahme). Aber es bezieht sich nicht auf die Leser und Autoren von SQLite.
Als pointed out by CL benötigen alle Prozesse, die auf die WAL-Modus-Datenbank zugreifen, Schreibzugriff. Dies ist ausdrücklich documented:
Auch wenn mehrere Prozesse sind eine WAL-Modus-Datenbank zugreifen zu können, dann werden alle Prozesse unter Benutzer oder Gruppen-IDs ausgeführt werden soll, die ihnen den Zugang zu den Datenbankdateien schreiben geben, die WAL-Datei, die geteilt Speicher -shm-Datei und das enthaltende Verzeichnis.
Und als Nachteil an der Spitze dieser Seite erwähnt:
Es ist nicht möglich schreibgeschützten Datenbanken WAL zu öffnen. Der Eröffnungsvorgang muss Schreibberechtigungen für die gemeinsam genutzte Speicherdatei "-shm" wal-index haben, wenn diese Datei vorhanden ist, oder den Schreibzugriff auf das Verzeichnis mit der Datenbankdatei, wenn die Datei "-shm" nicht existiert.
SQLite selbst entscheidet, ob ein Prozess ein Leser oder Schreiber ist, wenn er einen auszuführenden Befehl empfängt. Zum Beispiel, wenn ein einzelner Prozess eine SELECT
ausführt, dann eine INSERT
, dann eine SELECT
erneut es wechselt vom Leser zum Schreiber zum Leser. SQLite kümmert sich automatisch um die Sperrung (die möglicherweise andere Prozesse blockiert). (Beachten Sie, dass dies eine vereinfachte Erklärung ist, die bei verschiedenen Modi des Datenbankbetriebs sehr unterschiedlich sein kann.)
Für Ihre Zwecke sollten Sie nicht das SQLITE3_OPEN_READONLY
Flag verwenden.
- 1. PRAGMA journal_mode = OFF funktioniert nicht warum?
- 2. SqLite-Datenbank wird nicht geschlossen, wenn in Unicode und PRAGMA journal_mode gesetzt ist
- 3. SQLite WAL Leistungsverbesserung
- 4. -shm und -wal Dateien in SQLite DB
- 5. SQLite JDBC PRAGMA Einstellung
- 6. ios7 sqlite Datenbank mit WAL synchronisiert nie die Hauptdatenbankdatei
- 7. Readonly Verbindungen mit ADO.NET, SQLite und TSQL
- 8. db-shm und db-wal in SQLite-Datenbanken
- 9. SQL Server-Verbindungsserver zu SQLite-Datenbank - wie Pragma einzustellen?
- 10. SQLite3 Pragma synchrone nicht persistent
- 11. SQLiteDiskIOException: Festplatte E/A-Fehler (Code 1802):, während der Kompilierung: PRAGMA journal_mode
- 12. Schalten Sie den WAL-Dateimodus in RestKit Swift aus.
- 13. Mit Pragma-s von SQLite in C#
- 14. Wie kann ich das Schreiben im Voraus aktivieren in react-native sqlite Speicher
- 15. So öffnen Sie die SQLite-Verbindung im WAL-Modus
- 16. Wie Inhalte von SQLite 3.7 WAL-Datei in Hauptdatenbankdatei
- 17. Core Data WAL-Modus nicht persistent Änderungen an .db, nur .db-wal und .db-shm
- 18. Korrekte Schreibrechte für Apache-Benutzer mit SQLite
- 19. So verwenden Sie SQLite PRAGMA-Threads = X; in C++ Code
- 20. Änderung HBase WAL Standort
- 21. Tarantool wal Config
- 22. Platz zum Setzen der Option Sqlite PRAGMA in Django Projekt
- 23. Parameter-Bindung funktioniert nicht für SQLite PRAGMA table_info
- 24. Einfügen von Byte-Slice in sqlite-Blob
- 25. sqlite Benutzer/Passwort Sicherheit
- 26. Bedingungsvariable und #pragma pack Fehler
- 27. Wie schreibe ich in eine readonly sqlite Datei in UWP
- 28. pragma omp parallel zur vs. pragma omp
- 29. Wie Sqlite3 Wiederherstellung im WAL-Modus, wenn Systemabsturz
- 30. konvertieren pg_LSN zu wal postgresql
Bitte lesen Sie die [aktuelle Dokumentation] (http://www.sqlite.org/wal.html#readonly). –
Ich habe das gelesen, es ist nicht auf readonly Medien –
Die Medien selbst spielt keine Rolle, "Schreibzugriff ist erforderlich". –