6

既存のデータベースのスキーマ変更に取り組んでいます。

データベースをバックアップして開発用コピーを取得し、変更を加えました。単一のロール スクリプトを作成して、1 回のトランザクションで運用マシンの変更を移行します。

デプロイの問題が発生した場合にロールバック スクリプトを作成するためのベスト プラクティスはありますか? 次のパターンを使用して手書きで書く前に:

  • 新しい制約とインデックスを削除する
  • テーブルを変更して新しい列を削除する
  • 追加されたテーブルをドロップ
  • トランザクションをコミットする

より良いアプローチはありますか?

4

5 に答える 5

7

5番目のステップがありません

  • 新しい制約とインデックスを削除する
  • テーブルを変更して新しい列を削除する
  • 追加されたテーブルをドロップ
  • トランザクションをコミットする
  • スクリプトを本番環境で実行する前に徹底的にテストする

より効率的なアプローチは、RoR 移行のように変更が発生したときに登録する ことです。DB の変更ごとに、変更の適用とロールバックの両方を行うスクリプトを作成します (もちろん、選択は自由です)。これらのスクリプトは、コードと同じようにバージョン管理下に置くことができます。

さらに、データベースにバージョン番号を保持する場合は、各スクリプトをバージョン番号で識別し、実行されたアクションに従ってデータベース内のバージョン番号を増減させることで、もう少し自動化できます。

于 2008-12-30T18:54:23.190 に答える
4

基本的にはそれだけです。あなたのアプローチを除けば、追加することはあまりないと思います。これが当社でのやり方です。開発者はスクリプトとロールバック スクリプトを作成する責任があり、最初の変更が適用される前と同じ状態で DB を残す責任があります。その後、DBA はそれを本番環境で実行します。問題が発生した場合は、ロールバック スクリプトを実行し、すべてが正常に戻ります。依存関係と、オブジェクトを変更してから逆方向にロールバック スクリプトを作成する順序に注意してください。

于 2008-12-30T18:03:36.540 に答える
1

RedgateのSQLCompareなどのツールを使用する場合は、2つのデータベース間の比較を両方の方法で実行し、両方を使用して必要なスクリプトを作成できます。dev to prodスクリプトには変更が加えられ、prdtodevスクリプトは元の本番データベースの状態に戻ります。これにより、どちらのスクリプトでも忘れないようにできます。

于 2008-12-30T20:05:10.677 に答える
1

SQL Server 2005以降では、データベーススナップショットを作成することもできます。これにより、いつでもその状態に戻ることができます。詳細については、次のページを参照してください。

http://msdn.microsoft.com/en-us/library/ms175158.aspx

于 2008-12-30T20:08:48.190 に答える
1

比較的小さなデータベースの場合は、アップグレードを適用する前にバックアップを作成してください。すべてがうまくいかない場合は、復元を行います。

ライブになって新しいデータが入力されると、とにかく元に戻すことはできません。問題を修正するだけです。

于 2008-12-30T18:04:48.003 に答える