M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

PentahoでOracle JDBC 10.2.xのバグに遭遇

仕事で面倒を見ているシステムにPentaho Data Integration(PDI)を使用したバッチ処理があるのですが、先週木曜日その処理がハングする事象が置き、きょう月曜日には本来処理されるべきデータが大量に処理対象漏れを起こすという事象が続いて起きました。事象が起きたのはいずれもTransformation(変換)の中のTable Outputステップの実行中でした。処理対象が65535件であればよいのですが、それを超えると問題が起きるのです。

65535は符号なしshortのサイズですから、Javaで実装されたPentahoが(Javaではむしろintやlongが整数型のなかでは特別扱いされていますし、C#などとちがって「符号なし」というのも聞きませんので)65535を境界にして不具合を起こすというのはちょっと想像しにくいものでした。そこで件数とJDBCをキーワードにして調べてみると、PDIのJIRAに情報が見つかりました。

結論をいうとこれは掲題の通りOracle 10gのJDBCドライバのバグによるものでした:

  • 処理対象が65535件以下であるとき、DMLは正常に実行されTransformationも正常終了する。
  • 処理対象が65536件ちょうどであるとき、Transformationはハングする。
  • 処理対象が65537件以上であるとき、DMLは正常に終わったかに見え、Transformationも正常終了する、しかし65535件を上回った件数部分しかコミットされない(例えば65537件のINSERTオペレーションの場合、実際には1件しかINSERTされない)。

報告へのコメントによれば、この事象は10.2.0.4よりも前のバージョンのJDBCドライバに存在していたバグによるものだそうです。今回はそもそも接続先のOracleが11g Release2でしたので、それにあわせて11.2.x系の最新ドライバ11.2.0.4(ojdbc6.jarとorai18n.jar)をPDIのlibextディレクトリに配置、もともとあったojdbc14.jarを取り除けることで事象の解消を確認できました:

Alexander Freickmann added a comment - 30/Mar/12 6:25 AM

You can avoid this problem by replacing the provided Oracle JDBC driver by a newer version, you can download directly from the Oracle homepage. This problem was solved in JDBC driver 10.2.0.4 (http://www.oracle.com/technetwork/database/enterprise-edition/readme-jdbc-10204-093598.html).
Would be great, if the provided JDBC driver could be updated for the next PDI release.