現在、あるSQL 20008マシンから別のマシンにデータを移動するために実行されるSSISジョブがあります。このジョブは、約 6 つのテーブルから約 200 万件のレコードを移動します。サーバーの負荷にもよりますが、これには約 5 ~ 10 分かかりますが、問題ありません。データは一時テーブルに移動されるため、サーバーへの負担以外に影響はありません。
しかし、私の問題は、そのデータをそれぞれのライブテーブルとマージしたいときです。これには、テーブルが空になってから再設定されるまでに約 15 分かかる場合があります。私が疑問に思っているのは、そのデータをテーブル間で移動する最も効率的な方法は何かということです。
現在のところ、その方法は次のとおりです。
drop tables
インデックスと制約を使用してテーブルを再構築します
insert into select データを移動し、
必要な計算を
実行します 次のコマンドを実行して、データの移動後にすべてのインデックスを再構築します。
sp_MSforeachtable @command1="print '?' DBCC DBREINDEX ('?')"
ユーザーのダウンタイムを最小限に抑えるには、もっと良い方法が必要だと思います。私が考えていたのは、2番目のテーブルセットを作成し、準備ができたらそれらの名前を変更することでしたが、それが最善の方法であるかどうかもわかりません.
また、テーブルを削除して再作成する必要がないため、より良いマージコマンドについて読んだところです。これは、すべてのデータが利用可能なままであることを意味しますが、ほぼすべての列を見ないとレコードが変更されたかどうかを知るのは難しいです.
助けていただければ幸いです。