高手请看?800万条记录使用update语句日志过大报错怎么办?

时间:2021-04-28 14:45:12
高手请看?800万条记录使用update语句日志过大报错怎么办?

我使用update语句更新表时间比较长,后来发现是磁盘空间不够了,
已经占用了10G了,请教大家该怎么办?服务器的空间是不能再增加了,
update字段也一定要作的,该怎么办呢!!!是不是有些什么设置呢???

8 个解决方案

#1


笨办法,分成几部分作可以么?

#2


//////////////////压缩日志及数据库文件大小////////////////////////////

/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
--*/

1.清空日志
DUMP  TRANSACTION  库名  WITH  NO_LOG    

2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG

3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

#3


800万条的update,完成起來是很費時的,儘量不要這樣做

#4


取消日志文件的自动增长,但是这样对数据就不是很安全了
万一在更新800万条数据的过程中出现异常,就无法恢复数据了,所以不建议这样做,这是不得以才这么做。
最好我觉得还是楼上说的,采取分段更新

#5


其实我作之前是收缩过的
是不是要将数据库设置乘自动搜索呢?

#6


初始化数据库,修改数据库为大容量日志记录模式
DECLARE @recovery varchar(64)
DECLARE @dbName varchar(64)

SELECT @dbName = db_name()  --当前数据库名称
SELECT @recovery =convert(varchar(64), DATABASEPROPERTYEX(@dbName,'recovery'))

IF charindex( @recovery, 'FULL' ) >0  --如果数据库为full模式(故障还原为完整模式)
BEGIN
EXEC ('ALTER DATABASE '+@dbName+' SET recovery BULK_LOGGED ')
PRINT '数据库修改为大容量日志记录恢复模型成功'
END
ELSE 
PRINT '数据库已修改为大容量日志记录恢复模型下'
GO

#7


清理数据,分段更新看看

#8



分几次处理吧!

#1


笨办法,分成几部分作可以么?

#2


//////////////////压缩日志及数据库文件大小////////////////////////////

/*--特别注意
请按步骤进行,未进行前面的步骤,请不要做后面的步骤
否则可能损坏你的数据库.
--*/

1.清空日志
DUMP  TRANSACTION  库名  WITH  NO_LOG    

2.截断事务日志:
BACKUP LOG 数据库名 WITH NO_LOG

3.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
--选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了

#3


800万条的update,完成起來是很費時的,儘量不要這樣做

#4


取消日志文件的自动增长,但是这样对数据就不是很安全了
万一在更新800万条数据的过程中出现异常,就无法恢复数据了,所以不建议这样做,这是不得以才这么做。
最好我觉得还是楼上说的,采取分段更新

#5


其实我作之前是收缩过的
是不是要将数据库设置乘自动搜索呢?

#6


初始化数据库,修改数据库为大容量日志记录模式
DECLARE @recovery varchar(64)
DECLARE @dbName varchar(64)

SELECT @dbName = db_name()  --当前数据库名称
SELECT @recovery =convert(varchar(64), DATABASEPROPERTYEX(@dbName,'recovery'))

IF charindex( @recovery, 'FULL' ) >0  --如果数据库为full模式(故障还原为完整模式)
BEGIN
EXEC ('ALTER DATABASE '+@dbName+' SET recovery BULK_LOGGED ')
PRINT '数据库修改为大容量日志记录恢复模型成功'
END
ELSE 
PRINT '数据库已修改为大容量日志记录恢复模型下'
GO

#7


清理数据,分段更新看看

#8



分几次处理吧!