大表如何在线新增字段?

如何用更少的时间,在线新增字段?
 
理论步骤:
  假如主数据库为A库,表为a表,现在是20190404 12点
  1.利用A库的全备+事务备,恢复到 20190404 12点(假如用了3个小时) ,恢复成一个新库B库
  2.记录A.a表的更新、删除、插入等操作到A.c
  3.用select * into  A.b from B.a ,在A库构建新表,表数据复制完后创建索引等等(假如花费1小时)
  4.现在,时间到了2019040416点。而A.b表,只是少了12点到16点这4个小时的业务数据操作
  5.然后锁A.a表(可以开一个事务),防止新数据。然后开始利用A.c表的记录,对A.b表进行重做即可。
  6.释放A.a表锁,直接重命名

 --注意点,考虑自增列。可以在第3步做完后加上去(若是不行就用insert into select的方式,开一下identity_insert即可)

  4个小时的操作,只是重做,很快吧,如果这段时间没有太多,我就算它几十万次单行操作,这也就几分钟搞完了吧? 
 
实操:
1、这个很简单就不说啦
2、利用触发器记录表的DML(https://www.cnblogs.com/gered/p/10656016.html
3、简单,都写清楚了
4、无需操作
5、锁表
  begin
    select * from table with(holdlock)  -- 参考锁(https://www.cnblogs.com/gered/p/9147204.html    中的第四大点)
6、 5中窗口事务直接commit即可,或者rollback
  提取出2中保存的SQL,执行即可
 
 
posted @ 2019-04-04 17:23  郭大侠1  阅读(319)  评论(0编辑  收藏  举报