dbをバージョン管理下に置きます。約2400のオブジェクトがあり、そのうちのほとんどがストアドプロシージャです。
そのため、テーブルを除くすべてのオブジェクトのスクリプトを作成するスクリプトが存在しない場合は、ドロップしました。
テーブルスクリプトは、デルタスクリプトが保存されている別のフォルダーに保持されています。デルタスクリプトのみに番号が付けられています。プロシージャ、ビュー、および関数に関連するその他のスクリプトは、直接実行されます。
したがって、開発者がsvnで変更をコミットするとき、ステージングリリースでそれらを実行したいと思います。問題は、オブジェクトの依存関係です。
開発者が1つのコミットで複数のスクリプトをコミットし、それらが相互に依存している場合、または複数のリビジョンをマージしてからスクリプトを組み合わせて実行する場合、スクリプトを実行する正しい順序を決定できません。
誰かが依存関係を管理し、スクリプトが最初に実行されることを確認するのに役立ついくつかの良い方法を提案できますか?
多くの本番サーバーではredgateツールを使用できないため、sqlcompareまたはsqlsourcecontrolを使用する以外の方法をいただければ幸いです。
テーブルデルタスクリプトは他のオブジェクトに依存しないため(開発者もスクリプトで管理しているため)、次に他のオブジェクトを実行するため、常に最初に実行します。
次のような他のオブジェクトを実行するシーケンスのいくつかの回避策が出てきました。
1)オブジェクトの依存関係を同じ名前で拡張子が異なる別のファイルに保存できるため、依存関係が変更された場合、開発者はスクリプトを使用してそれをコミットする必要があります。次に、スクリプトを実行できるツリーを作成できます。
2)最初にツリーを作成し、依存関係が変更された場合はsvnにコミットし、スクリプトがステージングマシンでテストされてエラーが発生した後、ツリーに追加できます(これには、最初の失敗後にsvnコミットが必要になります)。初めて自動化されたプロセスが失敗する必要があります)
3)オブジェクトの数と同様に、トランザクションを最大回数使用せずに、スクリプトを何度も実行できます。これにより、最悪のシナリオを想定して、最後にすべてのスクリプトが正しく実行されるようになります。
他にアイデアがある場合、またはこれらのアイデアのいくつかを改善できる場合は、貢献してください。