SQL 2008 R2数据库变为REPLICATION

数据库版本:SQL 2008R2 --脚本执行截断事物日志.截断不了.

SQL SERVER收缩数据库和收缩文件有什么区别_REPLICATION

运行以下语句,查看日志不能截断的原因。

SELECT log_reuse_wait , log_reuse_wait_desc FROM sys.databases WHERE name='db01'

SQL SERVER收缩数据库和收缩文件有什么区别_日志文件_02

下表对这些列的值进行了说明。

log_reuse_wait 值

log_reuse_wait_desc 值

说明

0

NOTHING

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

1

CHECKPOINT

自上次日志截断之后,尚未生成检查点,或者日志头尚未跨一个虚拟日志文件移动。这是日志截断延迟的常见原因。

2

LOG_BACKUP

在截断事务日志前,需要进行日志备份。(仅限完整恢复模式或大容量日志恢复模式) 

完成下一个日志备份后,一些日志空间可能变为可重复使用。

3

ACTIVE_BACKUP_OR_RESTORE

数据备份或还原正在进行。如果数据备份阻止了日志截断,则取消备份操作可能有助于解决备份直接导致的此问题。

4

ACTIVE_TRANSACTION

事务处于活动状态。请用 DBCC OPENTRAN 检查最旧的活动事务。

5

DATABASE_MIRRORING

数据库镜像暂停,或者在高性能模式下,镜像数据库明显滞后于主体数据库。

6

REPLICATION

在事务复制过程中,与发布相关的事务仍未传递到分发数据库。

7

DATABASE_SNAPSHOT_CREATION

正在创建数据库快照。

8

LOG_SCAN

发生日志扫描。

9

AVAILABILITY_REPLICA

可用性组的辅助副本正将此数据库的事务日志记录应用到相应的辅助数据库。

13

OLDEST_PAGE

如果将数据库配置为使用间接检查点,数据库中最早的页可能比检查点 LSN 早。在这种情况下,最早的页可以延迟日志截断。

 

根据返回的 log_reuse_wait 值和 log_reuse_wait_desc 描述,可以发现日志不能截断的原因。更多的说明,请参考《可能

延迟日志截断的因素》

http://technet.microsoft.com/zh-cn/library/ms345414(v=sql.105).aspx

REPLICATION 错误解决办法

知道了原因就好办了。

起初我想通过sp_droppublication来完全删除分发订阅的配置,但无法通过sp_helppublication获取到@publication的名字(提示:命令已执行完!),因此这条路走不通了。

在网上找些资料,发现了sp_removedbreplication这个存储过程,执行后再去收缩日志文件,问题果然解决!

EXEC sp_removedbreplication ufdata_011_2012

DBCC SHRINKFILE(Ufmodel_LOG)

DBCC loginfo(ufdata_011_2012)

 使用DBCC SQLPERF查看事务日志空间使用情况统计信息:

      DBCC SQLPERF (LOGSPACE)

SQL SERVER收缩数据库和收缩文件有什么区别_数据库_03

  如果对应数据库的Log Space Used(%)的值较小,那么就可以收缩事务日志。

执行类似下面的收缩事务日志文件语句。

USE ufdata_011_2012

GO

DBCC SHRINKFILE(Ufmodel_LOG)