具有有限磁盘空间的批量插入

时间:2014-04-21 16:47:14

标签: sql sql-server tsql bulkinsert

我有一种奇怪的情况,我想知道是否有人会有任何想法如何继续。

我尝试使用非常简单的批量插入语句将48 gig管道分隔文件批量加载到SQL Server 2008中的表中。

BULK INSERT ItemMovement
FROM 'E:\SQLexp\itemmove.csv'
WITH (DATAFILETYPE = 'char', FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' )

最初,我试图直接加载到ItemMovement表中。但遗憾的是,在这个巨大的文件中某处存在主要密钥违规。我创建了一个临时表来加载这个文件,我计划从临时表中选择不同的行并将它们合并到永久表中。

然而,我一直遇到太空问题。我正在使用的驱动器总共有200个演出,89个演出已经用于我的CSV文件和其他数据库信息。每次我尝试插入时,即使恢复模式设置为"简单",我也会收到以下错误(当然是9.5小时后):

  

Msg 9002,Level 17,State 4,Line 1
  数据库' MyData'的事务日志由于' ACTIVE_TRANSACTION'已满。

基本上,我的问题归结为两件事。

  1. 有没有办法将此文件加载到一个不会通过日志记录填充驱动器的表中?简单恢复本身似乎不够。

  2. 如果我们设法加载表,是否有办法进行明确的合并,以便在进行查询时从源表中删除项目(出于空间原因)?

  3. 感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

即使简单恢复,插入仍然是单个操作。

您在PK列上收到错误 我认为PK只是总尺寸的一小部分 我会把它分解为只插入PK
非常确定您可以使用FORMATFILE

限制列

如果你必须编辑一堆重复的PK,你可能需要使用一个程序来解析然后逐行加载

听起来像100美元的驱动器解决了很多工作 对于real,将安装驱动器并将其用于事务日志。

答案 1 :(得分:0)

@tommy_o关于使用TABLOCK以获取我的信息是正确的。它不仅在大约一个半小时而不是九小时内运行,而且几乎没有增加我的日志大小。

对于第二部分,我意识到通过在加载后删除我的CSV可以释放相当多的空间,这给了我足够的空间来合并表。

谢谢大家!