利用事务复制实现大容量表定长字段类型的快速变更

场景描述:
我们的某个业务系统,由于快速增长,导致之前的主键列(自增属性+int类型)即将达到上限,需要变更为bigint类型;
另一方面,由于需要修改的键涉及多个表的关联,且有多点的复制关系,经过测试,单表修改(仅alter table alter column环节)就需要7个小时,严重影响业务;

考虑到alter table带来的锁表时间过长,我利用事务复制,变相进行类型变更操作,实现了快速变更,在大幅提高工效的同时,将alter table无法控制回滚的风险降到最低;

思路:
如果在停机后某个较短的时刻,原DB中存在一份和待修改数据表(TB_A)数据相同但结构不同的数据副本(TB_A_new),那我们就可以通过直接sp_rename(交换表名)的方式来实现字段类型的快速变更;
因此,如何能在停机前实现这个“数据相同但结构不同的数据副本”,就成为我们要解决的关键步骤;而利用事务复制,可以在不停机的前提下实现这一步骤;

在这里,创建事务复制并非完全采用常规方法,这是因为:

SQLSERVER复制中,要求发布的DB不能为同一链路上自身的订阅DB;

即,复制链路不能成环

这似乎与我们的思路矛盾,这里需要通过一些技巧来实现“复制环路”的设想;</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值