大表如何在线新增字段?
如何用更少的时间,在线新增字段?
理论步骤:
假如主数据库为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表进行重做即可。
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,执行即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南