すべてのデータベースへのアクセスを制限し、開発者にローカル データベース (開発する場所) と、統合を行うことができる開発サーバーへのアクセスのみを許可する必要があります。最善の方法は、ローカルの開発エリアにのみアクセスし、自動ビルドで統合タスクを実行することです。redgates sql compare などのツールを使用して、データベースの差分を作成できます。すべての変更をソース管理下 (.sql ファイル) に保持することをお勧めします。これにより、誰がいつ何を行ったかの実行履歴を保持し、必要に応じてデータベースの変更を元に戻すことができます。
また、開発者がローカル ビルド スクリプトを実行して、ローカル開発ボックスを再起動できるようにしたいと考えています。このようにして、いつでもロールバックできます。さらに重要なことは、アプリの配管 (リポジトリとデータ アクセス) と、ストアド プロシージャに格納されたロジックを自動化された方法でテストする統合テストを作成できることです。初期化が実行され (db がリセットされます)、統合テストが実行され (db に綿毛が作成されます)、db をクリーンな状態に戻すための再初期化などが行われます。
リポジトリに単一ブランチの概念を持つ SVN/nant スタイルのユーザー (または同様のユーザー) である場合は、DotNetSlackers でこのトピックに関する私の記事を読むことができます: http://dotnetslackers.com/articles/aspnet/Building-a- StackOverflow-inspired-Knowledge-Exchange-Build-automation-with-NAnt.aspxおよびhttp://dotnetslackers.com/articles/aspnet/Building-a-StackOverflow-inspired-Knowledge-Exchange-Continuous-integration-with-CruiseControl- NET.aspx .
あなたが perforce マルチ ブランチ ビルド マスターである場合は、その種の自動化と構成管理について何かを書くまで待つ必要があります。
アップデート
@Sazug: 「ええ、ベース スクリプトと追加スクリプトを使用する場合は、ある種のマルチ ブランチ ビルドを使用します :) 記事全体がなくても、その種の自動化に関する基本的なヒントはありますか?」最も一般的なデータベースには、次の 2 つの形式があります。
- 新しい非本番タイプの環境でデータベースを制御します(アクティブな開発のみ)
- 開発中にライブデータが蓄積される本番環境
最初のセットアップははるかに簡単で、開発から本番まで完全に自動化でき、必要に応じて本番のロールバックを含めることができます。これには、データベースへのすべての変更を .sql ファイルで維持できるスクリプト フォルダーが必要です。tablename.sql ファイルを保持してから、.cs ファイルのようにバージョン管理することはお勧めしません。その sql アーティファクトへの更新は、時間の経過とともに同じファイルで実際に変更されます。SQL オブジェクトが相互に大きく依存していることを考えると、データベースをゼロから構築すると、スクリプトに重大な変更が発生する場合があります。このため、ファイル名の先頭にシーケンス番号を付けて、変更ごとに個別の新しいファイルを保持することをお勧めします。たとえば、000024-ModifiedAccountsTable.sql のようなものです。次に、カスタム タスクまたは NAntContrib から何かを使用するか、多くの ??SQL.exe コマンド ライン ツールのいずれかを直接実行して、000001-fileName.sql から最後のファイルまで、空のデータベースに対してすべてのスクリプトを実行できます。 updateScripts フォルダーにあります。これらのスクリプトはすべて、バージョン管理にチェックインされます。また、常にクリーンなデータベースから開始するため、誰かの新しい SQL によってビルドが中断された場合は、いつでもロールバックできます。
2 番目の環境では、本番環境に影響を与える可能性があるため、自動化が常に最善の方法であるとは限りません。本番環境に対して/本番環境向けに積極的に開発している場合は、実際に本番環境にプッシュする前に自動化の方法をテストできるように、マルチブランチ/環境が本当に必要です。上記と同じ概念を使用できます。ただし、prod db では実際にゼロから始めることはできず、ロールバックはより困難です。このため、ビルド プロセスで同様の RedGate SQL Compare を使用することをお勧めします。.sql スクリプトは更新目的でチェックインされますが、更新を実行する前に、ステージング データベースと本番データベースの間の差分を自動化する必要があります。問題が発生した場合は、変更の同期と製品のロールバックを試みることができます。また、SQL の変更を自動プッシュする前に、なんらかの形式のバックアップを取る必要があります。本番環境で人の目を気にせずに何かをするときは注意してください! dev/qual/staging/performance のすべての環境で真の継続的インテグレーションを行ってから、本番環境にプッシュする際にいくつかの手動の手順を実行する場合...それはそれほど悪くはありません!