有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java H2数据库损坏问题及其大文件大小

我正在使用H2 1.4.191的嵌入式版本,带有以下连接字符串:

jdbc:h2:<Path of database file>

我面临两个问题:

  1. 有时我的数据库大小超过10GB,系统停止工作。我认为数据库中存储的数据不应该超过5Mb。什么是消耗内存

  2. 有时我会遇到以下例外情况:

    组织。h2。jdbc。JdbcSQLException:读取记录时文件损坏:null。可能的解决方案:使用恢复工具[90030-191] 在org。h2。消息DbException。getJdbcSQLException(DbException.java:345) 在org。h2。消息DbException。get(DbException.java:168) 在org。h2。mvstore。db。MVTableEngine$商店。convertIllegalStateException(MVTableEngine.java:195) 在org。h2。mvstore。db。MVTableEngine$商店。打开(MVTableEngine.java:167) 在org。h2。mvstore。db。MVTableEngine。init(MVTableEngine.java:99) 在org。h2。发动机数据库getPageStore(Database.java:2460) 在org。h2。发动机数据库打开(Database.java:692) 在org。h2。发动机数据库openDatabase(Database.java:270) 在org。h2。发动机数据库(Database.java:264) 在org。h2。发动机发动机openSession(Engine.java:65) 在org。h2。发动机发动机openSession(Engine.java:175) 在org。h2。发动机发动机createSessionAndValidate(Engine.java:153) 在org。h2。发动机发动机createSession(Engine.java:136) 在org。h2。发动机发动机createSession(Engine.java:28) 在org。h2。发动机会话远程。connectEmbeddedOrServer(SessionRemote.java:349) 在org。h2。jdbc。jdbc连接。(JdbcConnection.java:107) 在org。h2。jdbc。jdbc连接。(JdbcConnection.java:91) 在org。h2。驾驶员connect(Driver.java:72) 在爪哇。sql。司机经理。getConnection(未知源) 在爪哇。sql。司机经理。getConnection(未知源) 在com。j256。奥姆利特。jdbc。JdbcConnectionSource。makeConnection(JdbcConnectionSource.java:252) 在com。j256。奥姆利特。jdbc。JdbcConnectionSource。getReadWriteConnection(JdbcConnectionSource.java:184) 在com。j256。奥姆利特。桌子图表。doCreateTable(TableUtils.java:440) 在com。j256。奥姆利特。桌子图表。createTable(TableUtils.java:220) 在com。j256。奥姆利特。桌子图表。createTableIfNotExists(TableUtils.java:61) 在com。利米特雷。pos.dbmanagers。刀。init(DAO.java:75) 在com。利米特雷。pos.dbmanagers。刀。createDB(DAO.java:172) 在com。利米特雷。位置控制器。主应用程序。appInitialization(MainApp.java:91) 在com。利米特雷。位置控制器。主应用程序。init(MainApp.java:80) 在com。太阳javafx。应用发射装置impl。launchApplication1(LaunchImpl.java:841) 在com。太阳javafx。应用发射装置impl。lambda$launchApplication$155(launchimpl.java:182) 在爪哇。朗。丝线。运行(未知源) 原因:java。lang.IllegalStateException:块1703中的文件损坏,应为检查值1190,获得2040[1.4.191/6] 在org。h2。mvstore。DataUtils。newIllegalStateException(DataUtils.java:773) 在org。h2。mvstore。页阅读(Page.java:667) 在org。h2。mvstore。页阅读(第页,java:195) 在org。h2。mvstore。MVStore。readPage(MVStore.java:1939) 在org。h2。mvstore。MVMap。readPage(MVMap.java:736) 在org。h2。mvstore。页getChildPage(Page.java:217) 在org。h2。mvstore。光标。min(Cursor.java:129) 在org。h2。mvstore。光标。hasNext(Cursor.java:36) 在org。h2。mvstore。MVStore。loadChunkMeta(MVStore.java:689) 在org。h2。mvstore。MVStore。readStoreHeader(MVStore.java:670) 在org。h2。mvstore。MVStore。(MVStore.java:353) 在org。h2。mvstore。MVStore$Builder。打开(MVStore.java:2888) 在org。h2。mvstore。db。MVTableEngine$商店。打开(MVTableEngine.java:154)

org.h2.jdbc.JdbcSQLException: General error: "java.lang.NullPointerException" [50000-178] 
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) 
        at org.h2.message.DbException.get(DbException.java:167) 
        at org.h2.message.DbException.convert(DbException.java:294) 
        at org.h2.engine.Database.openDatabase(Database.java:293) 
        at org.h2.engine.Database.<init>(Database.java:256) 
        at org.h2.engine.Engine.openSession(Engine.java:57) 
        at org.h2.engine.Engine.openSession(Engine.java:164) 
        at org.h2.engine.Engine.createSessionAndValidate(Engine.java:142) 
        at org.h2.engine.Engine.createSession(Engine.java:125) 
        at org.h2.server.TcpServerThread.run(TcpServerThread.java:150) 
        at java.lang.Thread.run(Thread.java:744) 
    Caused by: java.lang.NullPointerException 
        at org.h2.mvstore.DataUtils.parseMap(DataUtils.java:630) 
        at org.h2.mvstore.MVStore.openMap(MVStore.java:411) 
        at org.h2.mvstore.db.TransactionStore.<init>(TransactionStore.java:96) 
        at org.h2.mvstore.db.MVTableEngine$Store.<init>(MVTableEngine.java:161) 
        at org.h2.mvstore.db.MVTableEngine.init(MVTableEngine.java:94) 
        at org.h2.engine.Database.getPageStore(Database.java:2355) 
        at org.h2.engine.Database.open(Database.java:659) 
        at org.h2.engine.Database.openDatabase(Database.java:262) 

我认为两者都与数据库腐败问题有关,这在H2中存在。我应该如何避免这个问题?如果没有,我可以恢复我的数据吗


共 (0) 个答案