Cách thích hợp để làm điều đó là gì? Tôi chỉ sao chép tệp .sq3?
Điều gì sẽ xảy ra nếu có người dùng trên trang web và tệp đang được ghi trong khi nó được sao chép?
Cách thích hợp để làm điều đó là gì? Tôi chỉ sao chép tệp .sq3?
Điều gì sẽ xảy ra nếu có người dùng trên trang web và tệp đang được ghi trong khi nó được sao chép?
Câu trả lời:
Công cụ dòng lệnh sqlite3 có tính năng .backup
lệnh dot .
Bạn có thể kết nối với cơ sở dữ liệu của mình bằng:
sqlite3 my_database.sq3
và chạy lệnh dấu chấm sao lưu với:
.backup backup_file.sq3
Thay vì kết nối tương tác với cơ sở dữ liệu, bạn cũng có thể sao lưu và đóng kết nối sau đó với
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
Dù bằng cách nào thì kết quả là một bản sao có tên backup_file.sq3
của cơ sở dữ liệu my_database.sq3
.
Nó khác với việc sao chép tệp thường xuyên, vì nó chăm sóc bất kỳ người dùng nào hiện đang làm việc trên cơ sở dữ liệu. Có các khóa thích hợp được thiết lập trên cơ sở dữ liệu, vì vậy việc sao lưu được thực hiện độc quyền.
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
. sao lưu là cách tốt nhất.
sqlite3 my_database .backup my_database.back
bạn cũng có thể thử lệnh .dump, nó cung cấp cho bạn khả năng kết xuất toàn bộ cơ sở dữ liệu hoặc các bảng vào một tệp văn bản. Nếu TABLE được chỉ định, chỉ kết xuất các bảng phù hợp với BẢNG mẫu LIKE.
sqlite3 my_database .dump > my_database.back
Một cách tốt để tạo một bản sao lưu trữ bằng cách sử dụng kết xuất và lưu trữ, Hãy xây dựng lại cơ sở dữ liệu sau đó.
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
Cũng kiểm tra câu hỏi này Các lệnh SQLite3 .backup và .dump có khóa cơ sở dữ liệu không?
.backup
không hoạt động như trình bày ở trên ( "thiếu đối số FILENAME trên .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();
}