H2Databaseを追っかけていたりしたブログ

H2 database のリリースノートを読んだりとか。

Version 1.2.143 (2010-09-18)

今回は安定板ではありません。実際、ユーザ名とパスワードをハッシュしない云々の修正では、リリース直後に不具合が発覚しています。
ちょっと試しただけでは再現してはいないのですが、CHECK制約があるカラムに対してコメントを追加すると、データベースが再オープンできなくなるとか結構強烈な感じです。

  • ユーザ名とパスワードがセットされていない、もしくは空の場合パスワードがハッシュされないようになった。これを無効にするにはシステムプロパティのh2.emptyPasswordをfalseに設定する。TCPサーバにおいては、データベース管理のためのユーザ名は空になった
  • クラスター: オートコミットが無効になっていた
  • Connection.getAutoCommit()がかなり速くなった(特にサーバーモード)
  • Statement.cancel()がサーバーモードで効果がなかった。
  • SCRIPT: SQLスクリプトにデフォルト値と同じ値は含まれないようになった。
  • Statement.cancel()がRunScriptやScriptが実行されているときに動作していなかった。
  • Statement.cancel()でNullPointerExceptionが発生していた。
  • いくつかのケース(特に、キャッシュサイズが小さいかデータベースサイズが1GBを超えているか)で、いくつかのALTER TABLEの様なオペレーションで、データがトランザクションログに書かれる前に書き込まれてしまい、それがALTER TABLE実行中にプロセスがkillされるとデータベース不整合になる原因となっていた。
  • Recover Toolで不整合なデータベースをリカバーする際にArrayIndexOutOfBoundsExceptionが発生していた
  • SCRIPTコマンドとツールで、UTF-8の代わりにシステムのデフォルトのファイルエンコーディングを使用する。ほとんどのケースで既存のアプリケーションに影響しない。このエンコーディングは保存されていてスペシャルキャラクタを含むSQLの識別子(テーブル名等)にのみ影響する。テーブルデータについてはエスケープされているので問題とならない。
  • SCRIPTコマンドとツールで、CHARSETオプションをサポート(RUNSCRIPT同様)
  • データベースをクローズしている際に、空きスペースが解放されないことがあった。
  • create viewで、パラメータを使用すると例外を発生するようになった。今までは、create viewで使用はできたが、パラメータは使われていなかった(nullが使われていた)
  • 新しい実験的機能。SHUTDOWN DEFRAG。このオプションはデータベースをクローズする際にテーブルスキャンを速くするためにページの並び替えを行う。
  • MULTI_THREADEDオプションを使用しているときに、同時に読み込みが発生する(特にデータベースが大きいか、キャッシュサイズが小さい場合)と例外が発生していた。
  • CHECK制約があるカラムに対してコメントを追加すると、データベースが再度オープンできなくなっていた。
  • 新しいシステムプロパティ h2.lobClientMaxSizeMemory。サーバーモード使用時に、クライアント側でメモリに保持するLOBオブジェクトの最大サイズを指定する。