数据迁移如何不需要中止业务
信息系统经常涉及新旧系统数据库之间的数据迁移。这些数据的数据量可能很大,迁移费时,而且可能数据在工作日中还会源源不断的产生,不能被中断,典型场景就是政府办公部门。
要保证业务不被中断,一个解决办法就是在周末进行数据迁移,那时所有的业务可以停止。但是要迁移的数据量经常都超过两天可以处理的。让客户单位停工?不太可能。
另一种方法是取出旧系统新近的一个数据导出,拿数据导出做迁移数据源,这样,迁移工作就不只可以在非工作日进行了。但这样也有问题:在数据迁移进行过程中,旧系统新产生、修改、删除的数据怎么更新?我们很想给这些数据做标记,这样就很容易区别出这些量不大的数据,再拿到工作日去做,那时间就足够了。时间上考虑,可以从周五下午开始到周一早上8:00,根据客户单位工作日安排尽量取得多的富余时间。
如何做标记?有两种办法,一是修改旧系统,让它在修改数据时做一个时间标记,但是旧系统我们没办法可以修改,因此做标记的很难。二是利用数据库的触发器,把关注的表加上一个时间字段,加上一个M(modified)/A(added)标识字段,写一个触发器来处理相关DML事件填充这两个字段。在非工作日更新时,我们就可以根据这两个标记来更新数据(少量)了。
另一种方法:考虑到在MIS系统中,数据删除操作很少(为了历史追究功能,经常的处理是把数据移个位置或做个标记),如果也没有数据修改的操作,而有的是数据新加的话,那可以在非工作日的更新中使用select data from oldtable where not exists (select 1 from newtable where newtable.xxx=oldtable.yyy)来找出新加的数据,并更新新库。
要保证业务不被中断,一个解决办法就是在周末进行数据迁移,那时所有的业务可以停止。但是要迁移的数据量经常都超过两天可以处理的。让客户单位停工?不太可能。
另一种方法是取出旧系统新近的一个数据导出,拿数据导出做迁移数据源,这样,迁移工作就不只可以在非工作日进行了。但这样也有问题:在数据迁移进行过程中,旧系统新产生、修改、删除的数据怎么更新?我们很想给这些数据做标记,这样就很容易区别出这些量不大的数据,再拿到工作日去做,那时间就足够了。时间上考虑,可以从周五下午开始到周一早上8:00,根据客户单位工作日安排尽量取得多的富余时间。
如何做标记?有两种办法,一是修改旧系统,让它在修改数据时做一个时间标记,但是旧系统我们没办法可以修改,因此做标记的很难。二是利用数据库的触发器,把关注的表加上一个时间字段,加上一个M(modified)/A(added)标识字段,写一个触发器来处理相关DML事件填充这两个字段。在非工作日更新时,我们就可以根据这两个标记来更新数据(少量)了。
另一种方法:考虑到在MIS系统中,数据删除操作很少(为了历史追究功能,经常的处理是把数据移个位置或做个标记),如果也没有数据修改的操作,而有的是数据新加的话,那可以在非工作日的更新中使用select data from oldtable where not exists (select 1 from newtable where newtable.xxx=oldtable.yyy)来找出新加的数据,并更新新库。