2011-01-05 18 views
0

あるSQL Serverインスタンスから3000個の奇数行を別のインスタンスにコピーする必要があります。SSISを使用してSQL Server間でデータをコピーする

宛先には、ライブウェブサイトで使用されている既存のデータがあります。

SSISのデータフローを使用すると、SQLビューを使用してソースからデータを取得し、それを宛先テーブルにインポートする転送が挿入されました。これにより、外部サイトでデータが最新に保たれます。

私が達成したいのは、何らかの理由でSSISが失敗した場合、宛先テーブルが空のままではないため、外部サイトの機能が壊れてしまうことです。

SSISはこのパッケージで使用されているタスクが1つだけなので、これをアトミックにしますか?すなわち、データのコピー中に失敗した場合、宛先テーブルを空にするか、または部分的に完了しない。

更新:「置換」しなかった感を指摘する人に おかげ - それは私たちが代わりにコピーオブジェクトの機能を使用し、私たちが持っていた以前の試みでした。

現在、コピーでは3000行ありますが、次に実行すると同じ3000行に再配置されます。私は何が起こる必要があることは何かが

  • うまくいかない場合には何もしなかった場合は、ソース
  • からのデータの上に先テーブルに
  • コピーを切り捨て、どこか安全な既存の宛先データを保持し、次の

    • を持つことです間違って、宛先テーブルを切り捨て、バックアップされたデータをインポートします。

    SSISでこれを行う最善の方法は何ですか?

    おかげ

    グレアム

  • +1

    「置換」を使用して「インポート先テーブルにインポートする」とはどういう意味ですか?あなたは何をしているのかを示すために、各ステップごとにDDLを提供できますか? – Kenneth

    +0

    私は今質問を更新しました。私は間違いなくそれがReplaceだったと言いました。 – Graeme

    答えて

    0

    私は、単一のタスクが失敗しなければならなかった(PK違反など)とコピーされた行はロールバックされません、私は、タスクを再起動する前にそれらを削除する必要があります。

    テストする必要があります。

    「置き換える」とは何を意味するのかわかりません。

    あなたは既存の行を置き換えていますか?既存の行を更新しますか?

    1

    途中で何かが失敗した場合は、ロールバック(元に戻す)するトランザクションを探しているようです。

    それはすべてかどうかです。

    SSISはトランザクションを非常にうまく処理します。

    This articleは、いくつかの行を削除することから始めて、あなたの状況に似ています。

    一つの重要なステップがあります:

    としてだけでどの程度の特性がパッケージ レベルで存在するTransactionOption、コンテナレベル(Forループなど、 Foreachループ、シーケンス、など)だけでなく、制御フロータスク (たとえば、SQL実行タスク、データフロー タスクなど)。データをマージ検討し、その代わりキル・アンド・フィル戦略の

    * Required - if a transaction exists join it else start a new one 
    * Supported - if a transaction exists join it (this is the default) 
    * NotSupported - do not join an existing transaction 
    
    0

    :TransactionOptionは、次のいずれかに セットすることができます。あなたのオリジナルのテーブルベース

  • は元
  • 切り捨て、STGからの新しいデータでSTG
  • 更新BASEへのインポート(ビジネスでの参加として設定されたのと同じ列を持つSTGのテーブルを作成しますと呼ばれる

    • できます
    • )キーこの方法は、ダウンタイムゼロを有するシームレスINTEの利点を有する

    存在しないSTGからベースへの挿入卒業。

  • 関連する問題