SQL Server数据库事务占用占用空间过大,导致磁盘分区满的解决方法
现象
事务日志占用过大,已经把磁盘分区占用满了;此时已无法收缩事务日志,提示事务日志已满
解决方法
方法一:收缩事务日志
1. 在“数据库属性-文件”中添加事务日志文件,事务日志文件存放于其他分区,先通过此方式解决事务日志已满的问题
2. 进行事务日志收缩
1) 先在数据库属性-选项中将恢复模式改为“简单”(简单模式不记录事务日志)
2) 然后右键数据库-任务-收缩-文件
3) 收缩文件界面:文件类型选择“日志”,下方的收缩操作,选择“在释放未使用的空间前重新组织页”,“将文件收缩到”填写收缩后的日志文件大小
方法二:删除事务日志文件
操作存在风险,做好快照或备份
1. 在“数据库属性-文件”中添加事务日志文件,事务日志文件存放于其他分区,先通过此方式解决事务日志已满的问题
2. 将数据库进行分离,分离后删除ldf后缀的日志文件
3. 将数据库的mdf文件移动到其他位置,创建新数据库,数据库名与原来的相同
4. 停止SQLServer服务,将原来的mdf数据库文件,覆盖新建数据库的mdf文件
5. 新建查询,检查和修复数据库
alter database <DBNAME> set emergency -- 设置数据库为紧急模式
alter database <DBNAME> set single_user -- 设置数据库为单用户模式
dbcc checkdb(<DBNAME>, repair_allow_data_loss) -- 关键语句,会尝试修复所有报告的错误。这一步操作会重新建立ldf日志文件
alter database <DBNAME> set multi_user -- 设置数据库为多用户模式
alter database <DBNAME> set online -- 设置数据库为联机模式
如果dbcc checkdb执行有报错,可以多执行几次,直到没有报错