在我的工作中,我将把数百万条记录移到另一台服务器上,并将它们从源服务器中删除。我的DBA设置了一个备份场景,每5分钟进行一次更改备份。他曾向我发出有关删除纪录的警告:
...it将创建一个巨大的事务日志,可能会导致5分钟的事务日志备份失败.
有什么办法可以绕过这件事吗?
发布于 2016-09-23 16:27:52
我们不知道为什么您的事务日志备份会失败,但我们可以讨论解决方案。他可能会担心事务日志膨胀,当事务日志变得如此大时,它就会填满存储日志文件的驱动器。
首先,也是最简单的解决方案:如果要将所有数据全部从表中移出,只需截断表。这是最低限度的记录。
第二:将DELETE语句拆分为批处理。找到一种划分数据的方法,比方说批量大小为5,000。
DELETE FROM OldDBTable
WHERE ID IN
(SELECT TOP 5000 ID
FROM OldDBTable
WHERE [Statement to define deleted data here])如果你想的话,你可能会增加批次大小。然后将一个WAITFOR DELAY '0:05:00'设置为等待下一个批处理的5分钟。
发布于 2016-09-23 16:36:58
取回事务日志对正在进行的活动几乎没有任何影响,也与它们没有关系,因此日志备份不会失败。
我认为您的DBA更担心在删除数百万条记录的同时增加事务日志大小。
如果是这样的话,您可以与他讨论并尝试在小批中移动和删除记录,而不是在单个事务中移动和删除记录。
您可以查看以下链接:https://sqlperformance.com/2013/03/io-subsystem/chunk-deletes
但请先与你的DBA确认。
发布于 2016-09-24 15:09:47
最近,我以最小的开销完成了类似的任务。我和我的高级助理协调。DBA到
select * into foo_table from table where <keep_condition> = 'true'的记录foo_table重新插入(注意计算/标识列)免责声明:显然,最好是使用大量的回滚能力和在停机期间这样做。但如果你能有时间做这件事,一点也不头痛。
https://dba.stackexchange.com/questions/150521
复制相似问题