5

DAC Fx と宣言型データベース開発の使用に飛躍することに興奮しています。私にとっての大きな障害は、複数の異なるバージョンのスキーマ間で複雑なデータ移行を処理する方法です。以前は、すべてのアップグレード スクリプトを順番に実行するだけで済み、データ移行時にスキーマが正しい状態にあることが保証されていました。アップグレード パスが動的な場合、これはどのように機能しますか?

たとえば、既存のインスタンスにいくつかのバージョンのスキーマ (DACPAC1-4) があるとします。

  • DACPAC1: tableA が存在し、重要なクライアント データが含まれています
  • DACPAC2: tableA は廃止され、tableB と正規化された tableC に置き換えられました。新しい tableD を追加します
    • 配置後スクリプト: データを tableA から新しい tableB および tableC に移動します。ドロップテーブルA
  • DACPAC3: tableC に新しい null 許容 columnX がある
    • デプロイ後スクリプト: tableD に基づいて null 許容列を設定します
  • DACPAC4: tableC.columnX は null 非許容です

DACPAC1 ~ 3 サーバーの最新の DACPAC4 へのアップグレードをサポートできるようにする必要がある場合、どの DACPAC が現在ターゲット上にあるかを検出し、データ移行を正しく処理するのに十分なほど巧妙な方法で、展開前および展開後のスクリプトを作成する必要があります。順番にステップします。さらに、最初に作成した単純なデプロイ後のスクリプトを単純に再利用することはできません。これらのスクリプトはスキーマの中間バージョンに依存しているためです。

アドバイスをよろしくお願いします!

4

1 に答える 1

0

私が通常行うことは次のとおりです。

  1. SchemaVersion というプロパティを含むシステム テーブルを作成します。すべてのアップグレード スクリプトは、最初に現在のバージョンを確認し、次にその内容を実行するかどうかを決定するようにプログラムされています。実行後、SchemaVersion をスクリプトに格納されている最新バージョンに設定します。

  2. 通常、MinAppVersion (現在のスキーマと互換性のある最小バージョン) と呼ばれる別のプロパティも含めます。アプリケーションがデータベースに接続しようとすると、現在のアセンブリ バージョンとデータベースに格納されている MinAppVersion が比較されます。バージョンが MinAppVersion 以上の場合、接続が確立されます。それ以外の場合は、例外がスローされます。

これが役立つことを願っています。敬具、

于 2012-08-31T04:31:28.883 に答える