前文
数年前、スタッフと私は、リモートブランチで同様のデータベースを多数維持するという問題に直面していました。 それらは数千キロメートルにわたって削除されることがあり、ボリュームはギガバイト単位で測定されました。これにより、サーバーミラーリングを使用できなくなりました。 状況は、わずかな違い、つまり 支店のビジネスロジックの95%が一致しましたが、さらに5%が強く干渉し、支店グループの自動処理の問題はありませんでした。
その結果、データに対して、「共通」構造の同期アプリケーションが作成され、実際に中央オフィスに関心がありました。 ただし、キーはビジネスロジックでした:テーブル構造、トリガー、ストアドプロシージャ。 つまり センターのロジックが更新されたとき、すべてのブランチに同じ変更を加える必要があり、各ブランチの個々の特性を壊さないようにしました。
合理化する必要がある2番目のポイントは、大規模なデータベース(100以上のテーブル、プロシージャおよびトリガー内の数万のSQL行)を持つチームの作業でした。 1人のプログラマーが問題を解決し、隣接するロジックまたは計算を特に傷つけない状況を想像できます。 これの追跡には問題があります。
問題の声明
基本的な機能要件は簡単でした:
- 2つのデータベースを比較する機能。
- あるデータベースを別のデータベースに変換するための自動スクリプト生成。
- ベースの「スナップショット」を作成する
- ビジネスロジックでのオブジェクト検索(依存関係検索)
私たちの場合、これはすべてSQLServer 2005+で動作するはずです。
製品
数週間のパートタイムの仕事のために、これらすべての不幸に私たちを助けることができるユーティリティが書かれました。 プログラムはC#.NET 3.5で書かれています。
データベースまたはイメージの構造を表示および分析します。
表示するときは、プロシージャ、関数、トリガーからスクリプトの一部を「切り取る」ことが特に便利です。しかし、テーブルとインデックスの作成が必要になる場合があります。
基本構造で検索します。
ここではもっと面白いです。 テーブルの名前を入力すると、このテーブルだけでなく、そのテーブルへのすべての参照、ストアドプロシージャ、関数、トリガーへの参照も表示されます。 同様に、たとえば、ドメインを検索できます(ある時点で、ドメインを放棄し、すべてのタイプを標準に変換することにしました)。
データベース構造および/またはデータベース構造スナップショットの比較
プログラムを操作するためのメインウィンドウ。 上部は、データベースへの接続または以前に保存された構造の画像を示します。 ウィンドウの下部に、構造を変換するための完全なスクリプトが表示されます。
ここでは、特定のオブジェクト(この場合はテーブル)を変更するためのスクリプトを見ることができます。 スクリプトは、 完全な変換、すべての外部リンクとインデックスです。
オブジェクトの2つのバージョンの比較。 SVNのようですね。 :)新しい/削除された列、インデックス、リンクなどを見ることができます。 ストアドプロシージャのコードの変更も表示されます-最も重要です。
エピローグ
この製品は、私たちの間でもおなじみのプログラマーの間でも非常に需要が高いことがわかりました。 そこから、製品の別の重要な特性を学びました。他の開発者のアクションを制御することです。 :)
現時点では、プログラムはSQLServerでのみ動作します。 しかし、コードでは、実装はドライバーの原則に基づいています。 翌年には、他のデータベースが使用可能になります。 当然、この製品は、データベースの構造の変化を100%分析するものとして理解されるべきではありません。 それはむしろフレームワークとビジネスロジックの制御であり、管理要素は管理者の良心に残ります。
製品は完全に無料で、良い目的にのみ使用する必要があります:)
当然、販売することはできません。
ダウンロードプログラム: アーカイブ
UPD:ファイルが更新されます。スクリプトをコピーできないバグです。 ありがとう