2016-08-02 9 views
0

SSISパッケージを使用して、ライブサイトからデータをコピーしています。 コピーの途中でトランザクションが終了することがあるので、SSISがどのように処理するのか不思議です。SSISパッケージとデータの整合性

具体的には、トランザクションがSSISは、データをコピーされ、同時に2つのテーブルに書き込んで想像してみてください。最初のテーブルがコピーされた後にトランザクションが終了したとします。 SSISパッケージが最初のテーブルをコピーするとき、トランザクションからのデータは含まれません。次に、2番目のテーブルがコピーされるとき、SSISが状況を処理するために何もしなかった場合、データがコピーされます。データは同期していません。

はどのようにSSISは、データの一貫性を保証するために、これを処理しますか?

答えて

1

ソース・テーブルが更新/挿入されると、SQL Server用のデータベースが不明確であるため、読み取り操作はデフォルトでブロックされるため、トランザクションが完了するまでコピーは実行されません。一方、コピーが開始されると、トランザクションは読み取られているため、ソーステーブルに更新/挿入することはできません。 ssisは、ssisの対処(トランザクションが終了するまでssisが待機する)の前にトランザクションが発生した場合、またはトランザクションがssisの対処によってブロックされるため、テーブルが同期している場合に新しい行をピックアップします。

+0

これは、両方の操作がアトミックである場合に該当します。 SSISパッケージ内の複数のテーブルをコピーすることはアトミックな操作だと考える理由はありますか? – BWhite

+0

私は、それがデータを取得するためにssisによって発行された2つの別個のSQL文であるとは思わない。私はSQLでそれを行うことをお勧めします(1つのステートメントで、またはトランザクションなど)、データベースはこれを最善のコントロールがあります。 – thotwielder

0

SSISは、MSDTCによって処理分散トランザクションでこれに対処しています。 More info on MSDTC and Distributed Transactions from MS。 DataFlowまたはSSISタスクフローの一部のSequence Containerでtransactionsupportオプション= requiredを指定すると、分散トランザクションが開始されます。あなたの場合 - MSDTCのSSISはソースサイトでトランザクションを開始します。おそらくSerializable分離レベルであり、前述のコピー操作はトランザクションが完了するまでブロックされます。
このアプローチは完璧ではない - ソースは、分散トランザクションをサポートしており、MSDTC、ネットワークインフラストラクチャ上のいくつかの要件が満たされるべきで、ほかに、MSDTCはかなりパフォーマンスではありません。

関連する問題