2013年8月27日火曜日

FTPのファイルロック

こんにちは。
大阪勤務のⅠです。

IISのFTPを使用したシステムでの出来事です。


●システム概要

・DBサーバ上で常時起動する。
・テキストファイルをデータベースへ展開する。

<動作>

①別PCからDBサーバ上の所定のフォルダへ、
 不定期に下記ファイルがFTP伝送される。

 (1)データファイル(固定長のテキストデータ)
 (2)伝送制御ファイル(データファイルの伝送完了を知らせる)

②アプリケーションは、DBサーバ上の所定のフォルダをタイマーで監視し、
 伝送制御ファイルが存在すれば、値を読み込む。

③伝送制御ファイルの値が「0」の場合、
 データファイルの伝送が完了していると判断し、
 データファイルの値を読み込みデータベースへ展開する。

④データ展開後は、データファイル、伝送制御ファイルともに削除する。


上記内容のアプリケーションで、下記のエラーが発生していました。

<エラー内容>

System.IO.IOException:別のプロセスで使用されているため、
プロセスはファイル'<伝送制御ファイル名>' にアクセスできません。


ちなみにエラー時は1秒後にリトライを行う仕組みになっていて、
その際には問題なく処理されていました。

はじめはウイルス対策ソフト、もしくは、レプリケーションソフトが
伝送ファイルをロックしているのかと思いましたが、
それらが原因ではないようでした。

調べてみると、どうやらIISのFTPは、
ファイル伝送開始から終了までの間ずっと、
そのファイルを読み書き禁止でロックしているようです。

つまり、データファイルの伝送完了を知らせる伝送制御ファイルが伝送中のため、
FTPのプロセスによってロックされているわけで、
ある意味どうしようもないエラーということでしょうか。

リトライ機能があるため、伝送完了後は問題なく処理されるようですが、
何か回避策を考える必要があるな…感じる出来事でした。

それでは。