1

dbをバージョン管理下に置きます。約2400のオブジェクトがあり、そのうちのほとんどがストアドプロシージャです。

そのため、テーブルを除くすべてのオブジェクトのスクリプトを作成するスクリプトが存在しない場合は、ドロップしました。

テーブルスクリプトは、デルタスクリプトが保存されている別のフォルダーに保持されています。デルタスクリプトのみに番号が付けられています。プロシージャ、ビュー、および関数に関連するその他のスクリプトは、直接実行されます。

したがって、開発者がsvnで変更をコミットするとき、ステージングリリースでそれらを実行したいと思います。問題は、オブジェクトの依存関係です。

開発者が1つのコミットで複数のスクリプトをコミットし、それらが相互に依存している場合、または複数のリビジョンをマージしてからスクリプトを組み合わせて実行する場合、スクリプトを実行する正しい順序を決定できません。

誰かが依存関係を管理し、スクリプトが最初に実行されることを確認するのに役立ついくつかの良い方法を提案できますか?

多くの本番サーバーではredgateツールを使用できないため、sqlcompareまたはsqlsourcecontrolを使用する以外の方法をいただければ幸いです。

テーブルデルタスクリプトは他のオブジェクトに依存しないため(開発者もスクリプトで管理しているため)、次に他のオブジェクトを実行するため、常に最初に実行します。

次のような他のオブジェクトを実行するシーケンスのいくつかの回避策が出てきました。

1)オブジェクトの依存関係を同じ名前で拡張子が異なる別のファイルに保存できるため、依存関係が変更された場合、開発者はスクリプトを使用してそれをコミットする必要があります。次に、スクリプトを実行できるツリーを作成できます。

2)最初にツリーを作成し、依存関係が変更された場合はsvnにコミットし、スクリプトがステージングマシンでテストされてエラーが発生した後、ツリーに追加できます(これには、最初の失敗後にsvnコミットが必要になります)。初めて自動化されたプロセスが失敗する必要があります)

3)オブジェクトの数と同様に、トランザクションを最大回数使用せずに、スクリプトを何度も実行できます。これにより、最悪のシナリオを想定して、最後にすべてのスクリプトが正しく実行されるようになります。

他にアイデアがある場合、またはこれらのアイデアのいくつかを改善できる場合は、貢献してください。

4

3 に答える 3

0

これを見たことがありますか?

http://www.red-gate.com/products/sql.../sql-source-control/

それはあなた自身からの最小限の努力であなたの違いを捕らえるためのかなりまともなツールのセットです。

于 2013-02-07T14:14:13.707 に答える
0

SQL Server 管理オブジェクトを見たことがありますか?

DependencyWalkerクラスを介して関係を識別するためのサポートがあるため、まさにあなたが求めているものかもしれません.

ただし、SQL Server によって維持されている依存関係チェーンが正確であると信頼するかどうかは、まったく別のことです... そうでない場合は、自動化をやめて、適切なアップグレード スクリプトをコミットする責任を開発者に任せることが最善の策かもしれません。次に、SVN にコミットされた順序で再生します。

于 2013-02-07T14:12:14.127 に答える
0

他の種類の自動化を使用できない場合は、おそらくtsort使用できます。tsort ユーティリティは、トポロジカル ソートを実装する Unix プログラムです。(おそらく、ほとんどのオペレーティング システムで使用できます。) 部分的な順序付けを示す入力に基づいて、文字列の完全な完全な順序付けを出力します。

于 2013-02-07T14:38:05.800 に答える