当前位置: 首页 > 知识库问答 >
问题:

H2-一般错误:“java.lang.NullPointerException”[50000-182]

韩琛
2023-03-14

我有一个相当大(>2.5GB)的h2数据库文件。驱动程序版本是1.4.182。一切都很好,但最近数据库异常停止工作:

Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-182] HY000/50000 (Help)
org.h2.jdbc.JdbcSQLException: Błąd ogólny: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-182] 
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 
    at org.h2.message.DbException.get(DbException.java:168) 
    at org.h2.message.DbException.convert(DbException.java:295) 
    at org.h2.engine.Database.openDatabase(Database.java:297) 
    at org.h2.engine.Database.<init>(Database.java:260) 
    at org.h2.engine.Engine.openSession(Engine.java:60) 
    at org.h2.engine.Engine.openSession(Engine.java:167) 
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:145) 
    at org.h2.engine.Engine.createSession(Engine.java:128) 
    at org.h2.engine.Engine.createSession(Engine.java:26) 
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:347) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:108) 
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:92) 
    at org.h2.Driver.connect(Driver.java:72) 
    at org.h2.server.web.WebServer.getConnection(WebServer.java:750) 
    at org.h2.server.web.WebApp.test(WebApp.java:895) 
    at org.h2.server.web.WebApp.process(WebApp.java:221) 
    at org.h2.server.web.WebApp.processRequest(WebApp.java:170) 
    at org.h2.server.web.WebThread.process(WebThread.java:137) 
    at org.h2.server.web.WebThread.run(WebThread.java:93) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.NullPointerException 
    at org.h2.mvstore.db.ValueDataType.compare(ValueDataType.java:102) 
    at org.h2.mvstore.MVMap.compare(MVMap.java:741) 
    at org.h2.mvstore.Page.binarySearch(Page.java:388) 
    at org.h2.mvstore.MVMap.put(MVMap.java:179) 
    at org.h2.mvstore.MVMap.put(MVMap.java:133) 
    at org.h2.mvstore.db.TransactionStore.rollbackTo(TransactionStore.java:491) 
    at org.h2.mvstore.db.TransactionStore$Transaction.rollback(TransactionStore.java:785) 
    at org.h2.mvstore.db.MVTableEngine$Store.initTransactions(MVTableEngine.java:223) 
    at org.h2.engine.Database.open(Database.java:736) 
    at org.h2.engine.Database.openDatabase(Database.java:266) 
... 17 more 

问题发生在我的应用程序和使用H2 web前端。我已经尝试过类似问题的解决方案,但我不能将H2降级到1.3.x,因为它不能读取1.4.x数据库文件。

我的问题是:

编辑2:使用恢复工具的结果:

$ java -cp h2-1.4.182.jar org.h2.tools.Recover
Exception in thread "main" java.lang.IllegalStateException: Unknown tag 50 [1.4.182/6]
   at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:762)
   at org.h2.mvstore.type.ObjectDataType.read(ObjectDataType.java:222)
   at org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1792)
   at org.h2.mvstore.db.TransactionStore$ArrayType.read(TransactionStore.java:1759)
   at org.h2.mvstore.Page.read(Page.java:843)
   at org.h2.mvstore.Page.read(Page.java:230)
   at org.h2.mvstore.MVStore.readPage(MVStore.java:1813)
   at org.h2.mvstore.MVMap.readPage(MVMap.java:769)
   at org.h2.mvstore.Page.getChildPage(Page.java:252)
   at org.h2.mvstore.MVMap.getFirstLast(MVMap.java:351)
   at org.h2.mvstore.MVMap.firstKey(MVMap.java:218)
   at org.h2.mvstore.db.TransactionStore.init(TransactionStore.java:169)
   at org.h2.mvstore.db.TransactionStore.<init>(TransactionStore.java:117)
   at org.h2.mvstore.db.TransactionStore.<init>(TransactionStore.java:81)
   at org.h2.tools.Recover.dumpMVStoreFile(Recover.java:593)
   at org.h2.tools.Recover.process(Recover.java:331)
   at org.h2.tools.Recover.runTool(Recover.java:192)
   at org.h2.tools.Recover.main(Recover.java:155)

我还注意到另外两个文件(.txt和.sql)已经创建,但它们似乎不包含数据。

共有1个答案

柯苗宣
2023-03-14

我得到同样的情况上周与JIRA数据库,我花了几个小时做谷歌关于这个问题,但是,没有答案可以解决这个情况。

我决定看看H2源代码,我可以用非常简单的代码恢复整个数据库。我可能不了解这种情况的全貌,例如根本原因,在什么情况下发生的,但原因是:当您连接到h2文件时,h2引擎将查看auditLog并回滚正在进行的事务,其中有一些数据类型未知(id为17),而h2在识别类型(ID17)时由于异常而无法回滚。

我的代码很简单,将h2 lib添加到构建路径中,然后手动连接到文件并清除auditLog,因为我认为这只是日志,不会有太大的影响(有人可能会纠正我)。希望你也能解决你的问题。

public static void main(final String[] args) {
    // open the store (in-memory if fileName is null)
    final MVStore store = MVStore.open("C:\\temp\\h2db.mv.db");

    final MVMap<Object, Object> openMap = store.openMap("undoLog");

    openMap.clear();

    // close the store (this will persist changes)
    store.close();
}
 类似资料:
  • 简介 正如大家(应该)知道的,在开发过程中,错误处理 是非常重要的部分。它不仅向使用者表明他/她/它所请求的页面是不可用的, 也是一种透过提供一个 HTTP 错误状态来通知机器 (浏览器等)发生了什幺事情的方式。 程式码错误 FuelPHP 的内部错误处理是基于例外。这可以让你在你的程式码中捕捉它们, 因此你的应用程序可以优雅地处理发生的例外,且使用者可以继续使用应用程序。 FuelPHP 也改变

  • 问题内容: 我收到了这个令人讨厌的错误,尽管我知道为什么要得到它,但我终生无法找到解决方案。 查询包含占位符()。但是要添加这些LIMIT占位符,我需要使用手动方法(),因为否则引擎会将它们转换为字符串。 我没有收到无效的参数数量错误,因此所有占位符均已正确绑定(我认为)。 查询: 除最后两个LIMIT(我与之手动绑定)外,所有占位符值均位于$ criteria中。 问题答案: 您不能使用 和 。

  • 我在客户机-服务器模式下使用H2数据库。服务器运行版本为1.3.175,客户端运行版本为1.3.168。 一切似乎都很好,但我在执行一些查询时遇到异常: org.h2.jdbc.jdbcsqlexception:常规错误:“java.lang.nullpointerexception”[50000-175]在org.h2.message.dbexception.getJDBCSqlexceptio

  • 我有一些问题Laravel迁移。我的文章和标签之间有多对多的关系。'article_tag'迁移: 标签迁移: “第条移徙: 我的控制台日志: illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1 near“)”:语法错误(SQL:创建表“article_-tag”(“article_-id”integer不为null,“tag_-id”int

  • 我正在使用laravel auth。在注册页面中,用户需要填写姓名、电子邮件和密码才能创建帐户。稍后,用户可以编辑他的个人资料帐户,并插入更多信息,如地址、城市、邮政编码等,但创建帐户只需要它的名字、姓氏、电子邮件和密码。 我使用laravel auth使用下面的代码构建上面的逻辑,但是我在填写表单并单击“创建帐户”后收到错误: SQLSTATE[HY000]:一般错误:1364字段“facebo

  • 本文向大家介绍Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException,包括了Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException的使用技巧和注意事项,需要的朋友参考一