SQL Serverロールバックスクリプトを作成する最良の方法は?
-
03-07-2019 - |
質問
既存のデータベースに対するスキーマの変更に取り組んでいます。
開発コピーを取得するためにデータベースをバックアップし、変更を加えました。単一のロールスクリプトを作成して、1つのトランザクションで実稼働マシンの変更を移行します。
展開の問題が発生した場合にロールバックスクリプトを作成するためのベストプラクティスはありますか?次のパターンを使用して手書きする前に:
- 新しい制約とインデックスを削除する
- テーブルを変更して新しい列を削除する
- 追加されたテーブルのドロップ
- トランザクションをコミット
より良いアプローチはありますか?
解決
基本的にそれだけです。あなたのアプローチ以外に、追加すべきことはあまりないと思います。これが当社での方法です。開発者はスクリプトとロールバックスクリプトの作成を担当し、DBは初期変更が適用される前と同じ状態のままにする責任があります。その後、DBAは運用環境でそれを実行します。問題が発生した場合、ロールバックスクリプトを実行し、すべてが正常に戻ります。オブジェクトを変更し、ロールバックスクリプトを逆方向に作成する依存関係と順序を念頭に置いてください。
他のヒント
5番目のステップがありません
- 新しい制約とインデックスを削除する
- テーブルを変更して新しい列を削除する
- 追加されたテーブルのドロップ
- トランザクションをコミット
- 本番環境で実行する前に、スクリプトで地獄をテストします
より効率的なアプローチは、 RoR < a href = "http://wiki.rubyonrails.org/rails/pages/UsingMigrations" rel = "nofollow noreferrer">移行 実行。 DBの変更ごとに、変更を適用し、それをロールバックするスクリプトを作成します(もちろん、選択できます)。その後、これらのスクリプトをコードのようにバージョン管理することができます。
さらに、データベースにバージョン番号を保持する場合、各スクリプトをバージョン番号で識別し、実行されたアクションに従ってデータベース内のバージョン番号を増減させることにより、バージョン番号をもう少し自動化できます。
データベースが比較的小さい場合は、アップグレードを適用する前にバックアップを作成してください。すべてがうまくいかない場合は、復元を行います。
一度公開されて新しいデータが入力されると、とにかくロールバックできません。問題を修正する必要があります。
RedgateのSQL Compareなどのツールを使用する場合、2つのデータベース間の比較を両方の方法で実行し、両方を使用して必要なスクリプトを作成できます。 dev to prodスクリプトには変更が加えられ、prd to devスクリプトは元の本番データベースの状態に戻ります。これにより、どちらのスクリプトでも何も忘れないことが保証されます。
SQL Server 2005以降では、データベーススナップショットを作成することもできます。これにより、いつでもその状態に戻ることができます。詳細については、このページを参照してください: