3

複数のファイルシステムがあります

ほとんどのバージョン管理ツールは、ローカル ディスク ファイル システムで動作します。

オブジェクトを識別するテキスト名があり、この名前を使用して作成スクリプトを取得または少なくとも生成できる限り、ほとんどのリレーショナル データベース システムのデータベース オブジェクトはファイル システムに存在します。

しかし、これはローカル ディスク ファイル システムではないため、ローカル ディスク ファイル システムで厳密に動作する CVS や SVN などのツールからは見えません。

SVN をデータベース オブジェクトに適用するには、オブジェクトをローカル ディスク ファイル システムに複製し、ローカル ディスク ファイル システムへの変更をデータベースに複製する必要があります。

さまざまな使用モード

各開発者がプライベートな作業コピーを保持するソース コードとは異なり、開発者は、ネットワーク上のどこかにあるサーバー上の共有データベースで作業する傾向があります。Visual Studio はマウント オン デマンドのプロジェクト ローカル データベースのコピーを直接サポートしていますが、変更をマージするための便利で信頼できる方法がないため、開発者はこの機能を避けてきました。

ただし、データベース構造への変更が CVS や SVN などのコピー/マージ バージョン管理システムによって管理されると、伝播とマージはほとんど自動化され (バーの競合)、データベースを共有する理由はなくなります。

オプションとして SCC を除外する

Microsoft SQL Management Studio は、SCC 仕様を実装するすべてのバージョン管理をサポートしています。Microsoft は VSS (blech) のみをリストしていますが、Google は多数のオプションを明らかにしています。ただし、SCC はすべてロックに関するものであり、ダブルブリーチです。

ファイルシステム間の複製

全体の問題は、ファイル システム間のレプリケーションの 1 つに発展します。CodePlex には VS2005/SQL2005 の実装が含まれていますが、VS2008/SQL2008 では機能しません。

この時点で、「これをどのように行うべきか」という根底にある問題は十分に解決されたと思いますが、ポイントを与える方法はわかりません.

関係者の皆様、ご応募ありがとうございました。

いくつかの具体的な疑問が生じますが、主にさまざまなタイプのスキーマ オブジェクトをスクリプト化する方法に関するものです。

  • の依存関係順に抽出createしてalterスクリプト を作成する方法
    • テーブル
    • 見る
    • ストアド プロシージャ
    • 関数
    • 引き金
    • 索引
    • 外部キー
  • 依存関係の順序でテーブル作成スクリプトを抽出する方法
  • スキーマへの変更を効率的に検出する方法 (トリガーがない場合は、sys.objectsポーリングが必要になります。これは、高速で安価な方がよいでしょう)

変化の検出

ポリシーを使用してアクションをスキーマの変更にバインドできることに気付きました。依存関係の順序付けと、テーブル作成ステートメントをスクリプト化する方法の問題が残っています

4

6 に答える 6

4

Red Gate を使用して、現在のスキーマを SVN に保存されているスクリプト ファイルと比較し、ベースラインやバージョン管理などを行います。

ただし、マスター リファレンスは、実際には本番の復元されたコピーです。これは私たちのベースラインであり、SVN に対応する必要があります。マスター スクリプトを SVN にコミットするのは展開プロセスの一部であり、Red Gate はこれを便利に実行します。変更されたオブジェクトのファイルのみを変更します。

さらに、作業スクリプトとリリース スクリプト (変更のみ) を分離しているため、SVN には常にマスター DB とベースラインがあります。ただし、開発にはスクリプトのみを使用します。

データベース ソース管理は優れた機能ですが、SQL Server オブジェクトの性質上 (一部のテーブルでは 1 行または 3 行)、実装するのは困難です...

于 2009-10-20T20:25:08.993 に答える
1

Red Gate は SQL ソース管理を構築し、SSMS と統合して、ソース管理へのコミットとソース管理からの取得の両方を提供します (バックグラウンドで、データベース オブジェクトを、ソース管理に保持されているそれぞれの作成 SQL ファイルにリンクします)。各開発者がデータベースの独自の開発コピーを使用することをお勧めしますが、これを共有するモデルをサポートする予定です。

このツールは 2010 年前半にリリースされる予定です。詳細を知りたい場合、または早期アクセス プログラムにサインアップしたい場合は、次のリンクにアクセスしてください。

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

敬具、

Red Gate Software、プロダクト マネージャー、David Atkinson 氏

于 2009-10-25T18:13:22.453 に答える
1

過去 6 か月ほどの間、あなたの質問に関連すると思われる ShiftSchema というツールを開発してきました。

ShiftSchema は、データベース トリガーを使用して、SQL Server 2005 および 2008 データベース オブジェクトを、バージョン管理システムに格納するのに適したディスク上のファイルと同期します。また、ファイルシステムの変更を監視し (リポジトリから更新して、別の開発者がコミットしたスキーマの変更を取得する場合)、それらの変更を個人の開発データベースにプッシュします。

データの同期はサポートしていますが、その機能は実際にはルックアップ テーブルなどの少量のデータを対象としています。

また、2 つのデータベース (RDBMS またはディスク上) を比較し、それらを同期するための DDL スクリプトを生成する機能もあります。

ShiftSchema は、各開発者が独自の個人開発データベースを持つ開発環境で使用することを目的としています。

興味のある方は、私のプロフィールにある Web サイトのリンクから ShiftSchema サイトを参照してください。

于 2009-10-22T12:13:57.953 に答える
1

非常に単純化したレベルでは、ファイル システムを監視し、aprticuler ディレクトリ内のファイルを解析してデータベースに適用する Windows サービスを作成できます。SQL サーバー ブローカー (またはトリガーと xp_commandshell のみ) を使用する同様の mechinsim を使用して、逆の書き込みを行うことができます。

于 2009-10-19T02:50:03.143 に答える
0

オブジェクトに加えられたすべての変更を追跡する必要がありますか、それとも最後の変更のみを追跡する必要がありますか? データベース内のすべての SQL オブジェクトのベースラインを取得し、Microsoft.SqlServer.Management.Smo のメソッドを使用して、各データベース オブジェクトを調べて「ワーキング セット」を比較するという点で、TFS に対して機能するソリューションを C# で作成しました。 ' サーバー バージョンに。夜の処理の一部として夜間に実行し、9 つのデータベースのサーバー全体を処理するのに約 15 分かかります。うまく機能し、SQL サーバー/データベースを直接変更する必要がなく、SQL 2005/2008 で機能することがわかりました。データベース管理者にメールで送信されるレポートを生成し、どのオブジェクトが変更されたかを通知し、TFS を介して何が変更されたかを確認できるようにします。

私はもともとここから始めていました。 http://odetocode.com/blogs/scott/archive/2008/02/02/versioning-databases-change-scripts.aspx

しかし、私が探していたのは、変更をサーバーにプッシュする方法ではなく、単に変更を知る方法であることがわかりました。ブログのリンクにはいくつかの適切な提案があり、うまくいけば役立つかもしれません.

よろしく。

于 2009-10-21T13:43:53.973 に答える
0

他のユーザーが SQL サーバーに直接加えた変更について: これがあなたにとってどれほど実用的かはわかりませんが、個別にではなく、SQL スクリプトを介してすべての変更をサーバーに直接行うことをお勧めします。これらの SQL スクリプトに番号を付けて、選択したソース管理に配置できます。デプロイされた変更をより細かく制御するには、everychange スクリプトを、必要に応じて使用できるロールバック スクリプトと組み合わせることができます。

もちろん、ユーザーを教育し、いくつかの制御を導入する必要があります。また、承認された変更のみがスクリプトを介してデータベース環境に流れるように展開プロセスを微調整する必要があります。ただの考えです。

于 2009-10-20T03:48:30.623 に答える