簡體   English   中英

如何在運行時備份嵌入式 H2 數據庫引擎?

[英]How to back up the embedded H2 database engine while it is running?

我想用 H2 數據庫引擎構建一個 Web 應用程序。 但是,讀了這篇教程后,我仍然不知道如何在數據庫運行時備份數據:

http://www.h2database.com/html/tutorial.html#upgrade_backup_restore

H2 是否將其存儲的文件輸出到文件系統中的某個位置? 我可以只備份輸出的文件嗎?

H2 存儲在文件系統上,但最好使用您引用的備份工具,因為文件格式可能會在 H2 版本之間發生變化。 如果升級 H2,它可能不再能夠讀取它在以前版本中創建的文件。 此外,如果您復制它使用的文件,我建議先關閉數據庫,否則 H2 可能無法讀取復制的文件。

文件的位置取決於您指定的 jdbc url。 請參閱常見問題解答: http : //www.h2database.com/html/faq.html

根據您鏈接教程,不建議在數據庫運行時通過復制文件來備份數據庫。 這是在運行時備份數據庫的正確方法(Scala 代碼,但可以輕松轉換為 Java)( ):

val connection:java.sql.Connection = ??? // get a database connection 
connection.prepareStatement("BACKUP TO 'myFile.zip'").executeUpdate 

感謝 Jus12 獲得了不錯的答案。 我將它改編為 Spring Data 中的 JPARepositories 並想在這里分享它,因為我在網上找不到類似的答案:

@Modifying
@Transactional
@Query(value = "BACKUP TO ?1", nativeQuery = true)
int backupDB(String path);
 try{
     Class.forName("org.h2.Driver");
       Connection con = DriverManager.getConnection("jdbc:h2:"+"./Dbfolder/dbname", "username", "password" );
       Statement stmt = con.createStatement();
       con.prepareStatement("BACKUP TO 'backup.zip'").executeUpdate();

        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.toString());
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM