SQL Server数据存档

时间:2018-06-08 15:06:14

标签: asp.net sql-server azure azure-sql-database rdbms

我有一个SQL Azure数据库,我需要在其上执行一些数据存档操作。

计划是将实际表中的所有无关数据移动到Archive_*表中。

我的桌子最多有8到900万条记录。

一种选择是编写存储过程并将数据插入到新的Archive_*表中,并从实际表中删除。

但这项操作非常耗时且运行时间超过3小时。

我的情况是我不能超过一小时的停机时间。

如何更快地进行归档?

2 个答案:

答案 0 :(得分:1)

您可以使用Azure自动化在维护窗口期间每天同时安排存储过程的执行,此存储过程将在每次运行时归档最旧的一周或一个月的数据。商店程序应该存档早于X周数/月/年的数据。请阅读this文章以创建Runbook。几天后,您将存档所有旧数据,Runbook将从现在开始继续完成工作。

答案 1 :(得分:1)

你不能让它更快,但你可以让它变得无缝。第一个选项是使用单独的任务将数据从源移动到归档表。为了防止表锁升级和整体性能下降,我建议您限制单个事务的大小。例如。启动事务,将N条记录插入存档表,从源表中删除这些记录,提交事务。继续几天,直到传输完所有必要的数据。这种方式的优点是,如果存在某种类型的故障,您可以重新启动存档过程,并且它将从故障点继续。

第二个不排除第一个选项的选项实际上取决于源表的性能对您的重要程度以及它们发生了多少次更新。如果不是问题,您可以编写实际将每个插入/更新的记录倒入存档表的触发器。然后,当您想要清理时,您需要做的就是从源表中删除过时的记录,它们的副本已经存在于归档表中。

在这两种情况下,您都不需要停机。