DTSでファイルを圧縮する
k.Takei


DTSによる圧縮ファイル生成
1.環境設定
(1)まず、圧縮ソフトをインストールします。今回はLhacaというフリーの圧縮ソフトを使用します。
      Vectorなどでダウンロードして使用してください。参考URL:http://www.vector.co.jp/
      インストール先はdefault設定で進めます。(\C:Program Files\Lhaca)
      インストールされたらLhacaを開き以下のように設定してください。
      他の圧縮ソフトを使う場合は、下記と同じ結果になるように設定してください。
  圧縮先:ファイルと同じ場所
  圧縮形式:LHA
  「圧縮後フォルダを開く」はチェックを外す。
  関連付けでLZHを選択
  今回、解凍はDTSで使用しないため各自の自由に設定してください。
        


(2)次にファイルを入れるディレクトリを作成してください。今回はCドライブの直下に「download01」「download02」
      「download011」「download022」「log」「batfolder」というフォルダを作成し、共有させます。(ジョブの指定をする場合)
      2つのデータをcsvファイルにし、それぞれファイル名を変更、圧縮し保存用とバックアップ用のフォルダへコピーします。
        






2.DTS作成
(1)SQLServerグループからサーバを選び(例:ABC)DBを選択(例:EFG)

      


(2)取得したいデータのViewを作成。


(3)データ変換サービスのローカルパッケージを選択。右クリックして新規パッケージを作成。

      


(4)右の接続項目から「Microsoft OLE DB Provider for SQL Server」を選択。

      


      新規接続にチェックし接続名をつける(例:接続1)
      真中あたりのデータソースで「Microsoft OLE DB Provider for SQL Server」を選択。
      SQLServer認証を使用にチェックを入れ、IDとPasswordを入力。OKをクリック。

      


(5)右の接続項目から「Text File (Destination)」を選択。

      


      新規接続にチェックし、接続名をつける。データソースでText File (Destination)を選択。
      ファイル名で右のボタンをクリックし、保存先とファイル名を指定。OKをクリック。

      


(6)タスク項目の中のデータ変換タスクをクリック。

      


ア)変換元タブ
      先に作った「Microsoft OLE DB Provider for SQL Server」を接続元に「Text File(Destination)」を接続先にそれぞれ指定する。

                    


      できた変換タスクをダブルクリックしてプロパティを開く。
      説明のところにText File (Destination)で指定した保存先ファイル名のパスを指定する。
      テーブル/ビューにチェック、先に作ったViewを指定。

      


イ)変換先タブ
      テーブル名で先の保存先ファイルパスになっていることを確認。なっていない場合は、指定しなおす。
      列の定義をクリック。変換元から作成→実行とクリック。

      


ウ)変換タブ
      DTSTransformationがきちんと処理されているか確認。(変換元と変換先が一対一で矢印が出ていれば大丈夫)OKをクリック。

      


(7)データ変換タスクを右クリック。
      ステップの実行で問題なく実行できることを確認する。問題があった場合は、再度処理を確認し、作成・修正してください。
      必要なデータ分パッケージを作ります。

      


(8)右のタスク項目から「プロセス実行タスク」をクリック。

      


      一番最後に走らせるパッケージだけこの設定をします。(ファイル名変更や圧縮はすべてバッチで処理するため)
       プロセスの説明で名前を付け(例:プロセス実行タスク: C:\test.bat)Win32プロセスでバッチファイルを指定します。
       仮に「test.bat」とします。

      





3.バッチファイルの生成
(1)テキストエディタを開き、「test.bat」を作成します。

        以下ソース

@echo off

rem************************************************************************************
rem FOR:FOR /F["オプション"] %変数 IN (コマンド) DO コマンド[コマンドパラメーター]   
rem  FORの拡張機能。一連のファイルやディレクトリに対してあるコマンドを連続実行します。
rem  tokens=m-n:m番目からn番目のtokenを指定してFORに渡す。                           
rem  delims:区切り文字のセットを指定。                                               
rem  バッチファイルの場合は「%%」になる。                                             
rem  DATE /T|日付:日付がないと現在日付を返す。                                       
rem************************************************************************************
FOR /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET TODAY=%%a%%b%%c

FOR /F %%d in ('time /t') DO SET TIME=%%d

rem *******************
rem ***** STEP 01 *****
rem *******************

SET STEP=STEP_E01
SET FOLDER1=C:\download01
SET FOLDER2=C:\download02
GOTO LHA_PROC

:STEP_E01

rem *******************
rem ***** STEP 02 *****
rem *******************

SET STEP=STEP_E02
SET FOLDER1=C:\download011
SET FOLDER2=C:\download022
GOTO LHA_PROC

:STEP_E02

rem *****  *****
GOTO end

rem ********************
rem ***** LHA PROC *****
rem ********************
:LHA_PROC

rem*******************************************************************
rem  IF EXIST "・・・":「""」が存在したらtrue、存在しなければfalse  
rem  GOTO・・:LABEL:LABELへ飛ぶ                                     
rem  > >>:リダイレクト。「>」は新たに生成。「>>」は追加していく。   
rem  echo ERROLEVEL:でエラーを出力する。                            
rem*******************************************************************
IF EXIST "%FOLDER1%\out.csv" GOTO LHA_INIT
echo ERROLEVEL %FOLDER1%のout.csvファイルが存在しませんでした。%TIME%  >> "C:\log\%TODAY%_log.txt"
GOTO %STEP%

rem*********************************************************************
rem  rename:rename "A" "B" でAをBのファイル名に変更
rem  "C:\Program Files\Lhaca\Lhaca.exe" "%FOLDER1%\do_%TODAY%.csv"は
rem   "%FOLDER1%\do_%TODAY%.csv"をパス指定した圧縮ソフトに投げています。
rem  copy:copy "A" "B"でAをBにコピー
rem  del:del "A"でAを削除します。
rem*********************************************************************
:LHA_INIT
rename "%FOLDER1%\out.csv" "do_%TODAY%.csv"
"C:\Program Files\Lhaca\Lhaca.exe" "%FOLDER1%\do_%TODAY%.csv"
copy "%FOLDER1%\do_%TODAY%.lzh" "%FOLDER2%\do_%TODAY%.lzh"
del "%FOLDER1%\do_%TODAY%.csv"

GOTO %STEP%

rem *****  *****
:end
         ここまで
        




4.パッケージ保存
バッチファイルができましたので、DTSに戻りワークフローから成功を選択し、処理をつなげてください。
プロセス実行タスクを右クリックし、ステップの実行をクリック。処理が正常に走るか確認してください。
すべて正常処理が確認(パッケージの実行)できたらパッケージに名前を付けて保存してください。

      


指定時間に処理を走らせたい場合は、SQLのジョブを設定してください。(詳細は下記参照。)



5.問題点
この方法での問題点はLhacaというアプリケーションが必要になるという点です。



6.ジョブ設定
ジョブからすべてのパッケージを連続して実行させる場合には下記の方法で処理することができます。

        a) 作成したパッケージを右クリックし、スケジュール設定をクリック。作成した数だけ作ります。
            ダイアログが表示されますが、ここではOKをクリックして閉じてください。

        


        b) 管理からジョブをクリック。その中に先ほど作成したジョブができていると思います。

        


        c) ジョブを1つにまとめます。最後に走らせるパッケージ以外のジョブを右クリックしてプロパティを開きます。
            ステップタブの編集をクリック。

        


            ステップ名とコマンドをコピーしてテキストエディタに貼り付けてください。コピーしたらウィンドウは閉じてください。

        


        d) 最後に走らせるパッケージのジョブのプロパティを開きます。新規をクリック。
            先ほどコピーしたステップ名とコマンドを貼り付けて、種類に「オペレーティングシステムコマンド」を選択してください。

        


            詳細タブで成功時の動作、失敗時の動作とも「次のステップに移動」を選択してください。OKをクリックして閉じます。

        


            最後に走らせるパッケージ以外にまだある場合は、上記を繰り返してください。


        e) 最後に走らせるパッケージのジョブを選択し、編集をクリック。

        


            成功時の動作「成功をレポートしジョブを終了する」、失敗時の動作「失敗をレポートしジョブを終了する」を選択します。
            OKをクリック。ここで、最後のパッケージが一番下になるようにステップの移動ボタンで移動させてください。

        


        f) スケジュールタブでスケジュールを設定してください。OKをクリック。

        


        g) 編集した以外のジョブは削除してください。

        


        h) 最後にバッチファイルの中の下記のようにLABELの指定と作成するフォルダを変数に代入する記述を
           追加していけば、いくつでも増やせます。


SET STEP=STEP_E02
SET FOLDER1=C:\download011
SET FOLDER2=C:\download022
GOTO LHA_PROC

:STEP_E02
	








Copyright (C) 2002 System Infinity Corporation. All rights reserved.