データベース変更管理のセットアップのための初期の作成スクリプト、その後の移行スクリプト
-
21-09-2019 - |
質問
私のデータベース変更管理ワークフローです。でベースにSQLスクリプトだそうでなマネージドコードに基づくソリューション
の基本的な設定は以下のようなものです:
Initial/
Generate Initial Schema.sql
Generate Initial Required Data.sql
Generate Initial Test Data.sql
Migration
0001_MigrationScriptForChangeOne.sql
0002_MigrationScriptForChangeTwo.sql
...
のスピンのデータベースはそこにすべてのInitlalスクリプトを実行、順次移行のためのイントロダクションです。ツール間のバージョン管理の要件などを調べます。
私の質問は、このような設定をするために役立てていただくことも維持す:
Current/
Stored Procedures/
dbo.MyStoredProcedureCreateScript.sql
...
Tables/
dbo.MyTableCreateScript.sql
...
...
による"この"というのはディレクトリのスクリプトで区切られたオブジェクトタイプ)の代表の作成スクリプトのための紡糸の 現在の最新 版のデータベースです。
あっというだけ具体的には正当なものとすることができます。私何かが足りない?
にすることはできない。
- 機器およびソースを制御して、同じオブジェクト毎にファイルの設定を使用
- 導入までのスピンの新しいDBインスタンスの最新バージョンのいずれかについては、初期+を移行し、走行にはスクリプトから流
- 機器を必要としないDBインスタンスを走らすために開発。しかできないもの"のオフライン"開発の流/フォルダにまとめた。
デメリットの連する情報を表示します
- 変更し、更新する必要があるクリプトの現在のフォルダのほか、移行スクリプトを移動フォルダ)
おかげさまで又はその入力!
解決
実は、これが最良の方法です。それが聞こえるかもしれ面倒として、それはツールやVSDB .schemaファイルの展開のような比較SQLを使用しての代替案よりも優れています。私は今、いくつかの時間のために、正確にSMAEアプローチを主張しています:バージョン制御およびデータベースを。私のアプリは、最初のスクリプトからv1のスキーマを展開し、各バージョンのアップグレードスクリプトを実行します。各スクリプトはNに、バージョンN-1からアップグレードする方法を知っている、そしてそれだけで。最終結果は、現在のバージョンである。
の最大のバック描くにはあまりにも任意のオブジェクトのの現在ののバージョン(手順、表、ビューなど)を見つけるために見て権威.sqlファイルの欠如です。しかし、上にアプリを展開することができるという利点がは任意のの以前のバージョン、およびよく制御され、テストによって配備の利点は、のスクリプトははるかに欠点を上回るます。
(V1展開するスクリプトあなたは、現在のV4.5を適用し、最終的になるまで、その後... V1.1は、V1.2を適用)あなたはこの展開プロセスを使用するための気分が悪くなった場合、そして、これを覚えておく:まったく同じこのプロセスは、内部でのリリース間でデータベースをアップグレードするためにSQL Serverによって使用されます。古いデータベースをアタッチするときには、有名な「データベースがバージョン611から612へのアップグレードを実行している」を参照し、アップグレードがの、(現在のバージョン651にまっすぐにアップグレードしませんステップによって、のステップに行くことがわかりまたは)あなたのケースでは、現在あるものは何でも。 NORアップグレードがV以上のデプロイV 651への差分ツールを実行しない。611つまりこれは、の最高のアプローチは、一度に一つのステップをアップグレードする、あなただけ使用するものです。
むしろ斜め暴言を掲示した後、あなたの質問に、実際の答えを追加する(私はおよそ強い意見を持っているテーマである、あなたが言うことができる?):私は、現在のバージョンのスクリプトバージョンを持っている価値があると思いますが、私はそれが連続した統合ビルドプロセスの成果であるべきだと思います。つまり、ビルドサーバは、(アップグレードスクリプトを使用して)現在のデータベースを構築し、その後、ビルドステップとして、データベース外のスクリプトを、現在のバージョンのスキーマスクリプトを使用してビルド降下を生成する必要があります。しかし、これらは唯一の検索とコード検査の基準として使用されるべきではなく、展開成果として、私の2Cます。
他のヒント
私はそれだけで長期的に物事がより複雑になると思います。全体のバージョンを使用すると、1つのコンテキストでそのスクリプトをテストし、それが生産のような別のコンテキストで正しく動作します知ることができるように、単一のスクリプトに住んでする必要があります。
マーティン、
あなたは現実の世界にいる場合は、は、その後、本番データベースが更新のみを受け入れる - あなたは最初からそれを「作成しない」ん。最も重要なことだからあなたはなど、見直し、見て、保存されるために、更新スクリプトのセットです。これらは、生産にそれを作るだろうスクリプトですので、これらは本当の重要性のものだけです。
あなたは彼らが主要行うことで正しいことをやっています。しかし、開発者のニーズは、スキーマのルックスが好きなものの「現在の画像」を取得することができます。 (あまりにも)頻繁に彼らは運用サーバーにログインし、GUIツールのいくつかの種類を焼成することによってそれを行うが、DBAは、あまりにも、これを行うのが好き。 (む〜!)
あなたのアプローチについての私が持っている唯一の予約は、オブジェクト型のことで、現在/前回のスキーマのです。これらのスクリプトは、データベース自体をダンプから、自動的に生成されなければなりません。あなたは自動的にタイプ別に分類することができた場合は、素晴らしいです!ない場合は、ナビゲートしやすい、それらを作るために何をすることができますけど、ガイドルールは常に「ライブデータベースから自動的に生成。」する必要があります。