Uriden.log

色々あって…からの、闘いはまだまだ続きます…

Oracle 248日問題日記

2005-04-13 21:01:20 | 日記
[発生する現象]

インスタンスがstartupやshutdown等セマフォ操作を伴う処理でハングアップ状態となり、
処理が完了しない。

[現象の再現性]

【問題が発生するプラットフォーム】 【問題の対象外プラットフォーム】
Sun Solaris (Sparc) HP HP-UX
Sun Solaris (Intel) Hitachi HI-UX
NEC UX/4800 UP/EWS 4800 IBM AIX
Fujitsu UXP/DS HP Tru64 UNIX (DIGITAL UNIX)
SCO Unixware Linux
SGI IRIX Microsoft WindowsNT

【問題が発生するOracleのリリース】
8.0.X - 8.1.6.X
  32-bit及び64-bitのOS上で動作する32-bit版Oracleのみ発生します。
64-bit版Oracleでは発生しません。

OS起動後、248.55日を経過した後にstartup、shutdown処理を実行する際、発生することがあります。
また、通常の接続、検索等の処理もハングする可能性があります。この問題に該当するかどうか
を特定するにはオラクルプロセス(Shadow, PMON)のシステムコールを以下の例のようにトレース
してtimes()より負の値が返りsemop()->times()の処理を繰り返しているかどうかご確認下さい。

  -- オラクルプロセスのトレース --
% truss -f -p 1433
1433: semop(1245185, 0xEFFFB798, 1) (sleeping...)
1433: Received signal #14, SIGALRM, in semop() [caught]
1433: semop(1245185, 0xEFFFB798, 1) Err#91 ERESTART
1433: sigprocmask(SIG_BLOCK, 0xEFFFB3B0, 0x00000000) = 0
1433: times(0xEFFFB340) = -2127501074
1433: setitimer(ITIMER_REAL, 0xEFFFB340, 0x00000000) = 0
1433: sigprocmask(SIG_UNBLOCK, 0xEFFFB3B0, 0x00000000) = 0
1433: setcontext(0xEFFFB480)
1433: semop(1245185, 0xEFFFB798, 1) (sleeping...)
1433: Received signal #14, SIGALRM, in semop() [caught]
1433: semop(1245185, 0xEFFFB798, 1) Err#91 ERESTART
1433: sigprocmask(SIG_BLOCK, 0xEFFFB3B0, 0x00000000) = 0
1433: times(0xEFFFB340) = -2127500673
1433: setitimer(ITIMER_REAL, 0xEFFFB340, 0x00000000) = 0
1433: sigprocmask(SIG_UNBLOCK, 0xEFFFB3B0, 0x00000000) = 0
1433: setcontext(0xEFFFB480)


[現象の発生原因]

OS起動後、約248日を経過するとtimes()システムコールの戻り値が負の値となり
ますが、Oracle8より結果的に負の値を考慮しないコーディングになったため問題が
発生します。

[実施可能な対策]

以下の三通りの対処が可能です。

(1)運用対処
OS起動後約248日以内に、該当サーバーマシン上で稼動している
データベース・インスタンスを全て停止してから、OSの再起動を行います。

(2)リリースアップもしくはパッチ適用
本現象はOracle8i Release 8.1.7で修正されております。
また、一部のバージョン、プラットフォームに対しては、個別パッチをご提供しております。
下記、URLにて個別パッチをリストアップしておりますので、ご確認ください。

http://support.oracle.co.jp/rdbms/index.html
(日本オラクルとメンテナンスサポート契約のあるお客様のみ)
    ご購入先が日本オラクル以外の販売代理店の場合、ご購入先にお問い合わせください。

(3)OS起動後248日以上経過している状態で、該当サーバーマシン上で
稼動しているデータベース・インスタンスを shutdown nomal や
shutdown immediate にて停止する処理を実行し、本件の現象に遭遇した
場合には、別セッションから shutdown abort を実施する方法で対処し
してください。その後、OS の reboot を実行します。

---
ようするにだ、ハメられたんだよ、俺は。