我使用以下代码创建了内存数据库的备份:
public static void backUpDatabase(Connection conn)throws SQLException
{
String backupdirectory ="c:/mybackups/"+JCalendar.getToday();
CallableStatement cs = conn.prepareCall("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)");
cs.setString(1, backupdirectory);
cs.execute();
cs.close();
System.out.println("backed up database to "+backupdirectory);
}
现在,我想通过从以前的备份中创建内存数据库来还原数据库。我该怎么办?
谢谢。
最佳答案
我知道的最快方法:
首先,使用shutdown=true
:
boolean gotSQLExc = false;
try {
DriverManager.getConnection("jdbc:derby:memory:testdb;shutdown=true");
} catch (SQLException se) {
if ( se.getSQLState().equals("08006") )
System.out.println("Database shut down normally");
else
System.out.println("Database did not shut down normally")
}
然后
restoreFrom=
Connection connection = DriverManager.getConnection("jdbc:derby:memory:testdb;restoreFrom=path/to/backup/file");
connection.close();
这样,一个包含约300个表的数据库,并在约150毫秒内以这种方式在我的开发机上恢复了一些示例数据。
这对于需要快速快速恢复数据库的junit集成测试非常有用。根据您的设置,您可能需要在测试之间执行一些其他工作,例如,如果使用c3p0连接池,则需要从C3P0Registry获取所有连接,并在此还原后调用hardReset()。另一方面,其他一些池不需要执行任何操作。