1

あるデータベースから別のデータベースへのデータのサブセットの瞬間にデータ移行を行っています。

ソースデータベースからターゲットデータベースにデータをドラッグする社内ORMと通信する.netアプリケーションを作成しています。

プロセス全体をトランザクションスコープに入れて、問題なくコミットできるかどうか疑問に思っていました。

おそらく約1ギガのデータを移動すると思います。

パフォーマンスは問題ではありませんが、トランザクションスコープ内に含めることができる変更されたデータまたは新しいデータの量に制限はありますか?

4

2 に答える 2

2

ログ ファイルの物理サイズ以外に制限はありません (必要なサイズは、移行されたデータのサイズよりもはるかに大きいことに注意してください。また、エラーが発生し、非常に長い時間がかかる可能性があるトランザクションをロールバックする場合についても考慮してください。時間。

元のデータベースが比較的小さい (< 10 ギガ) 場合は、バックアップを作成し、トランザクションなしでログなしで移行を実行します。

問題がある場合は、バックアップから復元してください。

(このためにデータベースをオフラインにできると仮定しています - ライブ中に移行を行うことは、まったく別のワックスのボールです...)

ライブ中にそれを行う必要がある場合は、トランザクション内で小さなバッチで行うことが唯一の方法です。

于 2011-03-16T23:02:22.017 に答える
0

異なるサーバー間でデータをコピーしていると思います。

あなたの質問への回答として、そのような制限はありません。ただし、これが良いアイデアかどうかに影響を与える制限要因があります。主なものはロックとロックの競合です。すなわち:

  • サーバーが他のクエリに使用されている場合、実行時間の長いトランザクションによって他のユーザーがロックアウトされる可能性があります。
  • 一方、サーバーが使用されていない場合、トランザクションは必要ありません。

その他の提案:

  • インクリメンタルで割り込み可能になるようにコードを書くことを検討してください。つまり、一度に少しずつ実行し、中断したところから続行します。これには、多くの小さなトランザクションが含まれます。

  • ターゲット データベース内の一時テーブルまたはステージング テーブルにデータをロードすることを検討してから、ストアド プロシージャまたは SQL バッチを使用して、そのソースから更新するときにトランザクションを使用します。それをトランザクションに入れるのにそれほど苦労する必要はありません。同じサーバー上にあるため、はるかに高速になるはずです。

  • オプションとして SSIS も検討してください。実際、私は SSIS について何も知りませんが、この種の処理が得意なはずです。

于 2011-03-16T23:03:09.700 に答える