新しい環境に移行される運用データベースがあり、プロジェクトが開発段階にある間に特定の列と特定の表のデータを匿名化する必要があります。今匿名化されたデータを含む大きな(280M行)テーブルの更新
UPDATE ThisTable SET Description = 'Anonymised ' + TableKey
問題は、テーブルのいくつかは、数百万行を持っているということです。たとえば -
サプライヤーは、データを置き換えるスクリプトを提供してきました。最大の行は284,000,000行です。
上記のステートメントは、もちろん、原因などなどロック、tempdbのと行バージョン、ログファイル、このようなテーブルのために働くことはありません
私は私が使用したスクリプトを持っているのどの前
1.ソーステーブルのPKの一時テーブルを作成します(そしてPKにインデックスを作成します):私はそれをやっているかの
現在のバージョン:本質は、以下のことを行います。
2.一時表から上位n個のPKを選択し、ソース表の適切な行を処理します。
3.ステップ2
から一時テーブルから
4反復を上位nのPKを削除これがうまく機能 - それは合理的な性能を与える(そしていくつかのメトリックが終了時刻を予測することができるようにし)。ただし、大きなテーブルで実行すると4日間の実行時間が予測されます。
私が行ったその他の措置は、データベースを単純復旧モードにすることです。
私たちはサーバーへの排他的アクセス権を持ち、それを使って「自分が望むことをする」ことができます。
コアの問題は、私たちが多数の行を話していることです。一つの考えは、BCP OUTをテキストファイルに変換し、オフラインで処理し、BCPを入力することです。しかし、まだ284,000,000行のテキストファイルを処理しています!
ASK:
これを達成する方法についての他の考えはありますか?これを行うための「シンプルな」方法が欠けていますか?名前すなわちテーブル名+一時
ステップ2とで
データを匿名化する方法のサンプルを提供していただけますか? – TheGameiswar
バッチで実行..... –
一度にすべてを更新しようとすると実際にどうなりますか?私はそれを分割することがなぜ速くなるのか分からない。一度、主キーに基づいてrow_numberを使用し、次にrow_number%10000 = 0を使用して検出された10分の1レコードごとにキーを書き留めました。 – Cato