新しいプロジェクトを開始し、バージョンコントロールシステムとしてSVN(Tortoiseを使用)を使用しています。同じシステムを使用してSQL Serverデータベースも維持できるかどうか疑問に思っていました。
テーブル、関数、ビュー、プロシージャ、トリガーなどをバージョン管理したいのですが。とにかくすべてテストデータになるので、私のデータではありません。これをどのように設定すればいいのか本当にわからない。私はいくつかのオプションに出くわしましたが、欠けているものがあったかどうか、そしておそらくそれを実行するのに役立つガイドや何かがあるかどうか知りたいのですが。
私はレッドゲートを見たり聞いたりしたことがありますが、無料(または少なくとも非常に低コスト)のものを探しています。私はいつでも自分で何かを書くことができることを知っていますが、私は実際にそれに時間を費やすことを試みていません。
私が遭遇したことの1つは、オープンソースパッケージをまとめて ScriptDB4Svn と呼ばれるものでした。誰かがこれを以前に使用したことがありますか?いいですか?それは私がそれをするのに必要なことをすることができます、そしてセットアップを得るのはかなり簡単ですか?
技術的にはツールも必要ありません。オブジェクトを直接スクリプト化し、ソース管理にチェックインできます。ツールを使用しない場合は少し作業が増えますが、確実に実行可能です。
ところで、私はRedGateツールを使用しましたが、それはかなり洗練されていて、お金の価値があります。
たいていはMicrosoftの設定をしているようです。 データベースプロジェクト (以前はDataDudeと呼ばれていました)を確認できます。それらは基本的にT-SQLをVisual Studioの第一級言語に変えます。あなたはできる:
[dbo]
ほとんどの場合)ニースの30%のパフォーマンス向上。また、ソース管理下でコードとデータベースコードを適切に統合します。 man-upでスクリプトを作成し、(SSMSでDavinciツールを使用する代わりに)データベースオブジェクトをスクリプト化すると、1つIDE-ニースです。
はい、以前のプロジェクトで同様のツール(自社開発)を使用しました。すべてのテーブル、ビュー、Sproc、トリガーなどを個別の.sqlファイルにスクリプト化します。次に、「開発」データベース内のすべてがソース管理に反映されていることを「検証」するために毎晩実行されるスクリプトがありました。
したがって、通常のワークフローでは、コードを変更し、必要に応じて開発データベースの対応するテーブルとsprocを変更してから、スクリプト化された.sqlファイルをすべて更新するツールを実行します。その後、すべてを一度にチェックインします。
問題は、ツールを実行するのを忘れた場合、データベースが「正しい」ため、コードは「動作」し(ユニットテストは合格します)、新しいsprocs/tablesはソース管理にならないということでした。
したがって、毎晩、ソースコードのチェックアウトを実行するスクリプトがあり、その後、すべてのスクリプトを更新するツールを実行します。違いがあった場合は、誰かが変更をチェックインするのを忘れており、電子メール通知が生成されたことを意味します。これは基本的に、ソース管理を最新の状態に保つことを忘れないようにするための単なる方法でした。
数日間にわたる変更に取り組むのが難しくなるので、少し面倒でしたが、何もないよりはましでした...
Railsを使用できます。 Railsには、適用またはロールバックできるデータベース移行の概念があります。私の経験では、これはデータベースのバージョン管理に最適な方法です。これらの移行ファイルをSVNにチェックインします。
私の現在のプロジェクトでは、Rubyでアプリケーションを開発していませんが、データベースの管理にRailsを使用しています。他の方法では行いません。
これは以前にstackoverflowで説明されています: https://stackoverflow.com/questions/2750278/sql-server-2008-create-database-script-schema-data-with-command-line
また、この外部の記事はいくつかの追加情報を提供します http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated とともにWindowsアプリケーションの形式のサンプルコード。
あなたがしたいことは私がMS Accessのために私が自分でしたことなので、それがあなたにいくつかのアイデアを与える場合に備えて私がやったことを教えます:ADOのスキーマとデータを変換するAdo2Xmlと呼ばれるモジュールを書きました-xmlへのアクセス可能なデータベース、およびその逆。ただし、テーブルとビューについてのみ知っています。ストアドプロシージャ、トリガー、何もありません。とにかく、あなたの場合、このモジュールは、おそらくMS-SQLで必要なことを実行するツールに置き換えられます。したがって、アプリケーションが起動するたびに、データベースのタイムスタンプと保存されたxmlファイルのタイムスタンプが比較されます。 xmlファイルが新しい場合は、データベースを破棄し、Ado2Xmlを呼び出してxmlファイルから再作成します。アプリケーションが終了すると、逆の動作をします。Ado2Xmlを呼び出して、データベースをxmlファイルにエクスポートします。実際、データベーススキーマを抽出するADOオブジェクトは何らかの理由で非常に遅いため、エクスポートプロセスに時間がかかることがあります。そのため、アプリケーションが実行するのを毎回待つ必要をなくすために終了する直前にVisual Studioを使用して、デバッグレイアウトから編集レイアウトに切り替え、アプリが終了する直前に外部アプリを起動してエクスポートを実行し、すぐに終了できるようにします。