ich habe eine Anwendung, die auf SQLite aufsetzt. Die Anwendung kann mehrere Mandanten haben und jeder Mandant hat eine eigene SQLite-Datenbank.
Jetzt geht es an den Backup. Ich hatte eigentlich gedacht, dass dies mit XCOPY ganz einfach klappt. Aber dem ist nicht so, denn wenn in der Datenbankdatei gerade eine Transaktion aktiv ist, kann XCOPY sehr wahrscheinlich zu dem hier führen: http://www.sqlite.org/howtocorrupt.html
SQLite hat auch eine Backup-API, aber die wurde wohl in dem .NET-Wrapper System.Data.SQLite vergessen.
Was mir als Workaround einfällt, wäre eine Transaktion auf die Datebank zu starten und dann XCOPY durchzuführen:
Hi, ist die Command Line Shell von SQLite eine Option? Ich habe es selbst nicht getestet, aber die müsste eigentlich mit .backup die besagte Api nutzen.
a) mit Shared Lock wie es auf der Hilfeseite beschrieben ist:
1. Establish a shared lock on the database file using the SQLite API (i.e. the shell tool). 2. Copy the database file using an external tool (for example the unix 'cp' utility or the DOS 'copy' command). 3. Relinquish the shared lock on the database file obtained in step 1.
Den Shared Lock bekommt man nicht durch Öffnen einer Transaktion sondern erst nach dem ersten Select:
"Note that the BEGIN command does not acquire any locks on the database. After a BEGIN command, a SHARED lock will be acquired when the first SELECT statement is executed."
Wichtig scheint hier also das SELECT (fehlt noch oben in deinem Codebeispiel).
b) Die hier beschriebenen C-Funktionen mit P-Invoke aufrufen, falls sie nicht im Wrapper enthalten sind.