今日、データベースデプロイメントテクニックについて議論しており、現在のプロセスでいくつかの最近の失敗があり、デプロイメントをロールバックしたいが、アプリケーションの古いバージョンが新しいバージョンに対してテストされたことがない状況を見てきましたデータベース。
一方では、バージョンアップ命令とバージョンダウン命令(SQLまたはアプリケーション言語で書かれているかどうか)があり、アプリは到達する必要のあるバージョンを知っている移行スタイルのデプロイメントがあります。
これらは単純であり、あまりロールバックしないため、開発者は単純に熱心です。ただし、フィールド/テーブルを追加していて、ロールバックする前にそのフィールドにデータが入力されると、リスクがあります。さらに悪いことに、以前のバージョンに関連するデータをドロップした場合。
一方、アップグレード、ロールバック、ロールフォワードのアプローチを検討することもできます。このアプローチでは、ロールバックが移行ほど劇的ではありません。たとえば、アップグレードにより、null不可フィールドが追加される場合があります。rollbackはnullを許可するので、古いアプリは気にしません。rollforwardは、nullフィールドにデータを入力し、再びnull不可にします。
これはデータを保持しますが、コーディングとテストの両方が複雑です(残念ながら、自動化された統合テストはほとんど存在せず、修正中に問題が発生します)。
これらの問題を軽減する安全な方法はありますか?他に検討すべきオプションはありますか?後で痛みを和らげることができる悪い経験を共有したいですか?