2

当社には、Asp.net と Sql Server 2008 で開発された人事管理関連の製品があり、20 ~ 30 のクライアントにインストールされています。ソフトウェアは、各クライアントの要件により継続的に開発されています。

いくつかの新しい変更が加えられ、古いバージョンを使用している一部のクライアントがいくつかの変更を要求した場合、最新のデータベース構造で最新バージョンのコードをインストールする必要があります。次に、クエリを使用してデータベースをアップグレードする必要があります。また、アップグレード用のクエリを生成するために、各クライアント データベース構造を追跡する必要があります。

現在、各クライアント データベースを保存しており、Red Gate SQL Compare などのツールを使用してアップグレードする SQL を生成しています。クライアントが増加しているため、このプロセスは非常に面倒なので、このプロセスの代替手段は何ですか? データベースのバージョン管理や、installaware などのインストーラーを使用して最新のデータベース参照を使用してクライアント データベースを自動的に更新するその他の代替手段を使用できますか?

4

3 に答える 3

1

Red Gate は、展開を一般的に容易にすることを検討しています。

私は Red Gate のプロダクト マネージャーで、最近、「Red Gate ツールを使用した自動展開」というホワイト ペーパーを書きました。 http://assets.red-gate.com/delivery/deployment-manager/assets/pdf/automated-deployment-whitepaper.pdf

このアプローチは基本的に、Web アプリケーションとデータベースの両方のコンポーネントをパッケージに変換し、管理システムで展開できるようにすることです。データベースは難しい部分であり、論文では 2 つのアプローチが提案されています。

  • 動的アップグレード。展開時にアップグレード スクリプトが作成されます。これは、データベースを簡単に再構築できる開発およびテスト環境に役立ちます。データベース パッケージには、通常はスクリプト フォルダーとして、データベースの構造が含まれています。

  • 静的アップグレード。アップグレード スクリプトは、パッケージの作成時に、通常は CI ビルドの最後に、現在デプロイされていることがわかっている各バージョンに対して作成されます。(管理システムは、デプロイされたバージョンを追跡します。) デプロイ時には、正しいアップグレード スクリプトが使用されます。データベースが変更されていないこと、アップグレード スクリプトが正常に実行されること、およびアップグレード スクリプトが正常に実行されたことを確認するためのデプロイ前後の検証手順もあります。この方法は、開発、テスト、ステージング、本番などを通じて展開されるため、アップグレード スクリプト自体をテストできるため、非常に優れています。また、プロセスの早い段階で DBA がスクリプトをレビューすることもできます。

于 2012-09-11T11:28:06.800 に答える
0

エクスポート/インポート機能のサポートを検討してください。

'export'関数は、基本的に、既知の/予期されるテーブルの別の名前のソースへのバックアップを作成します。'import'関数は、最新バージョンのオブジェクトの空のコピーを作成してから、他のソースにエクスポートされたテーブルから行をインポートします。

彼らが適用したカスタマイズが何であれ、Tim Lentineができると言っているように、彼らは再適用する必要があります。あなたのビジネスは、アップグレード中にクライアントのカスタマイズを再適用するためにリソースを費やすことをいとわない範囲を決定する必要があります。

クライアントに、最初にバックアップを作成する必要があるか(DBAがある場合)、またはdbバックアップ機能をサポートする必要がある(サポートしていない場合)、次にエクスポートしてからインポートする必要があることをクライアントに伝えます。

もちろん、これは、変更に常に下位互換性があることを前提としています。

あなたがそれをうまくやることができれば、それはシンプルで安価な解決策です。そうでなければ、ティム・レンティンが言うように、それは本当に難しくて厄介になる可能性があります。

HTH

于 2012-09-10T17:05:37.713 に答える
0

あなたの目標を達成する方法はたくさんあるので、あなたの質問に対する唯一の最良の答えを見つけられるとは思えませんが、私たちのプロセスと、過去 10 年間にあなたがやってきたことから得たいくつかの洞察を共有できます。説明された。おそらく、彼らはあなたにとってうまくいく解決策を特定するのに役立つでしょう.

まず、クライアント データベースの更新は難しい問題です。ソフトウェアをインストールしてから、彼らがデータベースに何をしたのか、実際にはわかりません。私は、クライアントが独自のテーブル、ビュー、さらにはインデックスをシステム テーブルに追加するように依頼しました。最初からデータベースの状態を必ずしも把握しているとは限らないため、これらすべてがターゲット データベースをアップグレードするときに頭痛の種になる可能性があります。

第二に、データベースをアップグレードするためのインストーラーが最適だと当初考えていたように思います。その後、私はこの問題についてさらに考え始めました。私たちの場合、少なくとも DBA はフロントエンド ソフトウェアをアップグレードする側ではないことがよくありました。また、多くのクライアントから、サーバーに何かをインストールすることは最初の一歩ではないと聞いたので、振り出しに戻ります。

最終的に、アップグレード用のスクリプトと、DBA \ エンド ユーザーがサーバー \ データベースに接続してアップグレード プロセスを実行する機能を含む独自の実行可能ファイルを作成することにしました。

(私たちの場合、独自のビジネス インテリジェンスを含む多くの暗号化されたストアド プロシージャを使用しています。そのため、クライアントがスクリプトを利用できるようにするだけではありません。)

まだ行っていない場合は、データベースをソース管理に入れましょう! Visual Studio と Red-Gate はそれぞれ、これを容易にする製品を提供しています。私は両方を使用しており、特に好みはありませんが、あなたとあなたのチームが使い慣れているものを使用することをお勧めします.

更新を出荷するときは、ソース管理の最新バージョンのデータベースから以前のバージョンのデータベースへの差分を実行します。新しいオブジェクトと変更されたオブジェクトを探します。オブジェクトを削除することはほとんどありませんが、それも必要になる場合があります。

データベースで何が変更されたかがわかったら、必要な変更を実行するための冪等スクリプトを作成するために、変更のリストを非常に系統的に調べます。これは非常に面倒なプロセスですが、クライアントが簡単にアップグレードできるようにするのに役立ちます。基本的に、このプロセスで行うことは防御的プログラミングです。テーブル、ビュー、ストアド プロシージャ、関数などがデータベースに存在すると仮定するのではなく、まずアイテムが存在することを確認します。その場合、その DDL ステートメントを完全にスキップできる可能性があります。それ以外の場合は、オブジェクトを削除して再作成する必要がある場合があります。

明確にするために、テーブルを削除することはありませんが、オブジェクトが最新であることを確認するために、他のオブジェクトを削除して再作成することがよくあります。

スクリプトは、正しい順序で実行可能ファイル (内部で構築したソリューション) にパッケージ化されます (たとえば、テーブルとそのテーブルを参照するビューを追加する場合、ビューの前にテーブルを作成する必要があります)。

余談ですが、Red-Gate は現在、これを行うツールを提供していますが、私はまだ本番環境で個人的に使用していません。

アップデートが適切にパッケージ化されたことに満足したら、それを壊そうとします! あらゆる種類のバージョンのデータベースに対してテストを行います。非常に古いバージョン、何らかの方法で変更したデータベース、サポートするすべてのバージョンの SQL Server (2000、2005、2008、2012 など) でテストします。機能しない状況が見つかった場合は、機能するまでスクリプトを修正します。

また、データベース スキーマには、更新が実行された日時、実行者、およびその更新の一部であったオブジェクトを記録するために、更新モジュールが書き込むログ テーブルがあることにも言及する必要があります。これは、場合によってはトラブルシューティングに役立ちました。

私たちのユーティリティでは、スクリプトを実行する前にデータベースのバックアップを作成してアップグレードすることはありませんが、バックアップを作成することはできます。これをプロセスの一部として検討することをお勧めします。(私たちのドキュメンテーションはこれの重要性を強調しており、私たちが何年にもわたって協力してきたほとんどの DBA は自然にこれを行っているため、これをユーティリティに書き込む必要はないと感じました)。

データベース更新ユーティリティは、ソフトウェア更新プログラムと一緒にパッケージ化され、製品全体の別のコンポーネントとして配布されます。クライアント サイトのデータベースで適切な資格情報と権限を持つすべてのユーザーが実行できます。

このプロセスは何年にもわたってうまく機能してきましたが、新しいツールが市場に導入されたり、クライアントが経験したエラーに遭遇したりするたびに、改善を続けています。機能するプロセスを開発するには時間がかかる場合があるため、いつでも噛むことができる以上に噛まないようにしてください. 私たちにとって、データベースをソース管理に入れることが最大の鍵でした。私たちがそれをすると、物事は少しずつうまくいき始めました.

于 2012-09-10T16:43:02.610 に答える