• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FTPタスクでエラーが発生した時、「実行結果」タブに表示されているエラーメッセージを取得するには?)

FTPタスクでエラーが発生した時のエラーメッセージの取得方法とは?

このQ&Aのポイント
  • Integration Servicesの「FTPタスク」を実行し、FTPサーバーに接続して対象のファイルを受信しています。対象のファイルが存在していない場合、エラーが発生し、パッケージが止まってしまいます。エラーメッセージは「実行結果」タブから確認することができます。
  • FTPタスクの「ExecValueVariable」に変数を設定すると、エラーが発生した場合に変数にエラーコードが代入されます。成功時は0、失敗時は1となります。エラーコードを取得して、スクリプトタスクで加工することができます。
  • FTPタスクを設定する際は、エラーメッセージを取得するために「実行結果」タブを確認することが重要です。また、エラーが発生した場合にエラーコードを取得できるように、変数を設定することも大切です。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

満足いく回答かわかりませんが、SSISメニューの「ログ記録」で、ログプロバイダを有効にし、FTPタスクのOn Errorイベントをトラップするように指定すればエラーメッセージを含むファイル(csv)を生成させることができます。そのファイルをFTPタスクのイベントハンドラで参照して必要な列だけ取り出せばいいかもしれません。 その場合は、ログファイルは処理中はSSISプロセスに抱えられてしまう可能性があるので、コピーしてから使う必要があるでしょうし、APPENDされるのでパッケージ開始時にファイルを削除する必要もあるでしょう。試行錯誤してみてください。

edo_1972
質問者

お礼

jamshid6さん、いつも回答していただき本当にありがとうございます。 そうですか。 せっかくアドバイスいただいたんですが今の私のレベルでは・・・ でも何とか実現したいと思っています。 こんな事を書いたら怒られるかも知れませんがお許し下さい。 「イベントハンドラ」を使うのは初めてでよく解りませんでした。 色んな事があり過ぎて混乱しています。 どのようにすればいいのでしょうか? 頼りっぱなして本当に申し訳ありませんが アドバイス宜しくお願いします。 失礼します。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.6

うーん、そうですか。ログファイルは起動時から抱えてしまうということですね。 ログファイル名を変更するのは実行順序から考えても難しいでしょうね。 ・パッケージ起動前にファイルを削除するようにパッケージの外で対応する(どうやって起動するかにもよりますが)。 ・SQL Serverのログプロバイダに書き込むようにする ・カスタムログプロバイダを作成する などもありますが、結局一番最後のメッセージだけ拾えばいいのではないでしょうか。

edo_1972
質問者

お礼

回答ありがとうございます。 jamshid6さんのいうように難しくて挫折しました。 別パッケージでFTPタスクのみのログファイルを削除するパッケージを作成して対応するようにしました。 本当にjamshid6さんのお陰様で作成する事ができました。 感謝します。本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.5

たかが数十文字のメッセージが切れるのはありえないですよね? では何文字(何バイト)だったら切れないと思いますか? その長さはどこかで設定できると思いませんか? そのフラットファイルの接続マネージャの設定を隅々まで見ていただければ見つかるはずですので、探してみてください。

edo_1972
質問者

お礼

回答ありがとうございます。 「フラットファイルソース」の「詳細エディタの表示」を選択して「フラットファイルソースの詳細エディタ」の「入力プロパティと出力プロパティ」タブでmessage列のデータ型を変更したら切られないでメッセージが取得できました。 「フラットファイルソースの詳細エディタ」を知りませんでした、すみませんでした。 申し訳ありませんが最後に質問させて下さい。 jamshid6さんのお陰様でログファイル(パッケージ全体とFTPタスクのみ)を分ける事ができたんですが、1つ問題が発生してしまいました。 FTPタスクのみのログの内容に前回、前々回の古いログが残っている為、メッセージを取得する際に全てのログのメッセージを取得されます。 試しに「ファイルシステムタスク」を「制御フロー」に追加してログファイルを削除しようとしたら案の定、「プロセスが使用されているため...」とエラーになりました。 何とかパッケージを実行する際にFTPタスクのみログファイルの内容をクリアする事は可能でしょうか? 本当に質問ばかりで申し訳ありませんがアドバイス、宜しくお願いします。

edo_1972
質問者

補足

お世話になっています。 FTPタスクのみのログファイルの作成する際にファイル名に実行日時を付ければ何とかできるのではないかと思い、これからできるかやってみます。

全文を見る
すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

>「サンプリングされたデータの最終行が不完全です。」 読み込んでいるのがログファイルなので、そのエラーメッセージは想定内です。 そのファイルからメッセージを取り出すのに支障はないはずです。 また、パッケージとFTPタスクで別のファイル接続マネージャを割り当てればそれぞれでログを書くことができます。 メニュー自体の動きは確かに怪しい部分があるのですが、何度か切り替えればちゃんと設定できるはずです。

edo_1972
質問者

お礼

いつもありがとうございます。 本当に感謝します。 ログファイルのmessage列の文字が長すぎて「フラットファイルソース」でエラーが発生したので「フラットファイルソースエディタ」を開いて「エラー出力」を選択し、「エラー」と「切り捨て」のコンボボックスを「エラーを無視する」を選んで実行したら正常にパッケージが動きましたが・・・ 一応、何とかエラーログから内容を取得する事ができました。 でもログの文字列が切られてしまいます。 どのようにすれば切られないで文字列を取得する事ができますか? 大変申し訳ありませんがアドバイス宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

・デバッグは普通に実行するだけでも結構です(「デバッグ」メニューで「デバッグ開始」をイメージしてはいましたが) ・イベントハンドラのステップに入った時点でログにはエラーメッセージが書き出されていますので、 普通にやればそのエラーメッセージを含んだ状態でファイルをコピーすることができるはずです。 (試しにやってみましたが、取れます)  もし取れないとしたら、ログの設定が誤っているはずです。ログのコンテナがFTPタスクではなく、1階層上のパッケージになっているのではないですか? ○コンテナがFTPタスクの場合  FTPタスクエラー発生→エラーログ記録→イベントハンドラ開始→ファイルコピー ○コンテナがパッケージの場合  FTPタスクエラー発生→イベントハンドラ開始→ファイルコピー→パッケージエラー発生→エラーログ記録

edo_1972
質問者

お礼

回答ありがとうございます。 返事が遅くなってすみません。 指摘される前の「SSIS ログの構成」のコンテナは以下のように設定していました。 [-][V]パッケージ名    [V]FTPタスク    [V]スクリプトタスク      ↓ [-][ ]パッケージ名    [V]FTPタスク    [ ]スクリプトタスク 上記の設定に変えてパッケージを実行したらログが出力されましたが・・・ 「イベントハンドラ」タブに「フラットファイルソース」を追加してました。 「フラットファイル接続マネージャ」の[新規作成]ボタンを押下してました。 「ファイル名」の[参照]ボタンを押下してコピーしたログファイルを設定して「列」を選択したら以下のメッセージボックスが表示されました。 「サンプリングされたデータの最終行が不完全です。  列または行の区切り記号が見つからないか、テキストが正しく修飾されていない可能性があります。」 コピーしたファイルをエディタで開いて、最終行(空白行)を削除して再度、設定したらメッセージボックスが表示されませんでした。 またパッケージ全体のログとFTPタスクのみのログを出力する事はできますか? 試しに「ログ記録」に新たに「テキストファイルのSSISログプロバイダ」を追加しましたが個々の設定ができませんでした。 聞いてばかりで本当に申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

そんなに難しくはありません。 1)「SSIS」メニューにある「ログ記録」で、「テキストファイルのログプロバイダ」を追加して、構成列にファイル接続マネージャを割り当てます。  対象タスクと対象イベントを指定できるので、FTPタスクとOnErrorをチェックします。  (この画面は変な動きをするので、なかなか思ったようにチェックさせてくれませんが、いろいろやってるとできるはずです) 2)ここで一回デバッグして、ログファイルを吐き出してみてください。  MESSAGE列にメッセージが入っていると思います。 3)あとは「イベントハンドラ」タブで「FTPタスク」の「OnError」のところに、普通にタスクを置いていくだけです。  イベントハンドラタブの内容はそのイベントが起きたときに実行されるものです。  ログファイルにこの時点でログが書かれていますが、ファイルはSSISが抱えているので、そのままではデータソースには使えません。  なので、ファイルシステムタスクを置いて、その時点のファイルをコピーして、コピーした方を使います。  フラットファイルとして読み込んで、MESSAGE列の内容を取り出せばいいでしょう。 ログは他の場所にも書き出せますから、本当はSQL Serverに書き出して使うのが一番ですが、上記のとおりにすればファイルでもいいかと。

edo_1972
質問者

お礼

jamshid6さん、いつも回答いただき、本当にありがとうございます。 > 1)「SSIS」メニューにある「ログ記録」で... 1-1.「ファイル接続マネージャ」を追加して「使用法の種類」を「既存のファイル」に設定し、「ファイル」を下記のように入力しました。 ・C\log\ftp_log.log 1-2.アドバイスいただいたように設定しました。 > 2)ここで一回デバッグして、ログファイル... デバッグの仕方がわからなかったのでデバッグ無しでパッケージを実行してログファイルを開いて内容を確認したらエラーメッセージが出力されました。 「スクリプトタスク」のソースコードでブレークポイントを貼る方法はわかるんですが・・・ 的外れな事を書いていたらすみません、どのようにデバッグするのでしょうか? ※現在は「制御フロー」タブに「スクリプトタスク」と「FTPタスク」を追加しています。 フローの順番は下記の通りです。 「スクリプトタスク」    ↓ 「FTPタスク」 > 3)あとは「イベントハンドラ」タブで... 現在、「イベントハンドラ」タブに下記の手順でタスクを追加しています。 3-1.ファイルコピー用に「ファイル接続マネージャ」を追加して「使用法の種類」を「ファイルの作成」に設定し、プロパティから「Expressions」で「ConnectionString」に作成した変数を指定しました。 3-2.「スクリプトタスク」を追加して、3-1で作成したファイルコピー用の「ファイル接続マネージャ」の「ConnectionString」に指定した変数にパス名を格納しました。 3-3.「ファイルシステムタスク」を追加して下記のように設定しました。 ・「SourceConnection」→ 1-1で追加した「ファイル接続マネージャ」 ・「Operation」→「ファイルのコピー」 ・「DestinationConnection」→ 3-1で追加した「ファイル接続マネージャ」 フローの順番は下記の通りです。 「スクリプトタスク」   ↓ 「ファイルシステムタスク」 ログファイルのコピーはできたんですが、コピー元のログファイルの内容とコピー先のログファイルの内容が異なってしまいました。 コピー元のログファイルの内容には「FTPタスク」で発生したエラーメッセージが出力されていますがコピー先のログファイルの内容にはパッケージの開始までのログが出力されていました。 申し訳ありませんが再度、アドバイス宜しくお願いします。

edo_1972
質問者

補足

度々、申し訳ありません。 「この回答へのお礼」の最後に記述したコピー元のログファイルの内容とコピー先のログファイルの内容が異なる件ですが私の勘違いかもしれません。 エラー時にコピーされているからコピー先とコピー元の内容が異なるのは当たり前ですよね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • FTP接続で550エラー発生

    FTP接続で550エラー発生しました。 原因なるものが全く分からず、探しています。 お力をお貸しください。 [現状] ホストには接続できます。 ・使用ツールはFFFTP ・PASVモード ・LISTコマンドでファイル一覧取得にチェック入り ファイル一覧の取得は正常に終了。 ルート直下のディレクトリ(wp)に移動する際に >CWD wp 550 wp: No such file or directory とエラーメッセージが出ます。 wpディレクトリはwordpressで、ブラウザからアクセスできます。 [エラーが発生した経緯] サーバー管理者ではないので詳しい設定はわかりませんが、 wordpress設置直後はwpディレクトリ以下にアクセスできました。 wpディレクトリ以下のパーミッション設定を変更(恐らく707) それからタイトルのエラーが発生いたしました。 よろしくお願いします。

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。

  • FTPにアップロードすると、エラーが発生しまし。

    XPを使っています。FTPですが、ファイルをアップロード中、エラーが発生して、HPの更新ができなくて困っています。次の文が出てきます。「FTPサーバーにファイルをコピー中エラーが発生しました。このサーバーにファイルを置くアクセス許可が与えられているか確認してください」とでてしまいます。容量はまだたっぷり残っています。ただ、エラーしたフォルダーの中に間違って全角のファイルが入っていました。エラー数字は200、227、553です。

  • アップロード時にFTPエラーで、元々あったファイルが真っ白に!!

    Dreamweaverでアップした際に、FTPエラーで「ファイル操作が不完全です。1 個のファイルまたはフォルダが完了しませんでした。」と表示され元々リモートにあったファイルは表示すると真っ白になってしまいました! エラーの詳細は「アクセスが拒否されました。ファイルが存在しないか、 権限に問題がある可能性があります。 サーバーに対する適切な権限があることと、サーバーが正しく設定されていることを確認してください。」です。 ディレクトリも特に変更していなく、Passiveモードです。いつも通り行いました。他のFTPソフトでもやっても同じくエラーが出てしまいます。 かなり緊急なのでお分かりの方いましたらお願い致します!!!!!

  • Integration Servicesについて

    初めて投稿させていただきます。 宜しくお願いします。 SQLServer2005の「Integration Services」を使用してFTPでファイルを取得してテーブルに格納するパッケージを作成したいと思って ネットで調べていますが、私の望むようなサイトが見つかりませんでした。 取得したファイルが暗号化されています。 調べたいのは「Integration Services」からファイルの復号化を実行する方法です。 このファイルを復号化するにはどうすればいいのでしょうか? これで調べて2日、無駄にしてしまいました。 わらをつかむ思いで投稿しました。 申し訳ありませんがご教授お願いします。 では、失礼します。

  • 2003serverからFTP接続時にエラー

    2003serverからFTP接続時にエラーが発生します。 ftp://username:password@ftpserverIP/ ←IEで入力 ↓ エラー 「FTPサーバーのフォルダを開こうとしてエラーが発生しました。このフォルダへのアクセスが許可されているかどうか確認してください。」 上記の場合に問題箇所を特定したいのですが、 1,クライアント 2,FTPサーバ 3,ネットワーク設定(ポート等) で対象外となるものはあるのでしょうか。 例えば、2か3が原因 等

  • FTP接続中のコマンド実行結果を変数に入れる方法

    Linuxのシェルを作成しており、その中でFTP接続をしてます。 接続先の特定のファイルのファイルサイズをチェックして、それを変数に入れたいのですが、 変数に入れる部分がわかりません。 Linux内の特定のファイルをFTPで転送して、転送後のファイルサイズが一致してるかをチェックするために上記の対応を行ってます。 FTP接続後に以下のコマンドで、ファイルサイズが調べられることは解りました。 quote SIZE ファイル名 この結果を変数に代入するにはどうすればいいでしょうか? FTP接続中にそのような対応は可能なのでしょうか? ちなみに、Linux上では既にファイルサイズを取得している(変数に入れてある)ので、 あとは、この変数と、FTP上で取得したファイルサイズの比較をやりたい。といった状況です。 FTP側で取得したファイルサイズを変数に入れられず困っています。 変数代入方法等ありましたらご教授願います。

  • 【緊急】FTPエラーが発生してしまいアップロード出来ません

    こんにちは。仕事の合間に失礼します。 HPのアップロードを行なったのですが、アップロードが出来ないファイルがあります。他は全て出来たのですが…。 何度もPUTを繰り返しているのですが、同じ結果になります。 ちなみにDrameWeaver8のFTPでアップしています。 以下、エラーメッセージです。 『ファイル操作が不完全です。1個のファイルまたはフォルダが完了しませんでした。 【詳細】 ○○.html - エラー発生 - FTP エラー が発生しました。 - ○○.html を PUT できません。 アクセスが拒否されました。ファイルが存在しないか、権限の問題が考えられます。 ファイル操作が不完全です。1 個のファイルまたはフォルダが完了しませんでした。 エラーのあったファイル :1』 タグの関係なのでしょうか? それともFFFTPを使った方がよいのでしょうか…。 どうすればよいか分からないでいます。教えてください…。

  • タスク実行時のウィンドウを非表示にしたい

    お世話になります。 Windows2000のマシンを使用しています。 約10分おきにバッチファイルを実行するようなタスクを 設定しています。バッチファイルの内容は簡単な ファイルコピーコマンドです。 そこでタスクを実行されるときDOS窓みたいなウィンドウが一瞬 表示されてすぐ消えるのですが、毎回表示されるのは見苦しいので 非表示にする方法を探しています。 バッチファイルのショートカットを作成してそのプロパティで 画面サイズなどを変更しましたが変わりませんでした。 ご存知の方居られましたらご教授願います。

  • HPをFTPサーバーで転送するとエラーが発生しましたというメッセージ・・転送できません

    ホームページ初心者です。PC操作自体苦手です・・。 HPビルダー10の、かんたんページ作成(入門用PCページ)で作成しましたが、FTPサーバーを使い転送するとしばらく固まってしまいます。 その後、ファイル転送中にエラーが発生しました。と言うメッセージが表示されます。Web上で確認しましたが、転送されていませんでした。 入力違いが無いか何度か入力し直しましたが、エラーメッセージは同じでした。 アドバイスいただけたら嬉しいです。