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

Sql server 2008 删除大型数据库中的重复行会引发错误,sql-server-2008,Sql Server 2008,我有一个相当大的数据集,大约1000万行,其中有许多重复项。为了删除这些重复项,我使用这个查询,据我所知,它是最有效的: ;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”的事务日志已满。要了解日志中的空间无

我有一个相当大的数据集,大约1000万行,其中有许多重复项。为了删除这些重复项,我使用这个查询,据我所知,它是最有效的:

;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\u reuse\u wait\u desc列


如何绕过此问题并删除重复的行?

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


嘿,微软:用一个未记录的删除方法怎么样?

更频繁地截断日志。将此日志放在另一个驱动器上,或者在另一个驱动器上添加第二个日志。如果不可能,请从mytable M中选择top 1000000*,从mytable中截断日志并替换,只要不再删除任何行,就尝试运行此查询。每次运行后,截断日志。为了获得更好的解决方案,post create table.TRUNCATE不支持WHERE子句。它还会重置标识属性