SQL 2008 R2数据库变为REPLICATION,日志不断增长而且不能截断和收缩的解决方案



运行环境:windows server2003,sql
server2008 R2,数据库上布置CDC

用户反应系统报错是日志已满,系统不能运行。查看日志文件时,发现日志文件已经达到15G,后来为了解决问题,干脆把数据库移到另一个F盘,D盘专门放日志文件,空间有80G。当时想这80G至少保证系统运行一周吧!谁知道系统刚运行两天,日志文件已爆涨到80G,D盘空间仅剩余10MB,数据库做任何动作都不可以。又一次为了应急把日志文件直接删除(先停掉服务,删除日所文件,再通过DBCC
CheckDB()命令检查数据库一致性问题),系统恢复了正常。

这时空间是有了,但是问题依旧没有解决,但是日志文件依然猛涨,以前用的截断和收缩日志方法完全不起作用?

解决方法:

步骤一:

查看日志信息,在查询分析器中执行如下代码来查看日志信息:

DBCC LOGINFO(‘数据库名称‘)

可以看到status=0的日志,代表已经备份到磁盘的日志文件;而status=2的日志还没有备份。当收缩日志文件时,收缩掉的空间其实就是 status=0的空间,如果日志物理文件无法减小,这里一定能看到非常多status=2的记录。

步骤二:

查看日志不能截断原因

活跃(active)的日志无法通过收缩来截断,有各种原因会使日志截断延迟,具体表现就是事务日志的物理文件无法通过截断、收缩来减小,通过下面的代码可以看到实例上每个数据库的日志截断延迟原因:

usemaster

go

select*
from sys.databases

发现当前数据库的log_reuse_wait_desc的值为REPLICATION,其他数据库的log_reuse_wait_desc值为LOG_BACKUP、NOTHING…

log_reuse_wait_desc值的各种原因及解释如下:

NOTHING

当前有一个或多个可重复使用的虚拟日志文件。

CHECKPOINT

自上次日志截断之后,尚未出现检查点,或者日志头部尚未跨一个虚拟日志文件移动(所有恢复模式)。这是日志截断延迟的常见原因。

LOG_BACKUP

需要日志备份,以将日志的头部前移(仅适用于完整恢复模式或大容量日志恢复模式)。

注意:日志备份不会妨碍截断。

完成日志备份后,日志的头部将前移,一些日志空间可能变为可重复使用。

ACTIVE_BACKUP_OR_RESTORE

数据备份或还原正在进行(所有恢复模式)。

数据备份与活动事务的运行方式相同。数据备份在运行时,将阻止截断。

ACTIVE_TRANSACTION

事务处于活动状态(所有恢复模式)。一个长时间运行的事务可能存在于日志备份的开头。在这种情况下,可能需要进行另一个日志备份才能释放空间。

事务被延迟(仅适用于 SQL Server 2005 Enterprise Edition及更高版本)。“延迟的事务” 是有效的活动事务,因为某些资源不可用,其回滚受阻。

DATABASE_MIRRORING

数据库镜像暂停,或者在高性能模式下,镜像数据库明显滞后于主体数据库(仅限于完整恢复模式)。

REPLICATION

在事务复制过程中,与发布相关的事务仍未传递到分发数据库(仅限于完整恢复模式)。

DATABASE_SNAPSHOT_CREATION

正在创建数据库快照(所有恢复模式)。

这是日志截断延迟的常见原因,通常也是主要原因。

LOG_SCAN

正在进行日志扫描(所有恢复模式)。

这是日志截断延迟的常见原因,通常也是主要原因。

针对延迟日志截断原因的部分解决方案,

LOG_BACKUP

备份日志后再执行收缩即可。

REPLICATION

这是我遇到的情况,但我根本没有启用过REPLICATION,是已离职同事原来创建一个复制数据库,后来没有删除干净而导致。还有另一说法,这好像是SQLSERVER2008的一个BUG,解决方法是给标有“REPLICATION”的数据库任意一个表创建数据库事务复制(TRANSACTIONREPLICATION),然后再删除,执行数据库与日志备份后,就可以收缩了。

注明:在创建数据库复制时,我也遇到了一个大麻烦,提示:在执行 xp_cmdshell 的过程中出错。调用 ‘CreateProcess‘ 失败,错误代码: ‘5‘。使用了各种方法,均无效果。后来在网上找一个帖子说有可能是系统安装360的原因而导致,我就把把360先停掉,结果真的解决问题了。

时间: 2024-10-29 03:35:32

SQL 2008 R2数据库变为REPLICATION,日志不断增长而且不能截断和收缩的解决方案的相关文章

SQL 2008 R2 数据库镜像操作

镜像操作请参考:http://blog.csdn.net/dba_huangzj/article/details/35995083 应用程序数据库连接字符串(带见证服务器即自动故障转移): DBHelper DBHelparKQ = new DBHelper("Data Source=主体;Failover Partner=镜像;Initial Catalog=数据库;User ID=帐号;Password=密码"); _conn.ConnectionString ="Dat

sql 2008 R2添加对MySql的远程服务器链接

(1).我的sql 2008 R2所在的系统为Windows server 2008 *64 (2).MySQL所在的系统为Windows server 2003 *86 我想要实现的是在sql 2008 R2数据库直接访问MySQL数据库的数据. 1.安装MySQL ODBC connector5.3.4 http://dev.mysql.com/downloads/connector/odbc/ 2. 安装MySQL ODBC connector5.3.4驱动提示如下问题: Error 19

SQL Server 2008 R2数据库镜像部署图文教程

数据库镜像是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中 概述 “数据库镜像”是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当“主体服务器”角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即“镜像服务器角色”,这两

Sql Server 2008 R2数据库损坏修复成功

Sql Server 2008 R2数据库损坏修复成功案例 2016.4月 青岛某连锁店使用的SQL 2008R2数据库,客户在正常使用中突然服务器断电导致的损坏,再次附加发现数据库报错不能正常运行,客户那边管理员自己尝试了修复以及重建日志但是故障依旧,后来发现自己解决不了,通过百度搜索,联系到我们进行处理. 我们的工程师具体查看了一下,数据库大小600M左右,底层数据看了一下基本正常,先用工具检测看下页面损坏情况,如下图: 我们可以看到确实是有页面损坏,直接新建库替换重新生成日志在看损坏情况如

Sql Server 2008 R2数据库损坏修复成功案例

Sql Server 2008 R2数据库损坏修复成功案例 2016.4月 青岛某连锁店使用的SQL 2008R2数据库,客户在正常使用中突然服务器断电导致的损坏,再次附加发现数据库报错不能正常运行,客户那边管理员自己尝试了修复以及重建日志但是故障依旧,后来发现自己解决不了,通过百度搜索,联系到我们进行处理. 我们的工程师具体查看了一下,数据库大小800M左右,底层数据看了一下基本正常,先用工具检测看下页面损坏情况,如下图 我们可以看到确实是有页面损坏,直接新建库替换重新生成日志在看损坏情况如下

Sql Server 2008 R2 数据库脚本导出方法

经常忘记怎么搞,截几张图记录一下. 1 选中要导出的数据库,右键->任务->生成脚本 2 3 4 查看保存的脚本 Sql Server 2008 R2 数据库脚本导出方法,布布扣,bubuko.com

如何修改SQL Server 2008 R2数据库的内存

本篇经验将和大家介绍如何修改SQL Server 2008 R2数据库的内存,希望对大家的工作和学习有所帮助! 工具/原料 SQL Sever 2008 R2数据库已安装 方法/步骤 1 打开SQL Sever 2008 R2数据库,如下图所示: 2 在打开的连接到服务器对话框中,输入相关连接信息后,点击“连接”,如下图所示: 3 右键数据库根节点,选择“属性”,如下图所示: 4 弹出服务器属性页,选择页中包含常规.内存.处理器等选项,如下图所示: 5 在选择页中我们点击“内存”,我们可以修改最

SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用

这篇文章主要介绍了SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用,需要的朋友可以参考下 一.配置主备机 1. 服务器基本信息 主机名称为:HOST_A,IP地址为:192.168.1.155 备机名称为:HOST_B,IP地址为:192.168.1.156 二.主备实例互通 实现互通可以使用域或证书来实现,考虑实现的简单,以下选取证书的方式实现.注意:实现"主备数据库实例互通"的操作只需要做一次,例如为了将两个SQL Server 2

SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600

今天将由于需要就将我的SQL 2008升级到SQL 2008 R2. 说到为什么要升级是因为,从另一台机器上备份了一个数据库,到我的机器上还原的时候提示“System.Data.SqlClient.Sqlerror:该数据库是在运行版本10.50.2500的服务器上备份的,该版本与此服务器(运行版本10.00.1600)不兼容.请在支持该备份的服务器上还原数据库,或者使用与此服务器兼容的备份.” 经过一番查证得知: 所谓的10.00.1600其实就是SQL 2008 10.50.1600其实就是