有遇到过mdf文件大小几天不变ldf日志激增的问题吗?

cywyes 2020-09-16 09:25:35
如图:
...全文
237 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cywyes 2020-09-18
  • 打赏
  • 举报
回复
补充说明一下:简单模式,日志截断无效,日志收缩无效。 自己找到原因并解决了,这是SQL Server 2014的一个bug,使用了内存优化表功能就可能会遇到: https://support.microsoft.com/en-us/help/3090141/fix-offline-checkpoint-thread-shuts-down-without-providing-detailed-ex 解决办法: 1、打补丁到 SQL 2014 SP3。 2、重启SQL服务,因为我的数据库有 800G 的事务日志需要恢复,数据库显示 FLCommon(正在恢复),大约要等2小时,才能正常。 3、此时数据库Online恢复服务了,但日志依然没法截断和收缩,执行CheckPoint语句,大约等1小时执行完毕。 4、查询 SELECT log_reuse_wait_desc, * FROM sys.databases WHERE NAME = 'FLCommon',log_reuse_wait_desc还是显示CheckPoint。 5、查询 dbcc loginfo() 发现1000多行的日志status仍是2。 6、继续等10-20分钟,再查4、5,发现log_reuse_wait_desc还是显示Nothing,1000多行的日志status变为0。 7、执行DBCC ShrinkFile('FLCommon_Log', 512) 成功收缩日志至512MB。 希望对使用了内存优化表并遇到这种诡异案例的同学有所帮助,谢谢大家。
appo_li 2020-09-17
  • 打赏
  • 举报
回复
引用 2 楼 中国风 的回复:
日志过大,非业务库不需要记录日志时,可用简单模式 收缩
USE [Test]
GO
DBCC SHRINKFILE (N'日志文件逻辑名' , 0)
GO
更改数据库为简单模式
USE [master]
GO
ALTER DATABASE [DBName] SET RECOVERY SIMPLE WITH NO_WAIT
GO
楼上正解
datafansbj 2020-09-17
  • 打赏
  • 举报
回复
从原理上说,ldf 与 mdf 的大小关系不大。一个不大的 mdf,可能会造成较大的 ldf,一个很大的 mdf,可能 ldf 很小。mdf 是存储数据的,数据越多文件越大;ldf 是存储事务日志的,执行的事务越复杂、涉及的记录越多,ldf 越大。一个 update 或 delete 语句就可能造成 ldf 文件大小激增。
  • 打赏
  • 举报
回复
1.设置成简单模式 2.收缩日志文件 3.如果是完整模式,需定时做日志备份后截断才能保证日志不会增长过大。
guozhanxiang1 2020-09-16
  • 打赏
  • 举报
回复
收缩下日志文件
RINK_1 2020-09-16
  • 打赏
  • 举报
回复
你有没有做事务同步
中国风 2020-09-16
  • 打赏
  • 举报
回复
日志过大,非业务库不需要记录日志时,可用简单模式 收缩
USE [Test]
GO
DBCC SHRINKFILE (N'日志文件逻辑名' , 0)
GO
更改数据库为简单模式
USE [master]
GO
ALTER DATABASE [DBName] SET RECOVERY SIMPLE WITH NO_WAIT
GO
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时。 sp_attach_db:将数据库附加到服务器。 语法 sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ] 参数 [@dbname =] 'dbname' 要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。 [@filename1 =] 'filename_n' 数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。 参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。 该列表还必须包括数据库分离后所有被移动的文件。 返回代码值:0(成功)或 1(失败) eg:下面的示例将 pubs 中的两个文件附加到当前服务器。 EXEC sp_attach_db @dbname = N'pubs', @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' EXEC sp_attach_db @dbname = N'Ty20051029101451aaa', @filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf', @filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf' ---解决问题了 //删除数据库 DROP DATABASE 从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。 语法 :DROP DATABASE database_name [ ,...n ] 参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。 eg: exec sp_helpdb database_name exec Drpo DataBase [Ty20051029101451aaa] //分离数据库 可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。 sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf') FOR ATTACH GO //显示当前数据库信息 --select * from Master..sysDatabases //新建---不行啊 CREATE DATABASE TestOA ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat' ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE exec sp_detach_db Km20051030011601 --分离数据库 exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧