删除大型数据库中的重复行会引发错误

时间:2013-04-10 04:15:13

标签: sql-server-2008

我有一个相当大的数据集(大约1000万行),有很多重复数据。要删除这些重复项,我使用此查询(来自this post - 我理解为最有效):

;WITH cte
  AS (SELECT ROW_NUMBER() OVER (PARTITION BY COL1, COL2, COL3 
    ORDER BY ( SELECT 0)) RN
  FROM MYTABLE)
DELETE FROM cte
WHERE RN > 1

服务器返回此错误:

数据库'ABC'的事务日志已满。要找出无法重用日志中的空间的原因,请参阅sys.databases中的log_reuse_wait_desc列

如何解决此问题并删除重复的行?

1 个答案:

答案 0 :(得分:0)

长期存在的问题。 DELETE是一个记录的操作,过去的经验告诉我,当删除大量数据时,日志可能会比数据文件大。一个好的解决方案,但在所有情况下都不适用,是将要保留的数据复制到新表中,删除原始表,然后将新表重命名为原始表。显然,在未使用数据库的维护期间,必须这样做。

嘿Microsoft:未记录的DELETE

怎么样