データベース項目にソース管理を使用していますか?[閉まっている]


596

データベーススキーマの変更をバージョン管理するための確実なプロセスがないため、ショップに穴が開いているように感じます。私たちは多くのバックアップを行っているため、多かれ少なかれカバーされていますが、この方法で最後の防御線に依存することは悪い習慣です。

驚いたことに、これは一般的なスレッドのようです。データベースは頻繁に変更されないため、この問題を無視するように私が話した多くの店は、基本的に細心の注意を払うようにしています。

しかし、私はその話がどうなるか知っています。物事がうまくいかず、何かがなくなってしまうのは時間の問題です。

このためのベストプラクティスはありますか?あなたのために働いたいくつかの戦略は何ですか?


ポッドキャスト54の終わりに議論されました。blog.stackoverflow.com/ 2009/05 / podcast
Chris Moschini 2013

回答:


387

バージョン管理下でデータベースを取得する必要があります。K.スコットアレンによる一連の投稿を確認してください。

バージョン管理に関して言えば、データベースは多くの場合、二級または三級の市民です。私が見てきたことから、100万年以内にバージョン管理なしでコードを書くことを決して考えないチームは、当然のことながら、アプリケーションが依存する重要なデータベースのバージョン管理の必要性にまったく気づかない可能性があります。データベースが他のコードと厳密に同じ厳密なレベルのソース管理下にない場合に、ソフトウェアエンジニアと自分を呼んでまっすぐな顔を保つ方法はわかりません。これをあなたに起こさせないでください。データベースをバージョン管理下に置いてください。


1
私は参考文献に記載されている方法論に非常に厳密に従っています。すべてのレベルを実装する必要はありません。同じように機能するバリエーションがあります。このシステムは柔軟性があり、簡単にカスタマイズでき、スキーマとデータの変更をきめ細かく制御でき、データベースソース制御のベストプラクティスとして非常によく機能します。トリッキーになる可能性があり、残りのプロセスとほぼ同じくらいセキュリティを追加する部分は、スクリプトの管理に役立つツールです。ファイルの連結のように単純な場合もあれば、自動デプロイメントのように複雑な場合もあります。最初にsrc ctrlを取得し、次にツールについて考えます。
ulty4life 2010年

1
データベース用のGit / GitHubのような、Klonioと呼ばれるデータベース用の分散バージョン管理システムがあります。
Augiwan

134

データベース自体?番号

それらを作成するスクリプト(静的データ挿入、ストアドプロシージャなどを含む)。もちろん。これらはテキストファイルであり、プロジェクトに含まれており、他のすべてと同様にチェックインおよびチェックアウトされます。

もちろん、理想的な世界では、データベース管理ツールがこれを実行します。しかし、あなたはそれについて訓練されなければなりません。


7
Mysql Workbenchを使用すると、GUIで開いて処理できる構造化ファイル(xml)にすべてを含めることができます。xmlだけでテキストなので、1つのsql文を入力しなくてもバージョン管理できます。
levhita 2008

6
データベース自体は、ソース管理下にある必要があるものです。それ以外の場合は、コードベースブランチに一致するようにスキーマの変更をロールバック/選択的に適用する手動プロセスです。3つの依存プロジェクトがあり、それらすべてを特定のブランチに切り替える場合(たとえば、特定のスキーマ移行のセットを使用)、データベースをそのスキーマに切り替えることもできます。同様に、マージおよびリベース操作をサポートする必要があります。この技術は非常に欠けています。エンティティフレームワークは、データベースの移行に関しては、マルチ開発者環境をサポートしていません。
Triynko 2015

@Triynkoは実際には機能しません。マイクロソフトがデータベースプロジェクトのビジュアルスタジオタイプを3回以上廃棄したのには理由があります。これは、ソーススキーマとターゲットスキーマを知ると、スキーマの移行に関するすべての情報が失われるためです。スキーマをリファクタリングすると、大量の情報が吹き飛ばされます。そのモデルを使用する試みをやめ、代わりに、状態を許容できるように再実行可能などに注意深く作成された増分移行スクリプトを使用しました。
Shiv、2006

ShivとTryinkoのディスカッションは一般に、「状態ベース」と「移行ベース」の枠組みになっていることに注意します。これはかなり論争の多い問題であり、どちらのアプローチにも長所と短所があります。移行ベースのアプローチでは、データベースを最新の移行で作成/置換/更新する方が速くなる傾向がありますが、状態ベースのアプローチは実際に変更を作成します。どちらのアプローチの方が優れているかは、データベースの頻繁な変更(状態ベースを使用)を優先するか、本番/テスト/ローカル/ CI(移行ベースを使用)への頻繁なデプロイメントを優先するかによって部分的に異なります。
ブライアン

マイクロソフトが状態ベースのアプローチを使用する理由については、状態ベースのアプローチのツール/自動化を構築する方がはるかに簡単であり、開発者にとってはターンキーがはるかに簡単です。データベースのバージョン管理を現在使用していない開発者は、状態に基づくアプローチの方が混乱が少ないため、多くの場合、状態ベースのアプローチの方が魅力的です。もちろん、それほど混乱しない理由は、移行作業が開発者からリリースエンジニアにプッシュされるためです...彼らは、差分スクリプトを(たとえばSSDTを介して)生成し、手動で修正します。何でも。
ブライアン、

36

Rails ActiveRecordの移行が大好きです。DMLをRubyスクリプトに抽象化して、ソースリポジトリで簡単にバージョン管理できるようにします。

ただし、少しの作業で、同じことを行うことができます。DDLの変更(ALTER TABLEなど)はテキストファイルに保存できます。ファイル名の番号付けシステム(または日付スタンプ)を保持し、それらを順番に適用します。

Railsには、最後に適用された移行を追跡する「バージョン」テーブルもDBにあります。簡単に同じことができます。


1
完全に合意された、現在の移行バージョンは現在のコミットにバインドされるため、rakeタスクを実行し、dbの変更によりシステムをクリーンでシンプルなプロセスに保つことができます
Anatoly

33

ソース管理を使用してデータベースの変更を管理するためのLiquiBaseを確認してください。


7
追加すると、Flywayは、他のStackOverflowスレッドでも好評を得ている類似の機能を提供する競合製品です。
Steve Chambers

29

ログインして「ALTER TABLE」コマンドの入力を開始し、本番データベースを変更しないでください。私が取り組んでいるプロジェクトにはすべての顧客サイトにデータベースがあり、データベースへのすべての変更は2つの場所で行われます。新しい顧客サイトで新しいデータベースを作成するために使用されるダンプファイルと、実行される更新ファイルです。現在のデータベースのバージョン番号をファイル内の最大番号と照合して更新し、データベースを適切に更新します。たとえば、最後の2つの更新:

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

これを行うにはもっと良い方法があると確信していますが、これまでのところうまくいきました。


それぞれの「ifバージョン」を個別のファイルに入れ、ファイルを順番に実行するツールがあることを除いて、同様のことを行います。
jwanagel 2008

SQLスクリプトがアプリファイルと共にインストール(新規インストールまたはアップグレード)され、スクリプト実行の場所と日時がログに記録されることを除いて、同様の作業も行っています。
si618 2009年

私もこれとほぼ同じように何かを書きましたが、Jet(たとえば、MS Access)データベース用です。私たちは現在、SQL ServerにDB Ghostを使用していますが、これは多くのことを行います。
ケニーエビット

あなたは置き換えることができbegin transaction; ... end transaction;渡すと--single-transactionしますpsql
ウラジミール

18

はい。コードはコードです。私の経験則では、開発マシンや本番マシンを見ることなく、アプリケーションをゼロからビルドおよびデプロイできる必要があります


13

私が見たベストプラクティスは、ステージングサーバーでデータベースをスクラップして再構築するビルドスクリプトを作成することです。各イテレーションにはデータベースの変更用のフォルダーが与えられ、すべての変更は "Drop ... Create"でスクリプト化されました。このようにして、バージョンを付けたいフォルダーにビルドをポイントすることで、いつでも以前のバージョンにロールバックできます。

これはNaNt / CruiseControlで行われたと思います。


11

はい、データベースをバージョン管理することが重要だと思います。データではなく、スキーマです。

Ruby On Railsでは、これは「マイグレーション」を伴うフレームワークによって処理されます。dbを変更するときはいつでも、変更を適用するスクリプトを作成し、それをソース管理にチェックインします。

私のショップはそのアイデアをとても気に入ったので、シェルスクリプトとAnt を使用してJavaベースのビルドに機能を追加しました。プロセスを展開ルーチンに統合しました。DBのバージョニングを標準でサポートしていない他のフレームワークで同じことを行うスクリプトを書くのはかなり簡単です。


8

Visual Studioの新しいデータベースプロジェクトは、ソース管理と変更スクリプトを提供します。

彼らは、データベースを比較し、一方のスキーマを他方に変換するスクリプトを生成したり、一方のデータを他方に一致するように更新したりできる優れたツールを備えています。

DBスキーマは「細断処理」されて、DBを記述するDDLコマンドごとに1つずつ、多数の小さな.sqlファイルが作成されます。

+ tom


追加情報2008-11-30

私は過去1年間、開発者として使用しており、本当に気に入っています。開発作業と本番環境を簡単に比較し、リリースに使用するスクリプトを生成できます。DBAが「エンタープライズタイプ」のプロジェクトに必要な機能が欠落しているかどうかはわかりません。

スキーマはSQLファイルに「細断」されるため、ソース管理は正常に機能します。

1つの落とし穴は、dbプロジェクトを使用するときに異なる考え方を持つ必要があることです。このツールには、VSに「dbプロジェクト」があり、これは単なるsqlであり、さらに、スキーマと他の管理データを含む自動生成されたローカルデータベースがあります。ただし、アプリケーションデータはなく、使用するローカルdev dbアプリデータ開発作業。自動的に生成されたdbに気づくことはめったにありませんが、それをそのままにしておけるように、そこにあることを知っておく必要があります。この特別なdbは、その名前にGuidがあるため、明確に認識できます。

VS DBプロジェクトは、他のチームメンバーが行ったデータベースの変更をローカルプロジェクト/関連するデータベースに統合するという素晴らしい仕事をします。ただし、プロジェクトスキーマをローカルのdev dbスキーマと比較してmodを適用するには、追加の手順を実行する必要があります。それは理にかなっていますが、最初は扱いにくいようです。

DBプロジェクトは非常に強力なツールです。スクリプトを生成するだけでなく、すぐに適用できます。それを使用して本番データベースを破壊しないようにしてください。;)

私はVS DBプロジェクトが本当に好きで、今後のすべてのdbプロジェクトでこのツールを使用することを期待しています。

+ tom


8

SQLデータベースのソース管理システムを使用することを開発チームに要求することは、問題の発生を防ぐ魔法の弾丸ではありません。開発者はオブジェクトに加えた変更を別のSQLスクリプトに保存し、ソース管理システムクライアントを開き、クライアントを使用してSQLスクリプトファイルをチェックインする必要があるため、データベースソース管理自体が追加のオーバーヘッドをもたらします。変更をライブデータベースに適用します。

ApexSQL Source Controlと呼ばれるSSMSアドインの使用を提案できます。開発者は、SSMSから直接ウィザードを使用して、データベースオブジェクトをソース管理システムに簡単にマッピングできます。アドインには、TFS、Git、Subversion、およびその他のSCシステムのサポートが含まれています。また、静的データを制御するソースのサポートも含まれています。

ApexSQLソース管理をダウンロードしてインストールしたら、バージョン管理するデータベースを右クリックし、SSMSのApexSQLソース管理サブメニューに移動します。[データベースをソース管理にリンク]オプションをクリックし、ソース管理システムと開発モデルを選択します。その後、選択したソース管理システムのログイン情報とリポジトリ文字列を提供する必要があります。

詳細については、この記事をご覧ください。http//solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/


6

作成/更新スクリプトとsampledataを生成するスクリプトを保存することで実行します。


6

はい、SQLをビルドの一部として保持することでこれを行います。DROP.sql、CREATE.sql、USERS.sql、VALUES.sqlを保持し、これらをバージョン管理するため、タグ付きバージョンに戻すことができます。

必要なときにいつでもdbを再作成できるantタスクもあります。

さらに、SQLは、それに付随するソースコードとともにタグ付けされます。


6

私がこれまでプロジェクトで使用した中で最も成功したスキームは、バックアップと差分SQLファイルを組み合わせたものです。基本的に、すべてのリリース後にデータベースのバックアップを取り、SQLダンプを実行して、必要に応じて空のスキーマを最初から作成できるようにしました。次に、DBを変更する必要があるときはいつでも、バージョン管理下のsqlディレクトリにalter scripを追加します。最初の変更は01_add_created_on_column.sqlのようになり、次のスクリプトは02_added_customers_indexになるため、常にファイル名の前にシーケンス番号または日付を付けます。私たちのCIマシンはこれらをチェックし、バックアップから復元されたデータベースの新しいコピーで順次実行します。

また、開発者が1つのコマンドでローカルデータベースを現在のバージョンに再初期化するために使用できるスクリプトもいくつか用意しました。


6

データベースで作成したすべてのオブジェクトをソース管理します。また、開発者を正直に保つために(オブジェクトをソース管理に入れなくてもオブジェクトを作成できるため)、dbasは定期的にソース管理にないものを探し、見つかった場合は、問題がないかどうかを尋ねずにドロップします。


5

SchemaBankを使用して、データベーススキーマのすべての変更をバージョン管理しています。

  • 1日目から、dbスキーマダンプをインポートします
  • Webブラウザーを使用してスキーマ設計を変更し始めました(SaaS /クラウドベースであるため)
  • データベースサーバーを更新する場合は、変更(SQL)スクリプトを生成してデータベースに適用します。Schemabankでは、更新スクリプトを生成する前に、バージョンとして作業をコミットするように要求されます。私はこの種の練習が好きなので、いつでも必要なときにさかのぼることができます。

私たちのチームのルールは、最初に設計作業を保存せずに、dbサーバーに直接触れないことです。しかし、それは起こります。誰かが便利のためにルールを破るように誘惑されるかもしれません。スキーマダンプを再度schemabankにインポートし、不一致が見つかった場合は差分を作成して誰かをbashします。そこから変更スクリプトを生成して、dbとスキーマの設計を同期させることはできますが、それは嫌いです。

ちなみに、バージョン管理ツリー内にブランチを作成して、ステージング用と本番用に1つずつ維持できるようにすることもできます。サンドボックスのコーディング用。

バージョン管理と変更管理を備えた、非常にきちんとしたWebベースのスキーマ設計ツール。


4

データそのものを除いて、ベアメタルからDBを再作成するために必要なすべてのものを持っています。実行する方法はたくさんあると思いますが、すべてのスクリプトなどはsubversionに格納されており、subversionからすべてを取り出してインストーラーを実行することで、DB構造などを再構築できます。


4

私は通常、変更ごとにSQLスクリプトを作成し、別の変更ではそれらの変更を元に戻し、それらのスクリプトをバージョン管理下に置いています。

次に、オンデマンドで新しい最新のデータベースを作成する手段があり、リビジョン間を簡単に移動できます。リリースを行うたびに、スクリプトをまとめます(少し手作業が必要ですが、実際に難しいことはめったにありません)。したがって、バージョン間で変換できるスクリプトのセットもあります。

はい、言うまでもなく、これはRailsや他の人がすることと非常によく似ていますが、かなりうまく機能しているように見えるので、恥ずかしがらずにアイデアを持ち上げたことを認めても問題ありません:)


4

私は、MySQL WorkbechからエクスポートされたSQL CREATEスクリプトを使用してから、それらの「Export SQL ALTER」機能を使用して、一連の作成スクリプト(もちろん番号が付けられています)とそれらの間の変更を適用できる変更スクリプトを作成します。

3.-エクスポートSQL ALTERスクリプト通常、モデルに加えた変更を反映して、ALTER TABLEステートメントを手動で作成する必要があります。しかし、あなたは賢く、Workbenchにあなたのためのハードワークを任せることができます。メインメニューから[ファイル]-> [エクスポート]-> [フォワードエンジニアSQL ALTERスクリプト…]を選択するだけです。

これにより、現在のモデルと比較する必要があるSQL CREATEファイルを指定するように求められます。

手順1のSQL CREATEスクリプトを選択します。ツールによってALTER TABLEスクリプトが生成され、データベースに対してこのスクリプトを実行して、スクリプトを最新の状態にできます。

これは、MySQLクエリブラウザーまたはmysqlクライアントを使用して行うことができます。モデルとデータベースが同期されました!

ソース:MySQL Workbench Community Edition:スキーマ同期のガイド

もちろん、このスクリプトはすべてバージョン管理下にあります。


4

はい、いつも。必要なときにいつでも、有用なサンプルデータのセットを使用して運用データベース構造を再作成できるはずです。そうしないと、時間をかけて物事を実行し続けるためのマイナーな変更が忘れられてしまい、ある日、かまれて大きな時間がかかります。あなたはあなたがあなたが必要とは思わないかもしれないその保険ですが、あなたがそれをする日はそれが10倍以上の価格の価値があります!


4

データベースモデル自体については多くの議論がありましたが、必要なデータは.SQLファイルにも保持しています。

たとえば、アプリケーションを有効にするために、インストールでこれが必要になる場合があります。

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('AUD', 'Australian Dollars');

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('USD', 'US Dollars');

currency.sqlsubversionの下に呼ばれるファイルがあるでしょう。ビルドプロセスの手動ステップとして、以前のcurrency.sqlを最新のものと比較し、アップグレードスクリプトを記述します。


必要なデータをデータベースに保持します(誰がサンクしますか?)。次に、ツールを使用してこれらの挿入/更新スクリプトを生成し、参照データをdev、qa、製品などの間で同期させます。管理が非常に簡単です。データとこの方法での変更。スクリプトはすべて、バージョン/構成ツールによって制御されます。
Karen Lopez、

データベースに何百万もの行がある場合、これは実用的ですか?
ロニー

4

データベースを取り巻くすべてをバージョン管理およびソース管理します。

  • DDL(作成および変更)
  • DML(参照データ、コードなど)
  • データモデルの変更(ERwinまたはER / Studioを使用)
  • データベース構成の変更(権限、セキュリティオブジェクト、一般的な構成の変更)

これらすべてを、Change Managerといくつかのカスタムスクリプトを使用した自動化ジョブで実行します。Change Managerがこれらの変更を監視し、完了したら通知します。


4

すべてのDBはソース管理下にある必要があり、開発者はローカルデータベースを最初から作成する簡単な方法を持つ必要があると思います。Visual Studio for Database Professionalsに触発されて、MS SQLデータベースをスクリプト化するオープンソースツールを作成し、それらをローカルDBエンジンに簡単にデプロイできる方法を提供します。http://dbsourcetools.codeplex.com/を試してください。楽しんでください-ネイサン。


4

データベースがSQL Serverである場合、私たちはあなたが探しているソリューションだけを持っているかもしれません。SQLソース管理1.0がリリースされました。

http://www.red-gate.com/products/SQL_Source_Control/index.htm

これはSSMSに統合され、データベースオブジェクトとVCSの間の接着剤を提供します。「スクリプト出力」は透過的に行われ(内部ではSQL Compareエンジンを使用します)、そのため、開発者がプロ​​セスを採用することを思いとどまらないほど簡単に使用できます。

代替のVisual StudioソリューションはReadyRollで、SSDTデータベースプロジェクトのサブタイプとして実装されます。これには、移行主導のアプローチが採用されています。これは、DevOpsチームの自動化要件により適しています。


Red-Gateの製品は誰にもお勧めしません。しばらくの間、SQLソース管理2.2を使用しています。実際、彼らはすぐにバージョン3をリリースしました。その後、最終的に2.2のサポートが終了しました。彼らがバグを修正したとしても(私は新機能は考慮していません-バグはバグです)、TFS2012のリリース時のサポートも含まれていませんでした。私の会社はTFS2010からTFS2012に切り替え、TFSに接続できなくなりました。彼らが私たちに与えた唯一の選択肢は彼らのソフトウェアの新しいバージョンを購入することだったので、私たちは文字通りレッドゲートのソフトウェアを捨てなければなりませんでした。バージョンアップの予定はありません。2.2。
ディマ2013年

Microsoft以外のオペレーティングシステムに対するCLIサポートが必要です。
l8nite 2016年

MySQLにいくつかのツールがあるようですred-gate.com/products/mysql/mysql-comparison-bundle
Jeff

3

すべてのオブジェクト(テーブル定義、インデックス、ストアドプロシージャなど)をスクリプト化して、データベーススキーマをソース管理します。ただし、データ自体については、定期的なバックアップに依存するだけです。これにより、すべての構造変更が適切な改訂履歴で確実にキャプチャされますが、データが変更されるたびにデータベースに負担がかかることはありません。


3

私たちのビジネスでは、データベース変更スクリプトを使用しています。スクリプトを実行すると、その名前がデータベースに保存され、その行が削除されない限り、再度実行されることはありません。スクリプトは、日付、時刻、コードブランチに基づいて名前が付けられているため、制御された実行が可能です。

ライブ環境でスクリプトが実行される前に、多くのテストが行​​われるため、 "oopsoop"は通常、開発データベースでのみ発生します。


3

現在、すべてのデータベースをソース管理に移行中です。sqlcompareを使用してデータベース(残念ながら、プロフェッショナル版の機能)をスクリプト化し、その結果をSVNに入れています。

実装の成功は、組織の文化と実践に大きく依存します。ここの人々は、アプリケーションごとにデータベースを作成すると信じています。ほとんどのアプリケーションで使用される共通のデータベースセットがあり、データベース間の依存関係が多数発生しています(一部は循環型です)。私たちのシステムにはデータベース間の依存関係があるため、データベーススキーマをソース管理に配置することは非常に困難です。

幸運をお祈りします。問題を解決するまでの時間を早めに試してください。


3

ThoughtWorksのhttp://dbdeploy.com/にあるdbdeployツールを使用しました。移行スクリプトの使用を奨励します。各リリースでは、理解を容易にし、DBAが変更を「祝福」できるように、変更スクリプトを1つのファイルに統合しました。


3

これは常に私にとっても大きな不快感でした。開発データベースにすばやく変更を加えて保存(変更スクリプトの保存を忘れ)すると、行き詰まってしまうのは簡単すぎるようです。変更したスクリプトを元に戻し、やり直して変更スクリプトを作成することもできます。もちろん、スクリプトの作成に多くの時間を費やしていますが、必要に応じて最初から作成することもできます。

これを手助けしてくれた過去に使ったツールはSQL Deltaです。2つのデータベース(SQLサーバー/オラクル)の違いを示し、A-> Bの移行に必要なすべての変更スクリプトを生成します。もう1つの優れた点は、本番(またはテスト)DBと開発DBの間のデータベースコンテンツの違いをすべて表示することです。アプリの実行に不可欠な構成と状態をデータベーステーブルに保存するアプリが増えるにつれ、適切な行を削除、追加、変更する変更スクリプトを作成するのは非常に困難になります。SQL Deltaは、Diffツールで表示されるのと同じように、変更、追加、削除されたデータベース内の行を表示します。

優れたツール。ここにリンクがあります:http : //www.sqldelta.com/


3

RedGateは素晴らしいです。データベースが変更されると小さなスナップショット(小さなバイナリファイル)を生成し、そのファイルをプロジェクトとしてリソースとして保持します。データベースを更新する必要があるときはいつでも、RedGateのツールキットを使用してデータベースを更新し、空のデータベースから新しいデータベースを作成することもできます。

RedGateはデータのスナップショットも作成しますが、私は個人的にはそれらを使用していませんが、同じくらい堅牢です。


Red GateのSQLソース管理はこの問題に対処するために開発されたので、確認して、要件を満たしているかどうかをお知らせください。SQL Compareを超えるSQLソース管理の利点は、SSMSと統合されるため、異なるスキーマバージョンをログに記録するために別のツールをロードする必要がないことです。[私はRed Gateのプロダクトマネージャーです]
David Atkinson、

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.