私がこれまでに書いたすべてのETLについて、私はそれらをトランザクションにしたことはありません。つまり、テーブル4が失敗した場合、すべてをロールバックします。トランザクションとしてのETL
この点に関するベストプラクティスは何ですか? - それは、1つのトランザクションにそれらすべてをロールアップすることが可能である私は4つの他のパッケージを呼び出す1つのマスターパッケージを持っている:
EDIT「をBeginTran +コミット」する「BeginTran +コミット」するかしない
?
私がこれまでに書いたすべてのETLについて、私はそれらをトランザクションにしたことはありません。つまり、テーブル4が失敗した場合、すべてをロールバックします。トランザクションとしてのETL
この点に関するベストプラクティスは何ですか? - それは、1つのトランザクションにそれらすべてをロールアップすることが可能である私は4つの他のパッケージを呼び出す1つのマスターパッケージを持っている:
EDIT「をBeginTran +コミット」する「BeginTran +コミット」するかしない
?
begin + commitを管理可能なバッチサイズで指定します。毎晩1回のトランザクションに6時間のインポートをラップする必要はありません。多くの場合、2〜3分で完了できるサイズでバッチを保管してください。あなたがETLに失敗するデータ純度の問題を打つことになるので、少なくとも管理可能なものへの影響を減らしてください(つまり、完了するまでにはをもう一度にするロールバックを引き起こさないでください)。
SSISでは、私はいつもBegin Trans + Commit
です。私は、問題がなければパッケージを再実行できることを確認したい(または、実際にどの行が挿入されたのかを知る必要はない)。
これで、リカバリとクリーンアップが非常に簡単になります。
SQLトランザクションを使用するには、ETL内のデータをあまりに多く移動していることがよくあります(ログには、すべてのデータをロールバックして保存する必要があります)。私はパッケージが非破壊的に再実行できるようにパッケージを設計することを好む。理想的には、途中で死ぬとすぐに始めることができ、途中で途絶えたところでどこかで続けるように設定するのが理想的です。時にはそれにはパフォーマンスのペナルティがありますが、それはその価値があると思います。
技術的には、パッケージを1つのトランザクションにまとめることができます。事実上、そうではないかもしれない。