(57)【特許請求の範囲】
【請求項１】
複数のプログラムファイルからなるプログラムを配布する第１の計算機と、配布されたプログラムを組み込み、組み込んだプログラムを実行する第２の計算機を有するコンピュータシステムにおけるプログラムの更新／回復方法であって、
前記第１の計算機が、第１のプログラムをインストール済みの前記第２の計算機に第２のプログラムを配布する際に、変更のあったプログラムファイルだけを、前記第２の計算機に配布し、
前記第２の計算機が、
前記第１の計算機から前記変更のあったプログラムファイルを受信し、
前記第１のプログラムのプログラムファイルのバックアップファイルを生成し、
前記変更のあったプログラムファイルを格納して第１のプログラムから第２のプログラムに更新し、
すべてのプログラムファイルが正常に更新されたか否かを確認し、
確認の結果、正常である場合に、更新を完了し、
確認の結果、異常である場合に、前記バックアップファイルの内容に基づいて、前記第１のプログラムの状態に回復し、
その後、所定時間を設定されたタイマのタイムアウトをきっかけに、前記更新と回復の処理を更新が完了するまで繰り返す
ことを特徴とするプログラム更新／回復方法。
【請求項２】
複数のプログラムファイルからなるプログラムを配布する第１の計算機と、配布されたプログラムを組み込み、組み込んだプログラムを実行する第２の計算機を有するコンピュータシステムにおけるプログラムの更新／回復方法であって、
前記第１の計算機が、第１のプログラムをインストール済みの前記第２の計算機に第２のプログラムを配布する際に、変更のあったプログラムファイルだけを、前記第２の計算機に配布し、
前記第２の計算機が、
前記第１の計算機から前記変更のあったプログラムファイルを受信し、
前記第１のプログラムのプログラムファイルのバックアップファイルを生成し、
前記変更のあったプログラムファイルを格納して第１のプログラムから第２のプログラムに更新し、
すべてのプログラムファイルが正常に更新されたか否かを確認し、
確認の結果、正常である場合に、更新を完了し、
確認の結果、異常である場合に、前記バックアップファイルの内容に基づいて、前記第１のプログラムの状態に回復し、
前記第１のプログラムの運用終了後に、再度更新処理を実行する
ことを特徴とするプログラム更新／回復方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワーク等の伝送手段を通して新バージョンプログラムを配布して更新し、その更新に失敗した場合は旧バージョンプログラムへ回復させるプログラムの更新／回復方法に関し、特に旧バージョンプログラムに関与する範囲に関する回復対象ファイル情報に基づいて生成したバックアップファイルから旧バージョンプログラムを回復するプログラム更新／回復方法に関する。
【０００２】
【従来の技術】
従来において、ネットワーク内の特定のコンピュータから他のコンピュータに対してプログラムを配布し、他のコンピュータには配布した処理を実行させるシステムがある。
【０００３】
このようなシステムにおいて、配布先のコンピュータでは、旧バージョンプログラムをネットワークを通して配布された新バージョンプログラムに更新することによって新バージョンプログラムへバージョンアップをした時、一部のプログラムモジュールは新バージョンプログラムのプログラムモジュールに更新されたが、その他のプログラムモジュールについては何らかの原因で更新に失敗して更新されない場合等がある。
【０００４】
このような場合に、当該プログラムを旧バージョンに早急に回復させる必要があるが、従来は、配布プログラムを一括管理している配布元から新ためて旧バージョンのプログラムモジュールの転送を受けて旧バージョンのプログラムモジュールに回復するという回復方法がとられていた。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記従来の回復方法にあっては、配布プログラムを一括管理している配布元から改めて旧バージョンプログラムをファイル転送していることから、旧バージョンプログラムの回復に要する時間が長くなり、バージョンの異なるプログラムモジュールの混在によるプログラム使用不可能状態が長時間化するという問題があった。
【０００６】
一方また、配布元コンピュータと配布先コンピュータとでソース言語レベルでは互換性があるが、ロードモジュールレベルでは互換性がない場合、配布元からソースモジュールを配布し、配布先では配布されたソースモジュールからロードモジュールを生成し、該生成したプログラムを実行させるようにする必要がある。
【０００７】
しかし、ソースモジュールの新バージョンへの更新には成功したが、ロードモジュールの更新には失敗した場合は、配布元から改めてロードモジュールの転送を受けることは不可能であるため、配布先では配布元から再度旧バージョンのソースモジュールの配布を受け、その配布された旧バージョンのソースモジュールからロードモジュールを生成することになる。
【０００８】
このため、前記の場合に比べさらに旧バージョンプログラムの回復に要する時間が長くなり、バージョンの異なるプログラムモジュールの混在によるプログラム使用不可能状態が長時間化するという問題があった。
【０００９】
本発明の目的は、新バージョンプログラムへの更新を失敗した場合に、旧バージョンプログラムへの回復を迅速に行い、プログラム使用不可能状態を短縮することができるプログラム回復方法を提供することである。
【００１０】
【課題を解決するための手段】
上記目的を達成するために本発明は、第１のプログラムをインストール済みの計算機に、第２のプログラムをインストールする際に、前記第２のプログラムを構成するプログラムファイルが、前記第１のプログラムファイルを更新するかどうかを判断し、前記第２のプログラムのプログラムファイルが前記第１のプログラムのプログラムファイルを更新する場合に、前記第１のプログラムのプログラムファイルのバックアップファイルを生成し、前記第２のプログラムのプログラムファイルを前記計算機に格納し、前記第２のプログラムのすべてのプログラムファイルが前記計算機に格納されていることを確認し、前記第２のプログラムのすべてのプログラムファイルが前記計算機に格納されていない場合に、前記バックアップファイルの内容に基づいて、前記第２のプログラムに更新する前の第１のプログラムの状態に回復し、その後、タイマ設定により、前記更新と回復の処理を更新が完了するまで繰り返すことを特徴とする。
【００１１】
【発明の実施の形態】
以下、本発明を図面に示す一実施形態に基づいて詳細に説明する。
なお、実施形態においては、コンピュータシステムのＯＳとして、ＵＮＩＸ（登録商標）システムの１つであるＨＩ−ＵＸシステムを仮定して説明する。従って、本システムにおけるファイルシステムでは、データおよびプログラムが格納されているファイルは階層化したディレクトリにより管理され、またディレクトリもファイルの一種として扱われる。
【００１２】
図１は、本発明のプログラム更新／回復方法を適用したコンピュータシステムの一実施形態を示すシステム構成図である。
図１において、１はネットワーク上の他のコンピュータシステムに組み込むプログラムを配布するコンピュータシステム、２ａ〜２ｃはコンピュータシステム１によって配布されたプログラムを組み込み、組み込んだプログラムを実行するコンピュータシステムであり、これらのコンピュータシステムは通信回線３で結合されている。
【００１３】
ここで、本実施形態では、ＯＳが提供しているコマンド等を使用するが、使用方法等はＨＩ−ＵＸ関連のマニュアルに詳細に記述されているため、本実施形態での具体的な使用方法等の詳細な説明は省略する。
【００１４】
なお、本実施形態で主に使用するコマンドとその機能概略は、次の通りである。
（１）findコマンド：ファイルの検索
（２）cpioコマンド：ファイルのアーカイブおよびアンアーカイブ
（３）cpコマンド：ファイルのコピー
（４）mkdirコマンド：ディレクトリの作成
まず、コンピュータシステム１には、プログラムprog1のバージョン０１版がディレクトリv01下にプログラム本体１１として組み込まれている。
また、プログラムprog1のバージョン０２版が開発されると、バージョン０２版がディレクトリv02下にプログラム本体１２として組み込まれる。
なお、本例ではプログラムprog1のバージョン０１版の各プログラムモジュールは、ディレクトリv01下のfile1、file11、file12とに格納されている。
また、プログラムprog1のバージョン０２版の各プログラムモジュールは、ディレクトリv02下のfile1、file11、file12とに格納されている。
本実施形態では、cpio（-o：アーカイブ）コマンドの実行によって、指定のパス名以降のアーカイブをファイルシステムから入手することができる。
また、cpio（-i：アンアーカイブ）コマンドの実行によって、入手したアーカイブをファイルシステムへコピーすることができる。
【００１５】
例えば、図２に示すトリーについて「／…／…／prog1／v01／prog1」を指定してcpioコマンド（-o：アーカイブ）を実行すると、プログラム本体１１のアーカイブＡ１を入手することができる。
【００１６】
また、アーカイブＡ１を入力としてディレクトリ「／…／…／prog1／v01」下でcpio（-id：アンアーカイブ）コマンドを実行すると、アーカイブＡ１の内容がディレクトリ「／…／…／prog1／v01」下にコピーされる。
【００１７】
アーカイブは、当該ノードがディレクトリかファイルかを示すモード６１、当該ノードのノード名称６４とその長さを示すノード名称長６２、当該ノードがファイルである場合は格納しているデータ６５とそのデータ長を示すデータ長６３およびその他の情報から構成されている。
【００１８】
図１に戻り、コンピュータシステム１は、プログラムprog1のバージョン０１版であるプログラム本体１１を例えばコンピュータシステム２ａに配布する場合、プログラム本体１１のアーカイブＡ１と、プログラム本体１１の回復対象ファイル情報を内容とする回復対象ファイルＲ１とをコンピュータシステム２ａにファイル転送する。
【００１９】
回復対象ファイル情報とは、後述の場合等に有効であるが、あるサブファイルシステムにおいて当該サブファイルシステムの回復が必要となった場合に、どのファイルを回復するかをパス名で示したものである。
【００２０】
本実施形態では、プログラムモジュールが格納されている全ファイルを回復対象ファイル情報としている。
例えば、プログラム本体１１の回復対象ファイル情報は、パス名「／…／…／prog1／v01／prog1」を指定したfind（-type f）コマンドの実行によって、プログラム本体１１の全プログラムモジュールファイルのパス名である「prog1／file1」と「prog1／dir1／file11」と「prog1／dir1／file12」のパス名を入手できるが、本例では共通のディレクトリ下にある「file11」と「file12」については、転送情報削減のために当該共通のディレクトリ「prog1／dir1」を転送情報としていることによって、パス名「prog1／file1」と「prog1／dir1」とが回復対象ファイルＲ１の内容となっている。
【００２１】
コンピュータシステム２ａでは、アーカイブＡ１と回復対象ファイルＲ１とがファイル転送された時に、アーカイブＡ１を指定したcpio（-i：アンアーカイブ）コマンドを実行することによりコピーしたプログラム本体２１と、プログラム本体２１とは別のパスでディレクトリbackupfileとをmkdirコマンドの実行により生成し、ディレクトリbackupfile下にファイルprog1を生成し、当該ファイルprog1に回復対象ファイルＲ１の内容を格納した回復対象ファイル２２を作成する。
【００２２】
また、コンピュータシステム２ａでは、コンピュータシステム１からプログラムprog1のバージョン０２版であるプログラム本体１２のアーカイブＡ２とプログラム本体１２の回復対象ファイルＲ２とがファイル転送された時、プログラム本体２１と回復対象ファイル２２とに基づき、例えば、
（１）プログラム本体２１と回復対象ファイル２２とは別のパスでディレクトリbackupdataをmkdirコマンドで生成する、
（２）回復対象ファイル２２で指定されているそれぞれのファイル（本例では「prog1／file1」と「prog1／dir1」）について、プログラム本体２１のディレクトリprog1の親ディレクトリ下で「find %s -print|cpio -pd backupdata」（ただし、%sは「prog1／file1」または「prog1／dir1」）コマンドを実行する、
という手順でバックアップデータ２３（プログラム本体２１と同一内容）を生成し、これをディレクトリbackupdata下に組み込む。
【００２３】
図３は、コンピュータシステム１によるコンピュータシステム２ａに配布すべきプログラム本体１２のアーカイブＡ２および回復対象ファイルＲ２の入手から、コンピュータシステム２ａにおけるこれら情報を受信した後のプログラム本体２１のプログラムモジュールの更新までのフローチャートである。
以下、プログラム配布のためのアーカイブおよび回復対象ファイルの生成から、これら情報を受信してのプログラム更新までの動作を図３のフローチャートに従って説明する。
まず、コンピュータシステム１にプログラムprog1のバージョン０２版であるプログラム本体１２がディレクトリv02下に組み込まれると、コンピュータシステム１はディレクトリv02下のディレクトリprog1以降のアーカイブＡ２をcpio（-o：アーカイブ）コマンドの実行により入手する（ステップ３０１）。
次に、ディレクトリv02下のディレクトリprog1に関する回復対象ファイルＲ２をfind（-type f -print）コマンドの実行により入手し（ステップ３０２）、この後に、転送情報削減のために、入手した情報を編集する（ステップ３０３）。例えば、次のように編集する。
＜入手情報＞
▲１▼prog1/file1
▲２▼prog1/dir1/file11
▲３▼prog1/dir1/file12
＜編集結果の回復対象ファイルＲ２＞
▲１▼prog1/file1
▲２▼prog1/dir1（入手情報▲２▼と▲３▼は「prog1/dir1」までが共通であるため）。
次に、アーカイブＡ２と回復対象ファイルＲ２とをコンピュータシステム２ａへファイル転送する（ステップ３０４）。
【００２４】
コンピュータシステム２ａは上記情報を受信したらならば（ステップ３０５）、プログラム本体１１のアーカイブＡ１と回復対象ファイルＲ１のファイル転送を受けたときに組み込んであるプログラム本体２１と回復対象ファイル２２とに基づき、プログラム本体２１とは別のパスで、図１に示すバックアップデータ２３を生成する（ステップ３０６）。
本例では、回復対象ファイル２２の内容が「prog1/file1」と「prog1/dir1」であるため、プログラム本体２１と同一ディレクトリ構造でプログラム本体２１のプログラムモジュールのバックアップがバックアップデータ２３として生成される。
【００２５】
次に、プログラム本体２１のディレクトリprog1をワークディレクトリとしてアーカイブＡ２を入力とするcpio（-id：アンアーカイブ）コマンドを実行することにより、プログラム本体２１のファイルfile1、file11、file12の内容をプログラム本体１２のファイルfile1、file11、file12の内容に更新する（ステップ３０７）。
【００２６】
次に、全ファイルへの格納が正常か否か、すなわち全プログラムモジュールが正常に更新されたか否かをリターン情報により確認する（ステップ３０８）。
確認の結果、正常リターンである場合は、プログラム本体１２の全プログラムモジュールの格納が正常になされたと判断し、不要となったバックアップデータ２３を削除する（ステップ３０９）。
【００２７】
その後、回復対象ファイル２２の内容を転送されてきた回復対象ファイルＲ２の内容に更新する（ステップ３１０）。
【００２８】
以上により、プログラム本体２１と回復対象ファイル２２との実際の内容は、プログラム本体１１に関する内容からプログラム本体１２に関する内容に更新され、かつバックアップデータ２３は存在しないことになる。
【００２９】
なお、cpio（-id：アンアーカイブ）コマンドであるが、例えばプログラムprog1が実行中であってfile1に格納されているプログラムモジュールが主記憶装置上にロードされている（file1が使用中）ために格納できなかった場合は、コマンドの実行終了時に、格納できなかったファイル（この場合はfile1）のファイル名称と共にその旨の連絡がなされる（異常リターン）。
【００３０】
図４は、コンピュータシステム２ａにおけるアーカイブＡ２および回復対象ファイルＲ２を受信してからの以前配布されて組み込んであるプログラム本体２１の内容（本例ではプログラム本体２１のfile1、file11、file12の内容）を今配布されたプログラム本体１２の内容に更新することに失敗した場合、プログラム本体２１の内容を更新前の内容に戻すためのプログラム回復概念図である。
更新成功か否かの確認の結果（ステップ３０８）、異常リターンである場合は、格納できなかったファイルのファイル名を図４に示す更新時使用中ファイル情報４１に記憶しておく（ステップ３１１および図４に示す手順丸４）。
【００３１】
次に、バージョン０１版のプログラムモジュールとバージョン０２版のプログラムモジュールとが混在しているプログラム本体２１のプログラムモジュール格納ファイルを、バックアップデータ２３により、バージョン０１版のプログラムモジュール格納ファイルも含めすべてバージョン０１版プログラムモジュール格納ファイルとする。
具体的には、ディレクトリbackupdataをワークディレクトリとする「find . -print | cpio -pd pdirectory（「pdirectory」はプログラム本体２１のディレクトリprog1の親ディレクトリ）」コマンドを実行する。
【００３２】
実行の結果、異常リターンの場合には、連絡されたファイル名称を回復時使用中ファイル情報４２に記憶する（図４に示す手順丸７）。
リターンが正常リターンの場合、または異常リターンであるが更新時使用中ファイル情報４１に記憶しているファイル名称と回復時使用中ファイル情報４２に記憶しているファイル名称とがすべて同一である場合は、プログラム本体２１が回復されたものと判断して終了する。
【００３３】
次に、回復対象ファイル情報の有効性について、下記の運用形態の場合で説明する。
図１において、コンピュータシステム１と２ａとの間、またはコンピュータシステム２ａ〜２ｃ同士間でソース言語レベルでは互換性があるが、ロードモジュールレベルでは互換性がない場合、コンピュータシステム１はコンピュータシステム２ａ〜２ｃへソースモジュールを転送して、各々のコンピュータシステム２ａ〜２ｃは転送されたソースモジュールを自身のシステム下のコンパイラでコンパイルしてロードモジュールを作成する必要がある。
このような場合、最初のプログラム配布時に、コンピュータシステム１とコンピュータシステム２ａ〜２ｃとの間で、例えば「file11とfile12にはprog1のソースモジュールを格納し、file1にはprog1のロードモジュールを格納する」のように、それぞれのプログラムについてのサブファイル体系（トリー構造）を事前に決めておく。
【００３４】
または、このような詳細な取決めをするまでもなく、最初のプログラム配布時に、単にサブファイル体系（トリー構造）だけをコンピュータシステム１からコンピュータシステム２ａ〜２ｃへ転送し、コンピュータシステム２ａ〜２ｃは転送されたサブファイル体系（トリー構造）に従って、自身のファイルシステム下にそのプログラムについてのサブファイル体系（トリー構造）を生成する。
このような取決めの下で、プログラム配布時にコンピュータシステム２ａ〜２ｃへ転送する情報として、ソースモジュールが格納されているファイル「file11、file12」だけに関するアーカイブ、すなわち「prog1／dir1」以降のアーカイブをアーカイブＡｉとし、また回復対象ファイル情報としてはロードモジュールを格納しているファイル「file1」も含めた「prog1／file1」と「prog1／dir1」とを回復対象ファイルＲｉとする。
【００３５】
このようにした場合、上記のアーカイブＡｉと回復対象ファイルＲｉを受信したコンピュータシステム２ａ〜２ｃは、前回のプログラム配布時に受信して保持してある回復対象ファイル２２（すなわち、回復対象ファイルＲ（ｉ−１））の内容である「prog1／file1」と「prog1／dir1（すなわち、prog1／dir1／file11とprog1／dir1／file12）」を基にバックアップデータ２３を生成する。
【００３６】
その後、転送されたソースモジュール（ファイルfile11、file12の内容）がプログラム本体２１のファイルfile11、file12に格納され、これらのソースモジュールから生成されたロードモジュールがプログラム本体２１のファイルfile1に格納される。この時点で、プログラム本体２１の旧バージョンのロードモジュールは消失したわけであるが、これを旧バージョンに回復する場合、旧バージョンのロードモジュールをバックアップデータ２３として保持しているため、旧バージョンへの回復が容易に可能となる。
【００３７】
以上のように、本実施形態においては、配布元のコンピュータシステム１から配布先のコンピュータシステム２ａ〜２ｃに配布されたプログラムのプログラム名称が組込済みのプログラム本体２１のプログラム名称と同一である場合、組込済み同一名称のプログラム本体２１のバックアップデータ２３（バックアップファイル）が生成される。
この後、前記組込済みのプログラム本体２１が新たに配布されたプログラム本体１２に更新されるが、その更新結果の確認において、更新できなかったプログラムモジュールが存在した場合には、組込済みのプログラム本体２１がバックアップデータ２３に基づいて更新前に回復される。
従って、更新失敗時であっても、配布元のコンピュータシステム１から改めて旧バージョンプログラムをファイル転送する必要がなくなり、プログラム使用不可能状態を短縮することができる。
【００３８】
また、コンピュータシステム１から新たなプログラムを配布するに際し、配布するプログラム本体１２に関与するプログラムファイルを示す回復対象ファイル情報を新たなプログラム本体１２と共に送信し、回復対象ファイル情報を配布先のコンピュータシステム２ａ〜２ｃに保持させ、配布先のコンピュータシステム２ａ〜２ｃでは、コンピュータシステム１から新たなプログラム本体１２が配布されたとき、新たに配布されたプログラム本体１２のプログラム名称が組込済みのプログラム本体２１のプログラム名称と同一であるか否かを判定し、同一である場合、前記保持しておいた回復対象ファイル情報に基づいて更新失敗時の回復対象となる組込済みプログラム本体２１についてのバックアップデータ２３を生成し、組込済みのプログラム本体２１を新たに配布されたプログラム本体１２に更新しようとした時、その更新結果の確認において、更新できなかったプログラムモジュールが存在した場合には、前記バックアップデータ２３の内容に基づいて、組込済みのプログラム本体２１と該組込済みプログラムに関与する回復対象ファイル情報を更新前の状態に回復する。
従って、配布先においてソースモジュールからロードモジュールを生成して使用するようなシステム構成にあっては、回復対象ファイル情報として、ソースモジュールのファイルの他に、ロードモジュールのファイルを指定しておくことにより、ソースモジュールからロードモジュールを改めて生成する必要がなくなり、更新前の状態に迅速に回復させることができる。
【００３９】
ところで、本発明は、上記実施形態に限定されるものではなく、次のような実施形態も可能である。
（１）コンピュータシステム１は、プログラムの全モジュールについてのアーカイブをコンピュータシステム２ａ〜２ｃに送信しているが、これを変更のあったモジュール（ファイル）だけについてのアーカイブをコンピュータシステム２ａ〜２ｃに送信してもかまわない。
なおこの場合は、アーカイブ対応に当該モジュール（ファイル）の親ディレクトリまでのパス名も送信する。
この場合、コンピュータシステム２ａ〜２ｃは、それぞれのアーカイブについて、送信された対応の親ディレクトリをワークディレクトリとしてアンアーカイブを実行すればよい。
このようにすると、更新が複数回になるが、更新に失敗した時点で更新を中止して回復できるようになり、回復対象のファイルが一括更新での失敗の場合より一般的に少なくなり、またバージョンの異なるプログラムモジュールが混在する時間も短くなる。
【００４０】
（２）コンピュータシステム１は、プログラムの全モジュールについてのアーカイブをコンピュータシステム２ａ〜２ｃに送信しているが、これを変更のあったモジュール（ファイル）だけについてのファイルをコンピュータシステム２ａ〜２ｃに送信してもかまわない。
なおこの場合は、ファイル対応に当該モジュール（ファイル）までのパス名も送信する。
この場合、コンピュータシステム２ａ〜２ｃは、それぞれのファイルについて、送信された当該ファイルのパス名から当該ファイルの親ディレクトリ（当該ファイルのパス名の直前のノード）を検索し、検索した親ディレクトリをワークディレクトリとしてcpコマンドを実行してモジュール（ファイル）単位でのコピーを実行すればよい。
このようにすると、更新失敗時においては上記と同一の効果が得られる。
【００４１】
（３）コンピュータシステム１は、親ディレクトリが同一であるファイルについては当該親ディレクトリまでのパス名に編集して回復対象ファイルＲｉの内容としているが、これを編集しないでそのままコンピュータシステム２ａ〜２ｃに送信してもかまわない。
【００４２】
（４）コンピュータシステム１は、回復対象ファイルＲｉをコンピュータシステム２ａ〜２ｃに送信しているが、これを送信しないようにして、コンピュータシステム２ａ〜２ｃ側は更新前のプログラム本体２１（旧バージョン）についてパス名をプログラム本体２１のディレクトリprog1の親ディレクトリに指定したfind（-print）コマンドを実行して更新前のプログラム本体２１（旧バージョン）の全ファイル名（パス名）を入手し、転送されてきたアーカイブＡｉについてはアーカイブＡｉを入力とするcpio（-tv）コマンドを実行してアーカイブＡｉ中の全ファイル名（パス名）を入手する。そして、入手したそれぞれのファイル名（パス名）について比較を行って、ファイル名（パス名）の一致するファイルだけについてバックアップデータ２３を取得してもよい。
【００４３】
（５）新旧両バージョンのディレクトリ構成およびファイル構成を同一としているが、実際には同一でなくてもよい。
例えば、更新前のプログラム本体２１には存在しないファイル「…/prog1/dir1/file13」がアーカイブＡｉ中にはある場合は、プログラム本体２１への更新前に、上記「４．」の方法で更新前のプログラム本体２１（旧バージョン）の全ファイル名（パス名）と転送されてきたアーカイブＡｉ中の全ファイル名（パス名）とを比較し、追加されている「…/prog1/dir1/file13」を検出して保持しておく。
その後に、プログラム本体２１のディレクトリprog1をワークディレクトリとしてアーカイブＡｉを入力とするcpio（-id：アンアーカイブ）コマンドを実行することによってプログラム本体２１のファイルfile1、file11、file12の内容をプログラム本体１２のファイルfile1、file11、file12の内容に更新し、さらにプログラム本体２１の「…/prog1/dir1」ディレクトリ下にファイルfile13をその内容を格納したまま追加する。
なお、アーカイブＡｉの内容に更新されたプログラム本体２１を更新前の状態に回復する場合は、バックアップデータ２３を基にファイルfile1、file11、file12の内容を回復し、さらに保持している「…/prog1/dir1/file13」を基にファイル「…/prog1/dir1/file13」を削除すればよい。
【００４４】
（６）更新に失敗した場合は回復を行うが、更新の再試行には次のような方法等が考えられる。
▲１▼適当な時間のタイマを設定しておいて、このタイマのタイムアウトをきっかけとして、更新→回復の動作を更新が成功するまで適当な回数繰り返す。
▲２▼当日の当該プログラムの運用が終了した後に更新を行う。
【００４５】
（７）ネットワーク構成をとらず、配布元と配布先が１対１のシステム構成あってもよい。
以上のように他の実施形態も示したが、どの実施形態を採用するかは、それぞれの実施形態の特徴と当該システムの運用または特徴とを考慮して最適な組み合わせを選択すればよい。
例えば、大半のモジュールが変更となった場合には、当該バージョンアッププログラム全体をアーカイブしてコンピュータシステム２ａ〜２ｃに送信し、一部のモジュールが変更となった場合には、当該モジュールだけに関する情報をコンピュータシステム２ａ〜２ｃに送信する等のケース対応に動作する構成も考えられる。
【００４６】
以上説明したように本発明においては、第２のコンピュータにおいて第１のコンピュータから新たに配布されたプログラムのプログラム名称が組込済みのプログラムのプログラム名称と同一であるか否かを判定し、同一である場合、組込済みの同一名称のプログラムのバックアップファイルを生成した後、前記組込済みのプログラムを新たに配布されたプログラムに更新し、その更新結果の確認において、更新できなかったプログラムモジュールが存在した場合には、前記組込済みのプログラムを前記バックアップファイルの内容に基づいて更新前に回復するようにしたので、更新失敗時であっても、配布元のコンピュータから改めて旧バージョンプログラムをファイル転送する必要がなくなり、旧バージョンプログラムへの回復を迅速に行い、プログラム使用不可能状態を短縮することができる。また、第１のコンピュータから新たなプログラムを配布するに際し、配布するプログラムに関与するプログラムファイルを示す回復対象ファイル情報を新たなプログラムと共に送信し、この回復対象ファイル情報を第２のコンピュータに保持させておき、第１のコンピュータから新たなプログラムが配布されたとき第２のコンピュータにおいては新たに配布されたプログラムのプログラム名称が組込済みのプログラムのプログラム名称と同一であるか否かを判定し、同一である場合、前記保持しておいた回復対象ファイル情報に基づいて前記組込済みプログラムについてのバックアップファイルを生成した後、前記組込済みのプログラムを新たに配布されたプログラムに更新し、その更新結果の確認において、更新できなかったプログラムモジュールが存在した場合には、前記組込済みのプログラムを前記バックアップファイルの内容に基づいて更新前に回復するようにしたので、配布先においてソースモジュールからロードモジュールを生成して使用するようなシステム構成にあっては、回復対象ファイル情報として、ソースモジュールのファイルの他に、ロードモジュールのファイルを指定しておくことにより、ソースモジュールからロードモジュールを改めて生成する必要がなくなり、更新前の状態に迅速に回復させることができる。
さらに、更新できなかったプログラムモジュールが存在した場合には、そのプログラムファイル名称を一時記憶しておき、バックアップファイルの内容に基づいて更新前に回復するとき、回復対象のプログラムファイルが使用中であれば、その使用中のプログラムファイルの名称と前記一時記憶しておいたログラムファイル名称とを比較し、同一であれば当該プログラムファイルのプログラムは更新前に回復されたものとすることにより、使用中であったプログラムファイルが未使用状態になるのを待つ必要がなくなり、そのための時間が短縮される。
【００４７】
【発明の効果】
以上のように本発明によれば、新バージョンプログラムへの更新を失敗した場合に、旧バージョンプログラムへの回復を迅速に行い、プログラム使用不可能状態を短縮することができる。
【図面の簡単な説明】
【図１】本発明を適用したネットワークシステムの一実施形態を示すシステム構成図である。
【図２】アーカイブ情報の構成を示す説明図である。
【図３】実施形態におけるファイル更新／回復の手順を示すフローチャートである。
【図４】プログラムが更新前の状態に回復される様子を示す概念図である。
【符号の説明】
１，２ａ〜２ｃ…コンピュータシステム、３…通信回線、１１…プログラム本体（バージョン０１）、１２…プログラム本体（バージョン０２）、２１…プログラム本体（現行バージョン）、２２…回復対象ファイル、２３…バックアップデータ（バージョン０１）、４１…更新時使用中ファイル情報、４２…回復時使用中ファイル情報、Ａ２…プログラム本体（バージョン０２）のアーカイブ。
【図１】
0003716971.tif 000002
【図２】
0003716971.tif 000003
【図３】
0003716971.tif 000004
【図４】
0003716971.tif 000005