ログ書込みとバックアップが重なってしまう時の対処法は?

解決


シー  2008-03-04 10:56:44  No: 139145  IP: 192.*.*.*

VB6 WinXPで開発中です。
定周期でログを残すアプリが、
 Open filepath For Random As FileNo
 Put #FileNo, RecNo, Data
 Close FileNo
のように書き込んでいるところで、同時にバックアップアプリが、
 Fso.CopyFile Source, Destination
を実行すると、Putでエラーになってしまいます。
それぞれ別のアプリのため、うまくタイミングをずらす等の対処が難しいのですが、こういう場合はどのようにするのが良いのでしょうか?
よろしくお願いします。

編集 削除
もげ  2008-03-04 11:48:11  No: 139146  IP: 192.*.*.*

(1)そもそも、ログファイルをバックアップする必要はありますか?
  無い場合→ログファイルをバックアップ対象からはずす

ある場合は、

(2)ログ記録側アプリで、
   都合がよいときにバックアップ用ファイルを作成する

(3)バックアップアプリ側で、エラー時にリトライする(リトライ回数、間隔等は適宜調整する)

編集 削除
魔界の仮面弁士  2008-03-04 11:52:08  No: 139147  IP: 192.*.*.*

ファイルコピー中のエラーというのは、どうしても起こり得るものですよね。
(容量不足、ファイルロック、ファイル破損、権限不足などなど)

そして、エラーが発生した時にどのようにすべきかは、そのアプリの性質によるかと思いますよ。たとえば…

(案1) バックアップできなかったファイルをスキップして、次のファイルを処理する。
(案2) バックアップできなかったファイルは後回しにし、数秒待ってから、最後にもう一度リトライする。
(案3) バックアップできなかったファイルがあれば、バックアップ全体を失敗とみなし、処理を中断する。

編集 削除
 2008-03-04 11:55:53  No: 139148  IP: 192.*.*.*

試していませんが
CreateFile関数で共有モード
FILE_SHARE_WRITE
を指定して自前でコピーしてみては?

編集 削除
シー  2008-03-04 12:36:30  No: 139149  IP: 192.*.*.*

>もげ様
ありがとうございます。
今回はバックアップは必須になります。
(2)ユーザーが任意のタイミングで実行し、バックアップを実行する時点までのログが残らないとならないため、ログアプリ側では都合の判断ができないかもしれません。
(3)経験不足の為、可能かどうかすぐには判断できないのですが、検討してみます。

>魔界の仮面弁士様
ありがとうございます。
今のところ、バックアップは上手くいっているようです。
ログアプリのPutだけが失敗してしまっています。

>と様
ありがとうございます。
「FILE_SHARE_WRITE」と「自前でコピー」について調査してみます。
もしこれが可能でしたら、一番良いのかもしれません。

編集 削除
シー  2008-03-04 14:33:43  No: 139150  IP: 192.*.*.*

1秒周期で5秒間だけリトライを行うように設定できました。
ありがとうございました。

編集 削除