sql Server ldf文件过大
今天公司服务器上的Redis突然报错,上去一看服务器上的Redis文件磁盘爆满了。后来一查看,发现是数据库的一个ldf文件占了300G,导致Redis的缓存没法持久化。
后来就一直找办法处理这个已经占了300多G的ldf日志文件的方案,最后运行可靠,且有效的方式如下:
解决办法
USE[master] GO ALTER DATABASE 要清理的数据库名称SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 要清理的数据库名称SET RECOVERY SIMPLE --简单模式 GO USE 要清理的数据库名称GO DBCC SHRINKFILE (N'要清理的数据库名称_log' , 2, TRUNCATEONLY) --设置压缩后的日志大小为2M,可以自行指定 GO USE[master] GO ALTER DATABASE 要清理的数据库名称SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE 要清理的数据库名称 SET RECOVERY FULL --还原为完全模式 GO
运行以上代码,亲测有效。
SQLServer的数据库恢复模式有如下三种
Simple 简单模式
Simple模式的旧称叫”Checkpoint with truncate log“,其实这个名字更形象,在Simple模式下,SQL Server会在每次checkpoint或backup之后自动截断log,也就是丢弃所有的inactive log records,仅保留用于实例启动时自动发生的instance recovery所需的少量log,这样做的好处是log文件非常小,不需要DBA去维护、备份log,但坏处也是显而易见的,就是一旦数据库出现异常,需要恢复时,最多只能恢复到上一次的备份,无法恢复到最近可用状态,因为log丢失了。 Simple模式主要用于非critical的业务,比如开发库和测试库,但是道富这边的SQL Server(即使是生产库)大都采用Simple模式,是因为这边的SQL Server大都用于非critical的业务(critical的数据库大都采用Oracle和DB2),可以忍受少于1天的数据丢失(我们的job每天都会定时备份全库)。
如果需要压缩数据库日志(Shrink语句),将数据库模式切换到简单恢复模式后压缩率才是最高的,如果你的数据库在完整恢复模式或大容量日志回复模式下采用日志压缩,压缩后的日志大小并不会很理想。
(亲测过,300G的日志,在完整模式下压缩,只压缩了1M…呵呵)
Full 完整恢复模式
和Simple模式相反,Full模式的旧称叫”Checkpoint without truncate log“,也就是SQL Server不主动截断log,只有备份log之后,才可以截断log,否则log文件会一直增大,直到撑爆硬盘,因此需要部署一个job定时备份log。Full的好处是可以做point-in-time恢复,最大限度的保证数据不丢失,一般用于critical的业务环境里。缺点就是DBA需要维护log,增加人员成本(其实也就是多了定时备份log这项工作而已)
Bulk-logged 大容量日志恢复
Bulk-logged模式和full模式类似,唯一的不同是针对以下Bulk操作,会产生尽量少的log:
- Bulk load operations (bcp and BULK INSERT).
- SELECT INTO.
- Create/drop/rebuild index
众所周知,通常bulk操作会产生大量的log,对SQL Server的性能有较大影响,bulk-logged模式的作用就在于降低这种性能影响,并防止log文件过分增长,但是它的问题是无法point-in-time恢复到包含bulk-logged record的这段时间。 Bulk-logged模式的最佳实践方案是在做bulk操作之前切换到bulk-logged,在bulk操作结束之后马上切换回full模式
相关扩展
ldf文件是数据库的事务日志,没有ldf就无法恢复数据库。
mdf文件是实际持有数据的文件
sql Server ldf文件过大相关推荐
- 解决SQL SERVER LDF文件过大的问题
我的SQL server数据库仅用作分析用, 不需要考虑数据备份和恢复的问题. 每天都会增长大量的数据, 现在碰到的问题是, ldf 文件增长的非常厉害, 需要压一压. 参考文章: http:// ...
- 由于SQL Server日志文件过大导致C盘满了的解决方案
参考链接:链接 由于数据库安装后,数据文件和日志文件一般都存放在C盘,所以时间久了,C盘很容易满,这时可以用上述链接里的第二种方法来给C盘释放空间,该方法可以反复使用. 刚才查了下数据库里的一个表,1 ...
- sql服务器 文件太大,sqlserver2008 解决 ldf文件过大的步骤
sqlserver2008 解决 ldf文件过大的方法 SQL2008清空删除日志: '在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. -------------- ...
- 人人都是 DBA(V)SQL Server 数据库文件
SQL Server 数据库安装后会包含 4 个默认系统数据库:master, model, msdb, tempdb. SELECT [name],database_id,suser_sname(o ...
- mysql ldf文件太大_Linux_数据库清除日志文件(LDF文件过大),清除日志: 复制代码 代码如 - phpStudy...
数据库清除日志文件(LDF文件过大) 清除日志: 复制代码 代码如下: DECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT ...
- ldf文件怎么储存到mysql中_sqlserver数据库的ldf文件太大,我们如何压缩ldf日志文件...
使用sqlserver数据库的数据有两个文件,分别是mdf和ldf. mdf是数据文件,另外一个ldf为日志文件.随着网站的运行,你会发现ldf这个文件会越来越大,我们如何压缩ldf日志文件. 网上有 ...
- 快速附加没有日志文件的 SQL Server 数据库文件!
快速附加没有日志文件的 SQL Server 数据库文件: 1 CREATE DATABASE [数据库名称] 2 ON (FILENAME = '数据库文件路径和文件名(如:D:\db\mydb.m ...
- SQL Server实例的十大安全注意事项
SQL Server is one of the world's leading data platforms. It is being broadly used hosting millions o ...
- sql server数据库文件的迁移(mdfldf文件)
sql server数据库文件的迁移(mdf&ldf文件) mssql server数据库文件修改, --查看当前的存放位置 select database_id,name,physical_ ...
最新文章
- 远程安装oracle 10.2.1 for redhat 5.0 2.6.18-53.el5xen
- 目标10亿部?苹果AR眼镜有望明年登场!传搭载Mac级处理器、4K显示屏
- mybatis一级缓存导致sql查询出现问题
- python网络编程—TCP协议(一)
- C/C++ 指针详解
- 【课后习题】数值计算方法期末复习
- Spark内核解析2
- 精品素材 – 24款扁平风格 PSD 格式图标免费下载
- 软件天才都是训练出来的
- 如何通过玩TensorFlow Playground来理解神经网络
- 十八、备忘录模式——SL大法,读档的实现
- Python代码画喜羊羊怎么画_Python画图的这几种方法,你学会了吗
- man 1;man2 ;man 3区别
- Duang!Duang!Duang!直击痛点的一款 HTTP 客户端框架(Java),墙裂推荐!
- sim7600ce 拨号上网测试_SIM7600CE应用程序调试流程
- 大数据平台架构实战(二)IntelliJ IDEA搭建hadoop
- 动力节点『lol版』Java学习路线图(五)Java框架阶段
- 三星 android 4.4 kitkat 刷机包,三星 Galaxy S III LTE(i9305) 刷机包 CM11 KitKat 安卓Android4.4 非官方版...
- Visio调整图形的间距
- 韦东山嵌入式第一期学习笔记DAY_4——8_3编写第1个程序点亮LED