2010年12月9日木曜日

DOSのBatchファイルプログラミングに、今更ながら驚いた!

いきなり、問い掛けます!
「Windows OS上(Server OSでも、Client OSでも)で、OS上にある特定フォルダの深夜Daily Backupをしたい際には、皆さんはどう設定をしますか???」

回答する前に、多少、説明します。

バックアップ処理は、一般的には、VeritasとかSysmantecの専用Backup Softwareを使うべきです。
但し、予算が限られていたり、緊急性のある場合は、Windows OSに付属している、ntbackupを使うというオプションがあります。

ただ、このntbackupオプションは、専用バックアップソフトに比べれば、勿論、backup機能が脆弱であるので(例えば、バックアップ対象フォルダの中の特定のファイルにNetwork共有設定がされてあり、そのファイルに対して、Network上の誰かが、別PC上からアクセスしていると、言い換えれば、ファイルが掴まれていると、そこでバックアッププロセスがハングしてしまう。つまり、フォルダBackupに失敗する!)、バックアッププロセスを確実に成功させる為には、テクニックが必要です。

例えば、サーバOS上の特定のフォルダを、深夜1時に、外付けHDDにバックアップすると言う例で考えて見ましょう。
サーバOS上のバックアップ対象フォルダに、Network共有が掛かっている場合は、別PCにおいて、フォルダ内の特定のファイルが掴まれている可能性があるので、サーバ自体を、例えば、深夜12時45分に再起動して、一旦、「掴み」を切断する必要があります。
この自動再起動処理は、普通にBatchファイルプログラミングをして、後は、Windowsのタスク機能でそのプログラムを、深夜12時45分に走らせる設定をすればよい。
(因みに、再起動プログラムは、"shutdown -r -t 30" とか。)

ここまでは、普通の処理で、大した話ではないですが、今回、驚愕したのは、バックアップ処理自体を、プログラミングしたBatchファイルプログラムに、関数が使えると言う事を知った事です。
例えば、下記の例は、Cドライブにあるdocumentと言うフォルダ内にある、share_docと言うフォルダを、Fドライブ内のbackupと言うフォルダに、バックアップ処理日付と、サーバホスト名を付したファイル名でバックアップ処理をする、Batchファイルプログラムです。

(Batchファイルプログラムの例)
=========================
REM Document Share Daily Backup
SET DRV=C:\document\share_doc
SET DT=%date%
SET FNAME=F:\backup\%DT:~0,3%%DT:~5,2%%DT:~8,2%-%computername%-doc.bkf
ntbackup backup "%DRV%" /F "%FNAME%"
====================================

関連資料
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html

今まで、こうした関数絡みのプログラミングは、VB Scriptとか、Java Scriptでやっていたのですが、
Batchプログラミングでも、関数が使えると言う事を、この年になって初めて知った!(笑)

まあ、プログラマーの方から見れば、当たり前なのでしょうが、私の様なNetwork Security側の
人間には驚愕の事実でした。(大笑)

という訳で、深夜12時45分に再起動batchプログラムを、深夜1時に、上記のbackupプログラムを
Windowsタスク機能を設定し、走らせると、フォルダバックアップが綺麗に取れる事を知りました。
(バックアップファイル名に日付が入るので、世代管理も出来る!)

感じたことは2つ。
やはり、ITは深いということ。
また、知り尽くしているとまでは勿論、言えないが、十分に使いこなしていると自負している、Windows OSの機能でも、まだまだ設定次第で、色々な事ができると言う事を改めて、痛感したということです。

兎に角、今回は、今までオモチャだと思っていた、Batchファイルプログラミングで関数処理ができる事に、単純に驚きました。

0 件のコメント:

コメントを投稿