Qual é a maneira correta de fazer isso? Devo apenas copiar o arquivo .sq3?
E se houver usuários no site e o arquivo estiver sendo gravado enquanto está sendo copiado?
Qual é a maneira correta de fazer isso? Devo apenas copiar o arquivo .sq3?
E se houver usuários no site e o arquivo estiver sendo gravado enquanto está sendo copiado?
Respostas:
A ferramenta de linha de comando sqlite3 apresenta o .backup
comando dot .
Você pode se conectar ao seu banco de dados com:
sqlite3 my_database.sq3
e execute o comando backup dot com:
.backup backup_file.sq3
Em vez da conexão interativa com o banco de dados, você também pode fazer o backup e fechar a conexão depois com
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
De qualquer maneira, o resultado é uma cópia nomeada backup_file.sq3
do banco de dados my_database.sq3
.
É diferente da cópia regular de arquivos, porque cuida de todos os usuários que estão trabalhando no banco de dados. Existem bloqueios adequados definidos no banco de dados, portanto, o backup é feito exclusivamente.
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup é a melhor maneira.
sqlite3 my_database .backup my_database.back
você também pode tentar o comando .dump, ele oferece a capacidade de despejar todo o banco de dados ou tabelas em um arquivo de texto. Se TABLE for especificado, apenas despeja tabelas que correspondem ao padrão LIKE TABLE.
sqlite3 my_database .dump > my_database.back
Uma boa maneira de fazer uma cópia de arquivo usando dump and store, reconstruir o banco de dados posteriormente.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Verifique também esta questão Os comandos SQLite3 .backup e .dump bloqueiam o banco de dados?
.backup
não funciona como mostrado acima ("argumento FILENAME ausente em .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();
}