2008年10月21日火曜日

H2databaseでErrCode=50200

ロックをかけたトランザクションとは別のトランザクションが同じリソースのロックを取得に行った時に絶対に受け取ることができない組み合わせの場合に発生するようだ。(DeadLockのときもでるらしい)

S2で「RequiresNewTx」を指定したメソッドから特定のデータをInsertし、別の「RequiresNewTx」となるメソッドを呼び出して、その中で同じレコードのUpdateをしていることが原因だったようだ。再現テストしても発生しないため、どうもデバッガでデータを適当に書き換えた結果として発生していたようだ。


参考:http://www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c50200

LOCK_TIMEOUT_1 = 50200
The error with code 50200 is thrown when another connection locked an object longer than the lock timeout set for this connection, or when a deadlock occurred. Example:

参考2:http://lumber-mill.co.jp/gallery/view/tips/java/h2
ここは、SQLでのExport方法も載せてあった。

$ java -cp h2.jar org.h2.tools.Script -url jdbc:h2:foo -user sa

$ java -cp h2.jar org.h2.tools.RunScript -url jdbc:h2:foo -user sa

0 件のコメント: