Gitbucket復旧
Gitbucketが起動しなくなった。
最近メモリ不足で強制的にkillしていたりしたので、その影響だろうか...
org.h2.jdbc.JdbcSQLException: レコード "[3196] stream data key:1416407 pos:11 remaining:0" を読み込み中にファイルの破損を検出しました。可能な解決策: リカバリツールを使用してください
dbのリカバリを試みる
突然の電源断などでデータベースが壊れた場合
h2*.jarは、gitbucket.warの中にある。
Jettyを使っている場合は/home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/ 直下に展開されている。
cd /home/gitbucket/.gitbucket java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.Recover
data.h2.sqlができる。
java -cp /home/gitbucket/.gitbucket/tmp/webapp/WEB-INF/lib/h2-1.4.180.jar org.h2.tools.RunScript -url jdbc:h2:./data -user sa -script data.h2.sql -showResults
sqlファイルを元にDBを一から構築。エラーが出る。
CREATE TABLE O_19(C0 VARCHAR, C1 VARCHAR, C2 VARCHAR, C3 CLOB); 【SQLの中身】 Exception in thread "main" org.h2.jdbc.JdbcSQLException: 一般エラー: "java.lang.NullPointerException" General error: "java.lang.NullPointerException"; SQL statement:
削って再度流してみる。
だめだー。
どうやらREAD_CLOB_DBとある行が軒並みアウト。
全部削ってみる。
いけた。
data.mv.dbというファイルが生成される。
[2018/01/15 追記] ここから下が間違ってたらしい。詳しくは下記記事
oboenikui.hatenablog.com
元のファイル名と違うけどリネームしてOKか...?
mv data.mv.db data.h2.db
起動してみる。
だめー
2014-10-16 13:49:00.541:WARN:oejw.WebAppContext:Failed startup of context o.e.j.w.WebAppContext{/,file:/home/gitbucket/.gitbucket/tmp/webapp/},file:/usr/lib/gitbucket/gitbucket.war org.h2.jdbc.JdbcSQLException: ファイル "/home/gitbucket/.gitbucket/data.h2.db" は、未サポートのバージョンか、不正なファイルヘッダを持つデータベースファイルです|Unsupported database file version or invalid file header in file "/home/gitbucket/.gitbucket/data.h2.db" [90048-180] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) at org.h2.message.DbException.get(DbException.java:179) at org.h2.message.DbException.get(DbException.java:155) at org.h2.store.FileStore.init(FileStore.java:195) at org.h2.engine.Database.openFile(Database.java:527) at org.h2.store.PageStore.openExisting(PageStore.java:328) at org.h2.store.PageStore.open(PageStore.java:288) at org.h2.engine.Database.getPageStore(Database.java:2382) at org.h2.engine.Database.open(Database.java:663) at org.h2.engine.Database.openDatabase(Database.java:263) at org.h2.engine.Database.<init>(Database.java:257) 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 java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:215) at servlet.AutoUpdateListener.getConnection(AutoUpdateListener.scala:239) at servlet.AutoUpdateListener.contextInitialized(AutoUpdateListener.scala:188) at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:771) at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:424) at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:763) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:249) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:706) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:277) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at JettyLauncher.main(JettyLauncher.java:65) 2014-10-16 13:49:00.562:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:18080