最小记录插入

Kar*_*arl 5 sql logging bulkinsert insert sql-server-2008

我有一个INSERT声明,它占用了大量的日志空间,以至于硬盘驱动器在声明完成之前实际上已经填满了.

问题是,我真的不需要记录它,因为它只是一个中间数据上传步骤.

为了论证,让我说我有:

  • 表A:初始上载表(使用填充bcp,因此没有日志记录问题)
  • 表B:使用填充 INSERT INTO B from A

有没有一种方法可以在A和B之间复制而不会将任何内容写入日志?

PS我正在使用SQL Server 2008简单的恢复模型.

IAm*_*rey 5

来自微软 MVP 路易斯戴维森:

根本没有记录就无法插入。SELECT INTO 是在 T-SQL 中最小化日志记录的最佳方法,使用 SSIS 您可以使用 Bulk Insert 执行相同类型的轻型日志记录。

根据您的要求,我可能会使用 SSIS,删除所有约束,尤其是唯一键和主键,加载数据,然后添加约束。我像这样在一个多小时内加载了大约 100GB,开销相当小。我正在使用 BULK LOGGED 恢复模型,它只在日志记录期间记录新范围的存在,然后您可以稍后删除它们。

关键是从准系统表开始,它只是尖叫。构建索引一旦离开,您将无需维护任何索引,每个索引只构建一个索引。

如果您不想使用 SSIS,这一点仍然适用于删除所有约束并使用BULK LOGGED恢复模型。这大大减少了对INSERT INTO语句的日志记录,因此应该可以解决您的问题。

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