none
SSIS 一括挿入タスク エラー フィールド ターミネータと行ターミネータ

    質問


  • 現在、SQL SERVER2005 ⇒ 2008 R2 へのサーバーリプレイス作業を行っています。

    SSISの一括挿入タスク
    (INPUTファイル:固定長のテキスト、 フォーマットファイル:XML以外のフォーマットを使用)
    をいくつか使用していますが、うち、1種類のSSISで、

    1.≪現象≫
       2005では、正常終了するが、
      2008にアップグレードしたSSISで実行すると、
      下記のようなエラーとなってしまいます。

    いろいろとネットで検索しましたが、適切な回答が見当たりませんでしたので、ご教示ください。

    2.≪参考≫
    ①テキスト容量:680MBくらい、1行サイズ:2500バイト
    ②別の容量の小さいテキストファイルで実行した場合は、2008でも正常終了します。
    ③フォーマットファイルのバージョンは【7.0】と古いまま使用していますが、
     (元は、SQL SERVER7.0のDTSで使用していたもの)
     バージョンを『9.0』または『10.0』に変更すると今度は『列番号が不正です』というエラーに変わります。


    3.【エラー内容】
     "リンク サーバー "(null)" の OLE DB プロバイダー "BULK" から行をフェッチできません。リンク サーバー "(null)" の OLE DB プロバイダー "BULK" により、エラーがレポートされました。プロバイダーからエラーに関する情報を取得できませんでした。一括読み込みに失敗しました。データ ファイルの行 124670、列 191 で、列が長すぎます。フィールド ターミネータと行ターミネータが正しく指定されていることを確認してください。"

    2012年4月8日 14:26

回答

  • SSISのエラー出力は、処理が多段階に呼び出されているので、ちょっとわかりにくいですが
    『データ ファイルの行 124670、列 191 で、列が長すぎます。フィールド ターミネータと行ターミネータが正しく指定されていることを確認してください。』
    というのが、エラーの本体です。
    この内容からすると 
    行 124670、列 191 の項目の『終わり』が判別できず、
    フォーマット定義のデータ長を超えていると判定されています。

    この手のエラーの場合は、まず、該当するデータを突き止めることから始めるのがいいと思います。
    (ファイルが大きいようなので、大変だとは思いますが)

     

    ちなみに、一括挿入タスクは、SSISのタスクですが、実態は、
    SQLServerのbcpコマンドをコールするだけのはずです。
    ですので、SSISではなく、bcpコマンドで実行してみるのもいいかもしれません。

    bcpのドキュメント
    http://msdn.microsoft.com/ja-jp/library/ms191479(SQL.100).aspx
    を見る限り、フォーマットファイルは、上位互換が保たれているようなので
    原因ははっきりしませんが。。。

     


    ---------------------------------
    Infospire Kayano

    2012年4月13日 7:49