0

「マスター データベース構造」があり、クライアント サイトのデータベース構造を最新の状態に保つルーチンが必要です。

関連する質問には多くの提案がありましたが、次の行に沿って、より具体的な解決策を探しています。

  1. データベース構造全体を記述したテキスト ファイル (XML またはその他の読み取り可能な形式) を生成したいと考えています (これはバージョン管理に入る可能性があります)。このルーチンは社内で実行され、製品の次のバージョンで配布されるデータベース スキーマ ファイルを提供します。
  2. 次に、マスター データベース構造に対応するように、クライアント サイトのデータベース構造を更新する方法が必要です。(つまり、データベース構造のさまざまなバージョンの多数の変更スクリプトを追跡する必要はありませんが、クライアント データベース構造を現在のマスター データベース構造に更新できる、より一般的なルーチンを追跡する必要はありません。)

したがって、私が探している主な機能は、「データベース構造からテキストへ」および「テキストからデータベース構造へ」と表現できます。

4

2 に答える 2

1

スキーマとストアド プロシージャ、および 2 つのデータベース間の制約の違いを示す ことができる diff ツールがたくさんあります。独自に作成することもできますが、複雑なスキーマを使用している場合は、これらのツールの 1 つよりも高価になると思います。多くの場合、テストできるように無料試用版を提供しています。

問題は、そうするために master データベースをオンラインにし、クライアントデータベースのインストール (またはそこにインストール) からアクセスできるようにする必要があることです。

そうしない場合、私が考えることができる他の唯一の健全なオプションは、移行のアイデアを使用し、SQL スクリプトとバージョンのペアのリストを保持し、各データベースの現在のバージョンを保持することです。これは、クライアントのデータベースのバージョン番号と変更のリストから単一のスクリプトを生成できる別のツールによって統合できます。変更のリストがない場合は、差分ツールの実行から開始して、そこからそれらを追跡できます。

あなたが好むと思われるテキスト ルートの比較 (両方のスキーマのテキスト SQL ダンプの比較) は、正しく自動的に実行するのが非常に難しいように見えます。

于 2008-10-07T09:40:47.670 に答える
1

Several popular strategies are variants of this:

  • Add a table to the database:
    CREATE TABLE Release
    (release_number int not null,
    applied datetime not null
    )
  • Each release, as part of its release script inserts a row into this table.
  • You can now find out with a single query which release each client is running, and run all the releases between that one and the release they want to be running.
  • In addition, you could check that their schema is correct for each version (correct table names, columns, etc.) by doing something like this:
    SELECT so.name,
    sc.name
    FROM sysobjects so,
    syscolumns sc
    WHERE type = 'U'
    ORDER BY 1, 2
  • then calculate a hash of the result and compare it with a pre-computed hash (generated by running the query on your reference installation) to see if the installation is now correct.
于 2008-10-07T12:45:16.237 に答える