TFS&SSDT を使用して SQLServer 展開スクリプトを作成できますが、展開をロールバックできるようにロールバック スクリプトを作成する方法はありますか? ありがとう
2 に答える
SSDT (および同様の製品) はすべて、プロジェクトのスキーマをライブ データベースと比較してデータベースをモデルと同期させることで機能するため、ロールバック スクリプトを直接作成する方法はありません。デプロイ前またはデプロイ後のスクリプトによって変更/追加/削除されたデータに関する考慮事項もあります。
そうは言っても、いくつかのオプションがあります。
- リリースするたびにスナップショットを作成します。以前のリリースのスナップショットを使用して、ロールバックのために別の比較を行うことができます。
- 他の場所で以前のバージョンを維持します。おそらく、本番システムとローカル マシンのスキーマを比較します。それを使用して、本番環境と比較し、ロールバックを実行できます。
- リリース前に既存のシステムの dacpac を生成します (これを行うには、SQLPackage または SSDT を使用します)。何か問題が発生した場合は、それを使用して、そのバージョンのスキーマをデータベースに戻すことができます。
- リリース前にデータベース スナップショットを取得します。最良のシナリオでは、それは必要なく、スナップショットを削除できます。最悪の場合、それを使用してロールバックできます。もちろん、他の場所で元の状態を維持するため、スペースと IO に注意する必要があります。
- ロールバックの必要性を最小限に抑えるために、いくつかの環境で変更を実行します。理想的には、これを開発、QA、およびステージング/ユーザー受け入れ環境で実行した場合、コードとリリースは問題なくリリースできるほどしっかりしている必要があります。
データ変更をロールバックするには、それに応じてコーディングする必要があります。それぞれのシナリオが異なるため、少しトリッキーになる可能性があります。リリースに含まれていた変更を取り消すことができるスクリプトを作成する必要があります。行を挿入した場合、それを削除するにはロールバック スクリプトが必要です。大量のデータを更新した場合は、そのデータをバックアップするか、別の方法でデータを復元する必要があります。
データベース プロジェクトに変更を加える前に、スナップショット (dacpac) を作成します。このスナップショットと変更したデータベース プロジェクトを比較して、リリース スクリプトを生成します。ソースとターゲットを交換して逆スキーマ比較を行うのは簡単ですが、おそらくターゲットがデータベースであるため、逆比較から更新スクリプト (ロールバック スクリプト) を生成できないことがわかりました。事業。
この問題を回避してロールバック スクリプトを生成するには、次のようにします。
変更したデータベース プロジェクトを (localdb) 開発データベースにデプロイします。
変更が行われる前から、ソース管理からデータベース プロジェクトの以前のバージョンをチェックアウトします。
以前のバージョンのデータベース プロジェクトから (localdb) 開発データベースへのスキーマ比較を実行します。
スキーマ比較を使用して更新スクリプトを生成します。この更新スクリプトはロールバック スクリプトになります。
ロールバック スクリプトをより直接的に生成できると便利ですが、上記の 4 つのステップのプロセスにかかる時間は 5 分未満です。