วิธีที่เหมาะสมในการทำคืออะไร? ฉันแค่คัดลอกไฟล์. sq3 หรือไม่
จะเกิดอะไรขึ้นหากมีผู้ใช้บนไซต์และไฟล์ถูกเขียนในขณะที่กำลังคัดลอก
วิธีที่เหมาะสมในการทำคืออะไร? ฉันแค่คัดลอกไฟล์. sq3 หรือไม่
จะเกิดอะไรขึ้นหากมีผู้ใช้บนไซต์และไฟล์ถูกเขียนในขณะที่กำลังคัดลอก
คำตอบ:
เครื่องมือบรรทัดคำสั่ง sqlite3 มีคำสั่งจุด.backup
คุณสามารถเชื่อมต่อกับฐานข้อมูลของคุณด้วย:
sqlite3 my_database.sq3
และเรียกใช้คำสั่งจุดสำรองด้วย:
.backup backup_file.sq3
แทนที่จะเชื่อมต่อแบบโต้ตอบกับฐานข้อมูลคุณยังสามารถสำรองข้อมูลและปิดการเชื่อมต่อได้ในภายหลังด้วย
sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"
ทั้งสองวิธีผลที่ได้คือสำเนาชื่อของฐานข้อมูลbackup_file.sq3
my_database.sq3
ซึ่งแตกต่างจากการคัดลอกไฟล์เป็นประจำเนื่องจากจะดูแลผู้ใช้ที่กำลังทำงานกับฐานข้อมูลอยู่ มีการตั้งค่าล็อกที่เหมาะสมบนฐานข้อมูลดังนั้นการสำรองข้อมูลจึงทำได้โดยเฉพาะ
sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
.backup เป็นวิธีที่ดีที่สุด
sqlite3 my_database .backup my_database.back
คุณยังสามารถลองใช้คำสั่ง. dump ซึ่งจะช่วยให้คุณสามารถถ่ายโอนฐานข้อมูลหรือตารางทั้งหมดลงในไฟล์ข้อความได้ หากระบุ TABLE เฉพาะตารางการถ่ายโอนข้อมูลที่ตรงกับรูปแบบ LIKE TABLE
sqlite3 my_database .dump > my_database.back
วิธีที่ดีในการสร้างสำเนาเก็บถาวรโดยใช้การถ่ายโอนข้อมูลและการจัดเก็บสร้างฐานข้อมูลใหม่ในภายหลัง
sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database
ตรวจสอบคำถามนี้ด้วยคำสั่ง SQLite3 .backup และ. dump ล็อกฐานข้อมูลหรือไม่
.backup
ไม่ทำงานตามที่แสดงด้านบน ("ไม่มีอาร์กิวเมนต์ FILENAME บน. สำรอง")
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();
}