大表如何在線新增字段?
阿新 • • 發佈:2019-04-04
創建 字段 重做 begin ble 新增 target 執行 表數 如何用更少的時間,在線新增字段?
理論步驟:
假如主數據庫為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,執行即可
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表鎖,直接重命名
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,執行即可
大表如何在線新增字段?