加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 如何在最小停机时间的情况下将rowversion列添加到

发布时间:2020-12-25 04:16:20 所属栏目:编程 来源:网络整理
导读:使用SQL Server 2008及更高版本,我想在一个大表中添加一个rowversion列,但是当我简单的时候 ALTER TABLE [Tablename]ADD Rowversion [Rowversion] NOT NULL 然后该表不能用于更新太长时间. 我可以使用哪些策略来减少停机时间?我会考虑任何事情.当然越简单越

使用SQL Server 2008及更高版本,我想在一个大表中添加一个rowversion列,但是当我简单的时候

ALTER TABLE [Tablename]
ADD Rowversion [Rowversion] NOT NULL

然后该表不能用于更新太长时间.

我可以使用哪些策略来减少停机时间?我会考虑任何事情.当然越简单越好,但我会考虑任何策略.

我的想法是,作为最后的手段,我可??以维护一个由触发器维护的复制临时表,然后将登台表sp_rename到原始表中.但我希望有更简单/更容易的事情.

解决方法

考虑使用相同的模式和rowversion列创建一个新表,并在两个表上添加一个视图,该视图执行union all.让人们使用视图,并针对基础表格编写替代触发器.观点.

插入应该发送到新表,更新应该将数据移动到新表,删除应该应用于两个表.

然后在后台进行批量移动,一次移动尽可能多的记录到新表.在这种情况下,您仍然可以遇到并发问题,以及一些精彩的执行计划,但它可以让您在移动发生时保持在线状态.

理想情况下,您在星期五下午开始这个过程,以尽量减少对最终用户的影响,并尝试在星期一早上之前完成.一旦它到位,您可以将视图更改为仅指向新表,并且精简的执行计划将消失.理想的情况下.

要避免在批量迁移数据时触发触发器,请查看触发器中已删除/插入的表中的行数,如果它们接近批处理中的行数,则跳过活动.

在结束时,迈克尔决定跳过视图(而不是从原始表中删除)以获得更稳定的计划.权衡基本上是两份表.他把它变成了series of blog posts.

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读