sql2014数据库无法压缩日志,急求大神解救

snaif_lx 2016-07-14 09:13:44
事件背景:
集群3台服务器做了alwaysOn,结果日志增长特别快,一个月不到已经块到4个T了,磁盘已经无法支撑
所以我删掉了另外两个可用性副本,同时在SqlServer服务里禁用了alwaysOn

由于磁盘空间已满,我需要压缩日志恢复数据库的正常使用,现在执行
DBCC SHRINKFILE (HealthOne_log,1000),执行完日志还是这么大,没有变化
然后尝试先执行
ALTER DATABASE HealthOne_cs SET RECOVERY SIMPLE WITH NO_WAIT -----简单模式
结果报错:
无法对数据库“HealthOne”执行该操作,因为该数据库参与了数据库镜像会话或可用性组。某些操作不允许对正在参与数据库镜像会话或可用性组的数据库执行。

数据库文件130G左右,现在日志文件3.6T

请问各位大神现在如何压缩日志,恢复单机运行,感谢感谢
...全文
1602 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzly0812 2017-09-22
  • 打赏
  • 举报
回复
应该是数据库表中的聚集索引分区满了,通过收缩就没有用。怎么解决还正在跟进,有没有类似的问题啊
lzly0812 2017-09-22
  • 打赏
  • 举报
回复
我也遇到这个问题了,我在收缩后,看ldf文件,还是那么大,没有变化,你们有遇到过类似的问题么
唐诗三百首 2016-07-14
  • 打赏
  • 举报
回复
try this,

use master

alter database HealthOne_cs set PARTNER OFF

alter database HealthOne_cs set recovery simple with rollback immediate


use HealthOne_cs

DBCC SHRINKFILE (N'HealthOne_log',0,TRUNCATEONLY)

DBCC SHRINKFILE (N'HealthOne_log' , 1)

DBCC SHRINKFILE (N'HealthOne_log' , EMPTYFILE)

snaif_lx 2016-07-14
  • 打赏
  • 举报
回复
引用 2 楼 misterliwei 的回复:
没有备份日志吗? 执行一下:

select name, database_id, log_reuse_wait, log_reuse_wait_desc from sys.databases 
where name = 'healthone'
看看什么情况?
请问这个AVAILABILITY_REPLICA是什么意思啊?
snaif_lx 2016-07-14
  • 打赏
  • 举报
回复
name database_id log_reuse_wait log_reuse_wait_desc HealthOne 5 9 AVAILABILITY_REPLICA
misterliwei 2016-07-14
  • 打赏
  • 举报
回复
没有备份日志吗? 执行一下:

select name, database_id, log_reuse_wait, log_reuse_wait_desc from sys.databases 
where name = 'healthone'
看看什么情况?
薛定谔的DBA 2016-07-14
  • 打赏
  • 举报
回复
snaif_lx 2016-07-14
  • 打赏
  • 举报
回复
use [dbName] declare @bakfile nvarchar(100)--@bakfile备份文件名 set @bakfile='d:\database_bak\log_bak_'+convert(nvarchar(8),getdate(),112)+'.log' BACKUP LOG [dbName] TO DISK= @bakfile WITH RETAINDAYS= 1,COMPRESSION --dbName为数据库名 dbcc shrinkfile(dbName_log,100) --dbName_log为数据库文件逻辑名称,100为希望日志收缩到的MB数 go 通过上述命令解决了,再次感谢各位大牛
唐诗三百首 2016-07-14
  • 打赏
  • 举报
回复
请参考5楼代码, 先执行 alter database HealthOne_cs set PARTNER OFF 然后再执行 alter database HealthOne_cs set recovery simple with rollback immediate
snaif_lx 2016-07-14
  • 打赏
  • 举报
回复
引用 6 楼 jycjyc 的回复:
试试楼上的吧。如果不行,就把alwayson先拆了,恢复简单模式,再清掉日志。
ALTER DATABASE HealthOne_cs SET RECOVERY SIMPLE WITH NO_WAIT -----简单模式 GO 无法对数据库“HealthOne”执行该操作,因为该数据库参与了数据库镜像会话或可用性组。某些操作不允许对正在参与数据库镜像会话或可用性组的数据库执行。 但是我alwaysOn服务关了,副本也删了,还是这样提示
  • 打赏
  • 举报
回复
http://www.knowsky.com/580629.html 这两个命令连续执行,间隔时间越少越明显(可多次运行),直到达到效果 --截断 BACKUP LOG HealthOne_log TO DISK='NUL' --收缩 DBCC SHRINKFILE('HealthOne_log') Alwayson如何截断日志 http://blog.csdn.net/yenange/article/details/49756705
  • 打赏
  • 举报
回复
试试楼上的吧。如果不行,就把alwayson先拆了,恢复简单模式,再清掉日志。

22,297

社区成员

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

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