Hello Alex, I am getting error code: 90030. Please find attached code which I have tried in java using org.h2.tools.Recover. Please find attached code snippet and error message on console. However, our database in not encrypted.
Please suggest what can be done. On Saturday, August 24, 2024 at 3:04:36 PM UTC+5:30 Alex Tsvetkov wrote: > Hi. > > What error message do you get exactly? > > Easiest way to troubleshoot this will be to use debugger, but it only > works if you familiar with the tool. > > четверг, 22 августа 2024 г. в 16:52:31 UTC+3, prachi sugdare: > >> Hello Team, >> >> I have one .mv.db file which is corrupted. I am using following command >> to recover the file, however it is showing error message. >> >> java -cp h2-1.4.200.jar org.h2.tools.Recover -dir "C:/corrupted" -db >> "asms_corrupted" -out "C:/recover/asms2_local_DB.mv" >> >> Please suggest what can be done to recover the same file. >> >> Thanks & Regards, >> Prachi More. >> > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to h2-database+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/h2-database/cf7d2074-804f-471f-b9e3-98588f6421dfn%40googlegroups.com.
package com.bv; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.h2.tools.Recover; public class H2DatabaseExample { public static void main(String[] args) { // Original database URL and recovery URL String jdbcUrl = "jdbc:h2:C:\\corrupted\\asms_corrupted"; String recoveryFilePath = "C:\\recover"; // Database credentials String username = "dba"; String password = "sql"; Connection conn = null; Statement stmt = null; ResultSet rs = null; try { // Register JDBC driver Class.forName("org.h2.Driver"); // Open a connection conn = DriverManager.getConnection(jdbcUrl, username, password); } catch (SQLException e) { // Handle SQL exceptions and check if the database is corrupted if (e.getSQLState().startsWith("90030")) { // 08006 is a common SQLState for connection issues, including corruption System.out.println("Database corruption detected. Attempting recovery..."); try { // Use H2 Recover tool to recover the database Recover.main(new String[]{ "-dir", "C:/corrupted", "-db", "asms_corrupted", "-out", recoveryFilePath, // "-password", "sql" }); System.out.println("Database recovery completed. Please check the recovery location."); } catch (Exception recoverException) { System.out.println("Recovery failed: " + recoverException.getMessage()); } } else { System.out.println("SQL Exception: " + e.getMessage()); } } catch (Exception e) { // Handle other exceptions System.out.println("Exception: " + e.getMessage()); } finally { // Clean-up environment try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } } }