2011-06-27 8 views
0

私は、一部のプロセスフロー、スクリプト、およびストレートデータのインポートにSSISを使用しています。私がSSISから呼び出しているストアドプロシージャ内で、SQLのタスクを実行すると、ほとんどのデータの消去と変換が行われます。ほとんどのsprocsにとって、何らかの理由で失敗した場合、私は実際にトランザクションをロールバックすることに本当に気をつけません。私のSSISのエラー処理は、本質的にステージングデータをすべて消去し、そのエラーをテーブルに記録します。 (人間がその時点で基礎となるデータの問題を修正する必要があります)ストアドプロシージャを使用したSSIS 2008トランザクションのベストプラクティス

私の質問はbegin tran、end tranを中心に展開しています。ストアドプロシージャが失敗し、呼び出し元のSSISプロセスに知らせていない場合がありますか?ハードウェア障害、ロックタイムアウトなどを探しています。

可能な限りトランザクションを使用しないようにしたいのですが、SSISのエラー処理に頼っています。

思考?

答えて

1

私は一度考えることができます(とトランザクションはどちらも助けにならないでしょう)ストアドプロシージャは、レコードを更新または挿入しなかった場合です。これは失敗ではありませんが、SSISパッケージの場合は必要です。影響を受ける行の数を返し、それを確認することができます。

最終インポートからかなり離れた数値がデータの問題を示している一部のインポートでもこれを行います。したがって、通常、インポートBのクライアントAから100,000レコードを取得し、代わりに5000を取得した場合、SSISパッケージは、人間がそのファイルを見て、ファイルが悪いと見なされるまで、または彼らが本当に労働力または顧客を削減することを意味するリスト。

ちなみに、私たちは2つのテーブルにステージを張っています(生の変更されていないデータとクリーニングのために使用します)。SSISパッケージの失敗は、データの問題点を簡単に確認したい場合、データが最初から間違っていたかどうか、あるいは何らかの理由で掃除プロセス中に間違って紛失したり固定されたりしたかどうかを教えてください。エラーが記録された場所は実際にエラーが発生した場所ではない場合があります。変更された後も変更されていない場合もありますが、悪いデータがある場合もあります(ほとんどの場合大丈夫ですが)。すべてのprocsを最後のステップとしてロギングテーブルに挿入するパッケージにバブリングされていない実行が失われている可能性がある場合は、次のステップを実行する前にレコードが存在することを確認してください。

+0

素晴らしい点。私は実際に更新を見ているだけでなく、カウントを挿入します。私はまた、SQLサーバーで生の変更されていないデータを保持していませんが、問題のあるファイルの実際の行番号を記録しています。そうすれば、問題が何であるかをSQLで調べる必要はありません。 –

+0

私は100万を超えるレコードを持つファイルを持っています。問題のレコードを見つけるためにテーブルをクエリする方が簡単です。しかし、正確な行番号も記録します。 – HLGEM

+0

私は理解します。私たちのファイルは、20Kレコードの行にあります。アナリストは、基本的にExcelを使用してファイルを開いてレビューします。 –

関連する問題