Oracle10gR2 for Linux での248日問題

昔にもあったカウンタのオーバーフロー問題再び(今度はクライアント側)。
なお、最新のPSRでは修正済み。

症状的にはtimesコール呼びまくってループから抜けなくなる。
64bit版でも影響受けてるので、signed intとかに格納して比較してると思われる。
該当ライブラリは多分libclntsh.soで、KROWN的にはクライアントからのアクセスのみ
だけどsqlplus、lsnrctl、OCIドライバ経由のアクセスも影響受けるので事実上アクセス不可。
クライアントのみ適当にtimesコールを乗っ取って返す値を巻き戻したらアクセス出来たので、
DB本体は影響受けて無さそう。


2.4系カーネルの場合は、起動時からの秒数としてカウントされているため
248.55日くらいで発生するが、2.6系の場合はソフトウェアクロックの精度が
変更可能になったためか、始点が変更されており2.4より若干短い期間で発生する。


余談だけどOracleXEは影響受けなかった。Oracle10gR2のリリースより
後に出ているので、それまでの間に修正されていた模様。
この問題は該当しなかったけど、致命的なエラーが出た場合はOracleXE向けにも
パッチ出すのかなぁ。
フリー版とはいえ、対応方法は再起動とかでお茶を濁されるのは勘弁して貰いたいところ。