PDA

View Full Version : Backup And Restore دیتابیس SQLite



PetekDincos
جمعه 24 شهریور 1391, 12:14 عصر
با سلام
برای پشتیبان گیری و بازیابی پشتیبان پایگاه داده SQLite چیکار باید بکنم آیا کپی کردن خود دیتابیس و بعد جایگزین کردنش درسته و یا راه بهتری وجود داره . با تشکر

abdullah20
جمعه 24 شهریور 1391, 12:28 عصر
مثل اکسس هستش هیچ فرقی نمیکنه

PetekDincos
جمعه 24 شهریور 1391, 13:02 عصر
با سلام
یعنی می شه راحت Copy , Paste کرد برای پشتیبان گیری و بازیابی پشتیبان و مشکلی پیش نمیاد و اگر امکانش باشه یه مثال بزنید . با تشکر

abdullah20
جمعه 24 شهریور 1391, 14:02 عصر
مراجعه به پست بعدی و کد مدیربخش

Mani_rf
دوشنبه 15 تیر 1394, 10:58 صبح
هرچند تاریخ تاپیک گذشته ولی لازمه که برای مراجعه کننده های بعدی به تاپیک توضیح بدم.

کپی کردن فایل دیتابیس کاملا غلطه، اگر دیتابیس باز باشه یا اطلاعات بافر شده وجود داشته باشه امکان داره که بخشی از اطلاعات از دست بره و یا اینکه با پیغام عدم اجازه دسترسی به فایل روبرو بشوید.
خود SQlite برای پشتیبان گیری این روش رو پیشنهاد داده :

#C

SQLite.SQLiteConnection SourceDb = new SQLite.SQLiteConnection("DataSource=Source_FileName.db");
SQLite.SQLiteConnection BackupDb = new SQLite.SQLiteConnection("DataSource=Bakup_FileName.db");
SourceDb.Open();
SourceDb.BackupDatabase(BackupDb, "Bakup_FileName", "Source_FileName", -1, null, -1);
SourceDb.Close();



VB.Net

Dim SourceDb As New SQLite.SQLiteConnection("DataSource=Source_FileName.db")
Dim BackupDb As New SQLite.SQLiteConnection("DataSource=Bakup_FileName.db")
SourceDb.Open()
SourceDb.BackupDatabase(BackupDb, "Bakup_FileName", "Source_FileName", -1, Nothing, -1)
SourceDb.Close()

Mani_rf
دوشنبه 15 تیر 1394, 17:22 عصر
این سورس کاملا تست شده است و جواب میده :

C#‎‎‎
try { SQLite.SQLiteConnection SourceDb = new SQLite.SQLiteConnection("DataSource=SrcDatabase.db;Password:123");
SQLite.SQLiteConnection BackupDb = new SQLite.SQLiteConnection("DataSource=BckDatabase.db;Password:123");


SourceDb.Open();
SQLite.SQLiteCommand Command = new SQLite.SQLiteCommand("VACUUM", SourceDb);
Command.ExecuteNonQuery();


BackupDb.Open();
SourceDb.BackupDatabase(BackupDb, "main", "main", -1, null, -1);
BackupDb.Close();


SourceDb.Close();
} catch (Exception ex) {
// Handle Error
}





VB.Net
Try Dim SourceDb As New SQLite.SQLiteConnection("DataSource=SrcDatabase.db;Password:123")
Dim BackupDb As New SQLite.SQLiteConnection("DataSource=BckDatabase.db;Password:123")


SourceDb.Open()
Dim Command As New SQLite.SQLiteCommand("VACUUM", SourceDb)
Command.ExecuteNonQuery()


BackupDb.Open()
SourceDb.BackupDatabase(BackupDb, "main", "main", -1, Nothing, -1)
BackupDb.Close()


SourceDb.Close()
Catch ex As Exception
' Handle Error
End Try




نکته ها:
1- موقع اجرای فرمان Backup هر دو کانکشن باید باز باشند.
2- با توجه به این که کانکشن استرینگ 2تا کانکشن متفاوته توجه کنید که بک آپ میتونه پسورد متفاوت از دیتابیس اصلی داشته باشه.
3- در قسمتی از کد که دستور VACUUM روی دیتابیس مبدا اجرا شده، مشابه Shrink در SQL Server عمل میکنه و فضای اختیار شده دیتابیس که اطلاعاتی درونش نیست رو آزاد میکنه و باعث میشه حجم فایل پشتیبان کمتر بشه که البته میتونید حذفش کنید.

negar.rafie
شنبه 11 مهر 1394, 20:13 عصر
سلام
میشه پارامتهای ورودی که داده شده را توضیح بدید؟
ایا اینها ثابت هستند ؟
SourceDb.BackupDatabase(BackupDb, "main", "main", -1, Nothing, -1)
و سوال بعدی اینکه اگر بخوایم در یک مسیر دیگه فایل بکاب را ذخیره کنیم چه کار کنیم؟
برای ریستور باید چکار کرد؟

negar.rafie
یک شنبه 12 مهر 1394, 14:51 عصر
کسی بلد نیست پاسخ بده؟