¿Cuál es la forma correcta de hacerlo? ¿Simplemente copio el archivo .sq3?
¿Qué sucede si hay usuarios en el sitio y se está escribiendo el archivo mientras se copia?
¿Cuál es la forma correcta de hacerlo? ¿Simplemente copio el archivo .sq3?
¿Qué sucede si hay usuarios en el sitio y se está escribiendo el archivo mientras se copia?
Respuestas:
La herramienta de línea de comandos sqlite3 presenta el .backup
comando dot .
Puede conectarse a su base de datos con:
sqlite3 my_database.sq3
y ejecute el comando backup dot con:
.backup backup_file.sq3
En lugar de la conexión interactiva a la base de datos, también puede hacer la copia de seguridad y luego cerrar la conexión con
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
De cualquier manera, el resultado es una copia con el nombre backup_file.sq3
de la base de datos my_database.sq3
.
Es diferente de la copia de archivos regular, porque se ocupa de cualquier usuario que esté trabajando actualmente en la base de datos. Hay bloqueos adecuados establecidos en la base de datos, por lo que la copia de seguridad se realiza exclusivamente.
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup es la mejor manera.
sqlite3 my_database .backup my_database.back
También puede probar el comando .dump, que le da la posibilidad de volcar la base de datos completa o tablas en un archivo de texto. Si se especifica TABLE, solo volcar tablas que coincidan con el patrón LIKE TABLE.
sqlite3 my_database .dump > my_database.back
Una buena forma de hacer una copia de archivo usando dump and store es reconstruir la base de datos más tarde.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
También verifique esta pregunta ¿Los comandos SQLite3 .backup y .dump bloquean la base de datos?
.backup
no funciona como se muestra arriba ("falta el argumento FILENAME en .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();
}