SQL Server を使用してデータベースの変更を展開する簡単な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/1948220

質問

私が取り組んでいるソフトウェア システムは、医療請求システム、大量のデータとデータ テーブル、ストアド プロシージャです。

という記事を読んでいたのですが、より良いコードを作成するための 12 ステップ」 そして、ジョエルテスト #2 では次のように述べられています。ワンステップでビルドできますか?

ここで私は、これがデプロイメントのビルド (顧客がデプロイメントを更新できるようにするため) を意味するのかと疑問に思いました。

私が直面している主な問題は、ワンステップのデータベース更新をどのように行うかということです。

現時点では、データベースに変更を加えると、すべての変更が記録され、データベース更新スクリプトに追加されます。これにより、顧客へのデプロイメント ビルドが作成されるときにバージョン番号が付加されます。

もっと簡単な方法はありますか?データベース スキーマの「前後」を調べて、私が述べたような更新スクリプトを作成するスクリプトやアプリケーションはありますか?

それとも、これは誰もがやっているやり方なのだろうか、私には信じがたいが、もっともらしい話だ。

自動化されたシステムによりエラーが減り、展開のビルド時間が大幅に短縮されるため、その方法を知りたいと思っています。

役に立ちましたか?

解決

さまざまなレベルの複雑さを経験することができます。

  • 手動で作成した更新スクリプトがあり、それをさまざまなサーバーに簡単に適用する方法を探している場合は、 SSW SQL デプロイ SSWコンサルティングによる。そのシナリオを非常にうまく処理できます

  • データベース diff アプローチを使用する傾向がある場合は、Red Gate の SQL比較 (すでに述べました)そして SQL パッケージャー 素晴らしいコンボを作ります。古いデータベースと新しいデータベースの間でデータベースを比較し、変更を適切なパッケージ (EXE または C# プロジェクトとして) に適用できます。

  • 実際の、エンドツーエンドの、よく考えられたアプローチが必要な場合は (少し学習曲線が必要ですが)、チェックしてください。 イノバルティスの DBGhost アプローチ。これは、データベース開発と増分更新を処理する方法論/テクニック全体です。これは非常に強力で、非常に有望に見えますが、少し全か無かのアプローチです。それを購入してエンドツーエンドで使用するか、使用しないかのどちらかです

これが少しでも役立つことを願っています!

他のヒント

レッドゲートのツール SQLデータベースを比較して生成するして比較しました同期するためのスクリプト。我々はそれを使用するために使用されるが、より最近あなたが記述と同じプロセスを使用して手動でスクリプトに切り替えます。マニュアルを使用して、独自のバージョン番号ときめの細かい、スクリプトがうまくいっています。

我々は、彼らが継続的インテグレーションの一環として、コードと一緒に検査を受けるように、私たちのアップグレード・スクリプトは、ユニットテストに統合されています。私はこれがに重要な部分だと思う「ワンステップでビルドを行うこと。」

このブログ記事を見てみましょう。私は、カップルのプロジェクトに任意のDBのバージョンから、単一の更新スクリプトのこのタイプを使用しましたし、それはかなりうまく動作します。

のhttp:/ /blogs.msdn.com/danhardan/archive/2007/03/30/database-change-scripts-mambo-style.aspxする

あなたはあなたのワークフローに合わせて、および/またはテンプレート.sqlファイルを更新するためのワークフローを少し微調整する必要がありますが、全体的に私はアイデアはDBの展開にかなりベタなアプローチであることが判明しました。

編集:ただ、私はこの手法を使ってきた方法について詳しく説明します。基本的に、私のDBリビジョンスクリプトのすべては、ソースコントロールに入れます。その後、ビルドボックスのポストビルドステップとして、このマンボツールは何かがゆがんで行く場合は、ロールバックを可能にするためのトランザクションに包含される単一のスクリプトにスクリプトをロールバックするためのスクリプトのディレクトリ上で実行されます。その後、インストーラは、既存のデータベースに対して実行する.SQLスクリプトを探しに十分スマートです。

ロールアップスクリプトは、個々のスクリプトはすでに目的のデータベースに対して実行していた各部分を見るためにチェックするので、これは動作します理由です。その結果、唯一の最新のスクリプトが実行されます。これまでの注意点は、スクリプトをソース管理にチェックインされ、展開された後、トラッキングテーブルが既にスクリプトが実行されていると考えているので、あなたはそれを編集することができないということです。それは、私たちはただのスクリプトフォルダに別のスクリプトを追加するために働いてきたプロジェクトのための罰金です。

うまくいけば、私は理解し十分プロセスを説明しています。それは本当に複雑ではないですし、アプローチは、あなたのプロジェクトに適用された場合に非常に役立つことができます。

の最初の質問に答え、「今、私が思っていた、これは(顧客が展開を更新できるように)展開ビルドを意味するのか?」

私はジョエルテスト#2がPRODへの展開を移動するためではなく、開発中continuiosのときの積分のためにと考えています。

PRODデータベースの変更については、彼らはすべてのトランザクションの展開の一部として、またはデータベースがバックアップされた後にスクリプトを実行する必要があります。あなたはいつも何かが展開に失敗した場合、バックナビゲートできるようにしたいです。

お互いに依存したパッチの集合としてデータベースを開発します。そして、構築するために(私が) https://github.com/LuvDaSun/sqlpatch のようなツールを使用します展開のためのSQLファイルます。

sqlpatchが同じスクリプトを二回実行された場合でも、正しい順序でパッチを並べ替えると、すべてのパッチが正確に一度だけ実行されていることを確認します。

この戦略は、CI / CD環境でデータベースを展開するために使用することができます。ブランチにプッシュするように簡単このメイク展開ます。

があり、データベースを同期するアプリケーションですが、私はあなたのほうが、あなたが何をしているかやって考えます。データベースを更新するためのスクリプトを書くことは、あなたにエラーと実行のトランザクションを処理する能力を提供します。これは、ベストプラクティスと見なされます。

マイクロソフト自身がデータ層アプリケーションは無料オプションとしてSQL 2012年にを導入しましたデータベースを展開し、アップグレードするためます。

私は生産の展開を含め、このツールのように使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top