关于数据库迁移厂商回退方案的一点见解
最近有oracle数据库迁移到某国产数据库,某个业务模块失败回退后,业务回退到oracle运行.
发现部分序列在迁移前的oracle到回退到oracle的值相差甚远,于是咨询厂商得知了他们"愚蠢"的做法.
具体做法是将序列在迁移过程中需要手工创建,在目标库中创建时在当前值的最高位加一,比如oracle当前值是20000000,迁移过去就是30000000.
虽然这样操作很大概率可以防止序列冲突,但是个人认为这个做法不是非常科学,而且过于简单粗暴,也存在一些风险和隐患.
一:出现很大的空洞,以上面的例子来说会出现一千万的序列空洞.
二:如果序列的数量非常庞大,当前的业务有将近3000个序列,手工修改难免会出现遗漏或错误,后果很严重.
三:如果序列的当前值足够小,高位加一的空隙会非常小,存在较高的安全隐患.比如当前值20,迁移到国产数据库高位加一后,值是30,中间的空隙只有10,很有可能会造成数据冲突.
个人想到的不破坏原有逻辑的解决方案:
首先收集数据库层级一天的序列增长情况,根据一天的序列增长量设置动态的映射规则:
一天增长量<=1000,迁移时序列增长1000
一天的增长量>1000且<=100000,设置为一天增长量的20%
....
当然以上算法只是参考,可优化的点还有很多,例如加入当前值和最大值的计算逻辑等等.
使用程序将以上过程转换为自动生成的逻辑,可以最大限度的避免迁移过程中序列手工迁移产生的风险.
浙公网安备 33010602011771号