Jak to zrobić we właściwy sposób? Czy po prostu skopiuję plik .sq3?
Co się stanie, jeśli w witrynie są użytkownicy, a plik jest zapisywany podczas kopiowania?
Jak to zrobić we właściwy sposób? Czy po prostu skopiuję plik .sq3?
Co się stanie, jeśli w witrynie są użytkownicy, a plik jest zapisywany podczas kopiowania?
Odpowiedzi:
Narzędzie wiersza poleceń sqlite3 zawiera .backup
polecenie dot .
Możesz połączyć się ze swoją bazą danych za pomocą:
sqlite3 my_database.sq3
i uruchom polecenie backup kropka z:
.backup backup_file.sq3
Zamiast interaktywnego połączenia z bazą danych możesz również wykonać kopię zapasową, a następnie zamknąć połączenie za pomocą
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
Tak czy inaczej wynikiem jest kopia nazwana backup_file.sq3
bazy danych my_database.sq3
.
Różni się od zwykłego kopiowania plików, ponieważ dba o wszystkich użytkowników aktualnie pracujących nad bazą danych. W bazie danych są ustawione odpowiednie blokady, więc kopia zapasowa jest wykonywana wyłącznie.
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup to najlepszy sposób.
sqlite3 my_database .backup my_database.back
możesz także wypróbować polecenie .dump, które daje możliwość zrzutu całej bazy danych lub tabel do pliku tekstowego. Jeśli określono TABLE, zrzuca tylko tabele pasujące do LIKE wzorca TABLE.
sqlite3 my_database .dump > my_database.back
Dobry sposób na wykonanie kopii archiwalnej przy użyciu funkcji dump and store. Rekonstruuj bazę danych w późniejszym czasie.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Sprawdź również to pytanie Czy polecenia SQLite3 .backup i .dump blokują bazę danych?
.backup
nie działa tak, jak pokazano powyżej („brak argumentu NAZWA_PLIKU w .backup”)
try {
final String inFileName = "/data/data/your app package/databases/db";
File dbFile = new File(inFileName);
FileInputStream fis = new FileInputStream(dbFile);
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/Backup";
File dir = new File(path);
if (!dir.exists()) dir.mkdirs();
String outFileName = path + "/filename"; // output file name
// Open the empty db as the output stream
OutputStream output = new FileOutputStream(outFileName);
// Transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
Toast.makeText(getActivity(), "Backup Successfully", 2).show();
// Close the streams
output.flush();
output.close();
fis.close();
}
catch (Exception e) {
e.printStackTrace();
}