TimberLandChapelのTech Blog

TimberLandChapel が提供する技術Tips,思いつきメモ,雑感ブログです。
Office 互換リボン Release 1.0 をリリースしました。

購読

Books

INETAJ

Microsoft

SQL Server

TLC.com

クリエイティブ・コモンズ

情報処理関係官公庁

今期のアンケート

【SSIS Lightning】テキストファイルの SSIS ログを実行時の日付で構成する
シナリオと要件

[SSIS] パッケージにはログを記録する機能が備わっています。これは [ログ記録] を使用して構成します。
このログ記録は,通常は固定されたテキストファイルに記録します。
ここでのシナリオはこのログファイルを固定されたテキストではなく,実行時の日付を含んだファイル名にします。

この記事は,
SQL Server 2005 Developer Edition Service Pack 1
に基づいて記述しています。

SSIS ログを構成する

まずは通常通りログを記録する構成を行う必要があります。
ここでは前段階として固定テキストのログを構成します。
この固定テキストのログを後から変更していくことになります。

[SSIS] > [ログ記録] をクリックして [SSIS のログ構成] ウィンドウを表示します。

[プロバイダとログ] タブで [テキスト ファイルの SSIS ログ プロバイダ] を追加します。
    ここでは2種類の方法でログを出力するため,ログプロバイダを2つ用意します。

[構成] をクリックして [<新しい接続>] をクリックして [ファイル接続マネージャ エディタ] を表示します。

[使用法の種類] を [ファイルの作成] に,[ファイル] に適度なファイルパスを指定します。
    このファイルパスは後で動的に書き換えるため,実際に存在するパスでなくても問題ありません。

今回はパッケージの実行を記録できればよいので, [OnPostExecute] イベントを有効にしています。


  ヒント 
ログに書き込む情報について
ログに書き込む情報は,[SSIS のログ構成] ウィンドウの [詳細] タブで設定します。
パッケージのログやタスクコンテナごとのログを構成することができます。

ログの出力パスを直接動的に設定する

一つ目のログ出力ファイルのファイルパスを動的に設定します。
基本的な考え方は,[SQL Server 2000] の [DTS] における [動的プロパティ] タスクを用いた実行時の接続設定を書き換えるということになります。
[SSIS] では [動的プロパティ] タスクが存在しない代わりに,[Expressions] を設定することでさまざまな動的な設定を反映することができるようになります

まず,最初のログでは, [フラットファイル接続] のパスを直接 [Expressions] で書き換えることでパスを変更します。

[接続] ペインの構成する接続を選択して [プロパティ] を表示します。

[プロパティ] の [Expressions] のビルドボタンをクリックして [プロパティ式 エディタ] を表示します。

[式] のビルドボタンをクリックして [式ビルダ] を表示して式を構成します。

設定する式
"C:\\Temp\\" +
SUBSTRING( REPLACE((DT_WSTR, 50) GETDATE(), ":", "_" ), 1, 16)
+ ".TXT"

この式は,[GETDATE()] 関数で現在の時間データを取得して,ファイル名として不適切な [:] と [.] を無害化してファイルパスを構成しています。


  ヒント 
式について
式の構文については,[Integration Services の式のリファレンス] を参照してください。
http://msdn2.microsoft.com/ja-jp/library/ms141232.aspx
ms-help://MS.VSCC.v80/MS.VSIPCC.v80/MS.SQLSVR.v9.ja/extran9/html/8b80403f-6d45-4001-8b12-25a933c663a2.htm

式内でのディレクトリ分割子のエスケープについて
式の中では文字列リテラルを設定できますが,文字列リテラルの中でも [\] を設定するためにはエスケープする必要があるようです
このあたりが,VBS などとは少し勝手が違って惑うところですね。



これで,この接続は実行時に日付を含んだパスに再構成されます。
ただし,この構成ではログ記録が発生するタイミングでいくつもの時間を含んだファイルが作成されてしまいます
これを防ぐために,次の項では固定されたファイルパスをあらかじめ作成してログを記録します。

ログの出力パスを変数に格納して固定的に使用する

ログファイルのパスは,パッケージの実行時に一度だけ構成すれば問題ないことになります。
これを実現するために,パッケージスコープで作成した変数に日付を含むファイルパスを格納して使用します。

パッケージスコープを持つ文字列変数を作成します。
変数を選択して,変数の [プロパティ] を表示します。

[EvaluateAsExpression] プロパティを True に設定します。
    これを行わないと,変数の [Expression] は動作しません

2つめの [フラットファイル接続] の [Expressions] を構成します。
    [プロパティ] を [ConnectionString] に,
    [式] を [変数名] (ここでは「@[User::LogPath]」)に設定します。

設定する式
"C:\\Temp\\" +
SUBSTRING( REPLACE((DT_WSTR, 50) GETDATE(), ":", "_" ), 1, 19)
+ ".TXT"

この構成を行うことで,
パッケージ実行開始時の日付を含んだログパスに一貫してログを記録することができるようになります。


  ヒント 
[式の評価] について
[式の評価] ボタンを使用すると,現在定義されている式が評価された場合の値を [評価結果] 欄に表示することができるようになります。

written by TimberLandChapel

Published 2006年6月6日 23:55 投稿者 timberlandchapel

コメント

# 【SSIS Lightning】ライトニングコンテンツに記事を追加しました。@ 2006年6月7日 0:03

[SSIS] のライトニングコンテンツに記事を追加しました。

テキストファイルの SSIS ログを実行時の日付で構成するhttp://blogs.timberlandchapel.com/blogs/timberlandchapel/articles/810.aspx...

# re: 【SSIS Lightning】テキストファイルの SSIS ログを実行時の日付で構成する@ 2006年9月8日 15:03

質問させてください。

このやり方は、フラットファイル接続マネージャーでも使えるんでしょうか?所定のプロパティウインドウで、ファイル指定されますが、プロパティ式で指定されたものとどちらが優先されるのでしょうか?

by Esoteric

# re: 【SSIS Lightning】テキストファイルの SSIS ログを実行時の日付で構成する@ 2006年9月14日 9:36

特に試していませんが,
原理は同じなので,
ConnectionString を式で上書きできれば可能だと思います。

実行時に Expression が評価されて,接続が更新された値で評価されます。