1

フラグとフィールドが多いテーブルを 1 つ取り、それを小さなテーブルに分割したいと思います。修正/分解する親テーブルには、注意して処理する必要があるライブ データが既に含まれています。

これが私の攻撃計画です。今週末、誰もシステムを使用していない間に実行したいと考えています。

  1. 必要な新しいテーブルを作成します
  2. 既存の親テーブルの名前を ParentTable から ParentTableOLD に変更します。
  3. 不要なフィールドを削除し、新しいフィールドを追加して、ParentTable という名前の新しいテーブルを作成します。
  4. ParentTableOLD のエントリを新しいテーブルにコピーする手順を実行し、必要に応じて古いデータを新しいテーブル/フィールドにマッピングします。
  5. ParentTableOLD テーブルを削除します

上記は私にはかなり合理的でシンプルに思えますが、うまくいくと確信しています。これを達成するための他の手法 (私が思いつくのは上記の方法だけです) や、整理整頓に役立つあらゆる種類のツールに興味があります。今、私はペンと紙で走っています。

私が尋ねた理由は、今まで何回か、よくわからなかったという理由だけで車輪の再発明を行っていたからです。これを行うのに役立つ方法」または「これを行う簡単な方法があります。」誰かが立ち寄って「コードをステップ実行するためのブレークポイントについて知っていますか?」と言う前に、Visual Studio で何ヶ月もコーディングを行いました。---人生が変わる、はぁ。

SSMS を備えた SQL Server 2008 R2 を使用しています。

4

4 に答える 4

1

「_old」テーブルの作成を支援するための良いトリックは次のとおりです。

SELECT  *
INTO    mytable_old
FROM    mytable

SELECT INTO は、すべてのデータをコピーし、1 つのステップでテーブル作成します。

つまり、実際には現在のテーブル名を保持し、代わりにすべてを別のスキーマにコピーします。これにより、すべての名前に '_old' を追加するよりも (必要に応じて) クエリとレポートを古いスキーマで実行するように調整することがはるかに簡単になります (代わりにスキーマ名を検索/置換することができるため)。

于 2012-09-28T02:50:41.937 に答える
0

これは実際の問題全体に対する答えではありませんが、ステップ 4 で役に立つと思われるいくつかのツールは、RedGate のSQL CompareData Compareです。SQL Compare はスキーマの移行を実行し、Data Compare はデータの移行を支援します。新しい列や新しいテーブルへのデータの移動、デフォルト値の入力、開発から本番への同期などを行うことができます。

運用データを使用して開発環境で変更を加えることができ、プロセスに満足したら、運用環境で実際の移行を行います。

于 2012-09-28T04:31:45.373 に答える
0

可能であれば、これは何よりもまずある種のテスト環境です。データベースに依存する外部アプリケーションがある場合は、それらがすべて問題なく変更された構造に対して実行されることを確認してください。

また、名前を変更しようとしているテーブルを参照している可能性のあるデータベース オブジェクトを検索します。例えば;

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%MyTable%'

新しいスキーマと古いスキーマの間のクエリから、ある種の機能的同等性を試してみてください。名前を変更したテーブルに対して実行できるいくつかのクエリを用意し、再加工されたスキーマで新しいテーブル構造を参照できるようにします。このようにして、返されるデータが両方の構造で同じであることを確認できます。可能であれば、変更を行った後に一連のチェックを行うだけで済むように、事前にこれらをすべて準備しておきます。違いがある場合は、変更を続行するか元に戻すかを決定するのに役立ちます。

最後に、壊滅的な事態が発生した場合に古いスキーマに戻す方法を検討するための計画を立ててください。新しいテーブル構造をしばらく使用していて、重大な問題を発見した場合、古いテーブルに戻して、変更したテーブル構造から古いテーブルにデータを正常に戻すことができるでしょうか? 基本的には、ボーイスカウトのルールに従って準備をしてください。

于 2012-09-28T03:34:08.093 に答える
-1

データベースのバックアップを作成し(参照:http://msdn.microsoft.com/en-us/library/ms187510.aspx)、必要な手順を実行できます。すべてがうまくいったら、先に進んでください。古いデータベースを復元してください(参照:http://msdn.microsoft.com/en-us/library/ms177429.aspx)たとえば、バックアップを作成するこのプロセスを自動化することもできます。毎週。

于 2012-09-28T02:10:11.990 に答える