生产环境在对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。那么回滚之后如果后续业务逻辑中会查出来这些数据,并进行判断等相关逻辑处理时,那么就有可能会报错,所以需要与需求方确认,判断是删除掉这部分数据,还是修复这部分数据。

建议

在进行版本迭代升级时,一般数据库不建议删除列,也不建议变更字段的含义,如果需要则优先考虑添加新字段,或者新建表通过外键关联起来,这样升级、回退,都不太会出现太大的问题。

本篇文章如有帮助到您,请给「翎野君」点个赞,感谢您的支持。

首发链接:博客园

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在开发Web项目过程中,数据库回滚操作可以通过使用Java代码来实现。以下是一个示例: 1. 首先,我们需要确保项目中已经引入了数据库访问的相关依赖,例如JDBC驱动程序。 2. 在Java代码中,我们可以使用JDBC提供的相关API来执行数据库操作。例如,我们可以使用`java.sql.Connection`接口来建立与数据库的连接,并创建一个`java.sql.Statement`对象来执行SQL语句。 3. 在执行数据库操作之前,我们需要在代码中启用事务。可以通过在连接对象上调用`setAutoCommit(false)`方法来将自动提交关闭,这样数据库操作将自动进入事务模式。 4. 如果在执行过程中出现错误,我们可以捕获异常并进行处理。例如,可以使用`try-catch`语句来捕获`java.sql.SQLException`异常。一旦异常被捕获,我们可以调用`java.sql.Connection`接口的`rollback()`方法来回滚数据库操作。 5. 在回滚之后,我们可以使用`java.sql.Connection`接口的`commit()`方法来提交事务。如果回滚操作成功,我们可以通过`catch`块中的代码执行相应的处理逻辑,例如输出错误信息、记录日志等。 6. 在处理完异常或成功提交事务后,我们需要关闭连接。可以通过调用`java.sql.Connection`接口的`close()`方法来关闭连接。 需要注意的是,以上步骤是一个简化的示例,实际操作可能会根据项目的具体需求而有所不同。另外,在实际开发中,也可以使用框架提供的数据库事务管理功能来简化相关操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值