sql-server – 如何在最小停机时间的情况下将rowversion列添加到
使用SQL Server 2008及更高版本,我想在一个大表中添加一个rowversion列,但是当我简单的时候 ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL 然后该表不能用于更新太长时间. 我可以使用哪些策略来减少停机时间?我会考虑任何事情.当然越简单越好,但我会考虑任何策略. 我的想法是,作为最后的手段,我可??以维护一个由触发器维护的复制临时表,然后将登台表sp_rename到原始表中.但我希望有更简单/更容易的事情. 解决方法考虑使用相同的模式和rowversion列创建一个新表,并在两个表上添加一个视图,该视图执行union all.让人们使用视图,并针对基础表格编写替代触发器.观点.插入应该发送到新表,更新应该将数据移动到新表,删除应该应用于两个表. 然后在后台进行批量移动,一次移动尽可能多的记录到新表.在这种情况下,您仍然可以遇到并发问题,以及一些精彩的执行计划,但它可以让您在移动发生时保持在线状态. 理想情况下,您在星期五下午开始这个过程,以尽量减少对最终用户的影响,并尝试在星期一早上之前完成.一旦它到位,您可以将视图更改为仅指向新表,并且精简的执行计划将消失.理想的情况下. 要避免在批量迁移数据时触发触发器,请查看触发器中已删除/插入的表中的行数,如果它们接近批处理中的行数,则跳过活动. 在结束时,迈克尔决定跳过视图(而不是从原始表中删除)以获得更稳定的计划.权衡基本上是两份表.他把它变成了series of blog posts. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |