在保持一组表可用的同时重新创建一组表的最佳实践?

时间:2014-06-03 22:09:16

标签: sql sql-server sql-server-2008 ssis

我们每隔几周就会修改一组客户数据。这不是增量批处理,而是完整的从头开始设置。我有一组SSIS包,可以从这些源数据创建大量的客户元数据。这些集非常复杂,并且出于性能原因而不能作为视图工作,因此SSIS包从视图中创建表。这些表有几个索引,它们工作得很好。

编辑:[重命名表的一个问题是,当我重命名表时,我不再有一个空的新表来向下次添加数据。所以我必须从头开始创建它,这意味着表定义存储在proc或本地文件中。问题是,这些表格及其包含的数据正在不断发展(它的营销数据,因此我们总是想出新的指标来投放客户),因此在发布版本之间更改和添加列。我想限制我必须进行这些更改的地方数量。现在它更改了视图,更改了SSIS包,并更改了目标表。]

第一个问题是SSIS包需要花费很长时间才能运行,并且在它们运行时,每个表依次脱机,并且每个尚未更新的表都不匹配因为这些集合(通常一起使用)在程序包运行时表现得非常糟糕。编辑:[这是因为客户ID随每次发布的数据而有所改变。因此,将旧版本表加入新版本表意味着来自两个不同客户的数据将被连接在一起。]

我试图在保持桌子可用的同时弄清楚如何做到这一点。

当前方法:截断旧表,添加新记录,重建索引。花了太长时间。

创意#1:创建新表,重建索引,删除旧表,将新表重命名为旧表名。重命名应该非常快。问题是重命名会删除新表的表结构,因此我必须在下次运行该进程时重新创建表结构(包括索引)。没有简单的方法可以通过sql,甚至在SSIS中完成此操作。这意味着将表结构定义保留在本地文件而不是DB中......听起来不太好。

创意#2:截断&重新加载新表,重建索引,将它们复制到新表,新表,然后删除旧表并重命名新表。这留下了未来的第一组新表当然,这里的问题是我们占用了三倍的空间,复制表需要相当长的时间。

创意#3:创建新表,截断旧表,将数据插入旧表,重建索引。这可能需要花费与当前方法或#1相同的时间。

这种事情的最佳做法是什么?我还缺少其他方法吗?

编辑:[使用SQL Server 2008,不确定它是否是企业版。我没有对服务器的管理员访问权限,所以很多东西,比如在服务器上运行SSIS包,都不可用。]

2 个答案:

答案 0 :(得分:1)

我会使用SQL数据库快照功能。这样可以在某个时间点保留数据库的快照,当您在后台进行更新时,用户可以愉快地查询该快照。

您确实需要大量的可用磁盘空间,因为快照文件的增长和增长时间越长,您尝试保留快照(同时更新底层数据库)。否则设置和使用相当简单:

http://msdn.microsoft.com/en-us/library/ms175158.aspx

答案 1 :(得分:-1)

  

我还缺少其他方法吗?

  1. 在不同的服务器,不同的实例或不同的架构上创建新表并加载新数据。
  2. 切换服务器,实例或架构。
相关问题