1. 程式人生 > 其它 >生產環境在對Web應用進行版本回退時針對資料庫表的回滾操作

生產環境在對Web應用進行版本回退時針對資料庫表的回滾操作

背景

同組的一位負責B端Web專案的同事將版本釋出到生產環境之後。收到了使用者很多投訴,諸如功能很難用、操作流水很繁瑣。產品經理進行分析檢討,判斷是因為新舊版本系統使用者使用習慣差異太大,且沒有相容原有功能。經過短暫的商議後決定回退版本。

因為是web應用所有直接將服務端的版本包回退到上次發版即可。但是在回退的時候需要考慮一個問題就是當初發版的時候可是提了一些DDL和DML的SQL指令碼,比如升級的時候增加了一些新的欄位且設定為必填、增加了新的唯一索引等。

解答

當新版本灰度釋出表現不佳時,應回滾至舊版本。對於純粹的Web應用而言,回滾相對簡單。主要難點在於使用者資料的無縫切換。對於客戶端應用,如果期待使用者自行解除安裝新版本另行安裝舊版本,成本和流失率都太高。可以考慮通過快速另行釋出新版本,利用升級來“回滾”,覆蓋上次灰度釋出的修改。

那位同事需要準備的SQL事項如下

1.在原有表上新增的欄位,如果是Not Null,則需要將欄位改為Default Null。

2.在原有表上新增的唯一索引約束,需要將新增的唯一索引Drop掉。

3.新增一張表,不需要處理。

4.基於新版本程式碼生成的新的資料,需要進行刪除。

5.基於新版本程式碼更新了原有的資料,需要具體業務具體分析,比如如新版本中在原有的型別欄位如showType中新增了一種型別,以前只有A和B兩種型別,現在擴充了C、D、E。那麼回滾之後如果後續業務邏輯中會查出來這些資料,並進行判斷等相關邏輯處理時,那麼就有可能會報錯,所以需要與需求方確認,判斷是刪除掉這部分資料,還是修復這部分資料。

建議

在進行版本迭代升級時,一般資料庫不建議刪除列,也不建議變更欄位的含義,如果需要則優先考慮新增新欄位,或者新建表通過外來鍵關聯起來,這樣升級、回退,都不太會出現太大的問題。

本篇文章如有幫助到您,請給「翎野君」點個贊,感謝您的支援。

首發連結:https://www.cnblogs.com/lingyejun/p/15854099.html

作者:翎野君
出處:http://www.cnblogs.com/lingyejun/
若本文如對您有幫助,不妨點選一下右下角的【推薦】。
如果您喜歡或希望看到更多我的文章,可掃描二維碼關注我的微信公眾號《翎野君》。
轉載文章請務必保留出處和署名,否則保留追究法律責任的權利。