我有一个15GB的数据库,其中一些二进制数据占数据库的50%。我想删除那些不需要的数据,但我的事务日志的大小会爆炸。我有什么选择?
我只能删除一个列数据:
UPDATE t SET binData=NULL WHERE binData IS NOT NULL
是的,空间可能是问题:因此我的问题。我需要在1000多个数据库上执行此操作(大多数是cca 1-2GB)。我没有2倍的可用空间
答案 0 :(得分:0)
注意:请试试拳头。 请勿在生产中使用!!!
答案 1 :(得分:0)
根据您上次的评论,似乎最好的方法是这样的:
注意:请先在测试盒/安装上尝试此操作。在没有进行前期测试和规划的情况下,请勿在生产中进行此操作!
注意:无论如何,当您必须清除这样的列时,请在进程前将日志记录设置为“简单”,以使实际日志记录保持最小。
答案 2 :(得分:0)
select 1
while @@rowcount > 0
begin
UPDATE t
SET top (100000) binData = NULL
WHERE binData IS NOT NULL
end
让db设置为截断登录检查点
答案 3 :(得分:0)
您可以简单地更新几个较小批次的记录。也许你必须在每批之后调用CHECKPOINT作为预防措施。如果您的数据库处于SIMPLE RECOVERY模式,则应自动回收分配的日志空间。如果您的数据库处于FULL RECOVERY模式,那么您必须在每个批处理后执行日志备份,以便允许在日志中重用已分配的空间。您可以通过这种方式控制日志大小。