h2データベースでのバックアップ、リストアの方法。
ORMLiteを使っているのだけれど、とりあえずはdaoオブジェクトでexecuteすればいいということにする。
ちなみにコードはKotlinです。
object DatabaseHelper {
val connectionSource by Delegates.lazy {
val databaseUrl = "jdbc:h2:~/test"
JdbcConnectionSource(databaseUrl)
};
{
setUpDatabase(connectionSource)
}
private fun setUpDatabase(connectionSource: ConnectionSource) {
TableUtils.createTableIfNotExists(connectionSource, javaClass<User>())
}
fun getUserDao() : Dao<User, Int> = DaoManager.createDao(connectionSource, javaClass<User>())!!
fun close() = connectionSource.close()
fun backup(backupPath: String) {
getUserDao().executeRaw("SCRIPT TO ? COMPRESSION GZIP", backupPath)
}
fun restore(filePath: String) {
getUserDao().executeRaw("RUNSCRIPT FROM ? COMPRESSION GZIP", filePath)
}
}
BACKUP TO “filename.zip”だと、データベースファイルをzipに固めたものが取れるのだけれど、できればmysqldumpみたいなのが欲しいなと思っていて調べたところ、SCRIPT TO “filename”がよいということがわかった。その上でさらに圧縮したい場合は、後ろにCOMPRESSION GZIPを付ければいいらしい。
リストアは、RUNSCRIPT FROM “filename”です。こっちはまだ確かめてないけど。これも圧縮状態から読み込めるらしい。
参考URL:
https://groups.google.com/d/msg/h2-database/fJgSDA6-iKs/Iyc7P9e3fRQJ
