質問

2010年10月15日 11時51分
  • 多重起動防止について(理由等)

情シスのオープンナレッジ『Syszo』サービス終了のお知らせ

質問

いつもお世話になっております。
今回は基幹システムの各画面の多重起動防止について、
識者の皆さまのお知恵を拝借したいと思っています。

最初に弊社の基幹システムについて記載いたします。
・パッケージ。カスタマイズ部分のソースのみ弊社で所有。
・開発言語:画面はVB6.0+データ処理はPL/SQL+帳票はCrystal Reports
(帳票:DBへデータInsert→Crystal Reports起動→DBのデータDelete)
・サーバー:Windows 2000 Server
(去年の春に 2003 Server をダウングレードした物へ入れ換えました。
 アプリサーバー3台でバランスしていて、画面自体はMetaFrame上で動いています)
・DB:Oracle 8i
(アプリサーバーとは別にDBサーバーを立てています)
・各画面(exe)には多重起動防止のコードが記述されています
(起動時に全プログラムのプロパティを読み取り、
 自分と同じ名前のexeが既に起動していれば、自分自身は終了する)

今回、現場から各画面を多重起動させたいという要望が出てきました。
単純に多重起動させるだけならば、多重起動防止のコードを
コメントアウトするだけで良いとは思います。
ところが、多重起動はしないという前提で設計されている以上、次の事が考えられるかと思います。
・多重起動を防止しなければならない理由が必ず在るはず
・多重起動させてしまうと、何らかの問題が生じる

また、多重起動を防止する理由を自分なりに考えてみたのですが、次の点しか思いつきませんでした。
・際限無く起動させるとアプリサーバーの負荷が増大する為
・帳票に関して、2つの画面から起動した際、タイミングによっては
 Crystal Reports起動前にDBのデータがDeleteされてしまう恐れがある為
・PL/SQLの処理で待ちが発生する場合、
 片方の画面からキックしたPL/SQLの処理が終了するまで、
 もう1つの画面からの処理はWaitする為(結局1画面の場合と一緒になる)

そこで、皆さまに質問です。
多重起動を防止する理由は上記のような物で合ってますでしょうか?
「合っている」「間違っている」「他にも理由がある」等々のご指摘やアドバイスをいただけたら幸いです。
また、「二重起動防止が不要な場合の例」等を教えていただけると嬉しいです。
以上、どうぞ宜しくお願いいたします。

2件の回答があります

回答

私のところでは多重起動を禁止しては居ません。実際には 在庫表示を見ながら生産数を勘案したり、製品完成日程を見ながら出荷日程を制御したり しています。多重起動は負荷が増えますがある程度の余裕(ウチは25%)の余裕があります)多重起動してまで端末を使うのは数人ですので今のところ問題はないです。
ファイル(レコード)の両方からの掴み合いでロックしてしまうのはプログラムで解決します。(弊社はオフコンなので事情が違いますが)
支障があるといえばwinXPのIE7以上でタブを多用すると異常に動作が遅くなるということがあり「タブは使うな」としています。

多重起動は私としては必須と思っており、もし「多重起動はできません」と言われたらそのシステムは採用しないでしょう。私も現役時代は画面を4分割して4画面開きっぱなしは当たり前でやっていました。

ウチは25%:たとえば100台を想定していれば125画面はOKということです。実際には100台が同時稼働することはない(せいぜい70台)なので余力は十分と思います。

2010年10月15日 14時01分

回答

同一画面の多重起動に関しては、可能なシステムも多く存在するようですね。
業界的にそのような流れにあるにも関わらず、
多重起動を防止していると言う事は、
単純に『多重起動されては困る』だけなのかもしれないですし、
『多重起動させないという構想のもとに開発された』だけかもしれないですし。
どちらかは未だ判らないのですが、とりあえず多重起動はさせない方向で進めたいと思います。

いつも本当にありがとうございます!

あなたもコメントしましょう!