SQL 2008 R2数据库变为REPLICATION
数据库版本:SQL 2008R2 --脚本执行截断事物日志.截断不了.
运行以下语句,查看日志不能截断的原因。
SELECT log_reuse_wait , log_reuse_wait_desc FROM sys.databases WHERE name='db01'
下表对这些列的值进行了说明。
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)
如果对应数据库的Log Space Used(%)的值较小,那么就可以收缩事务日志。
执行类似下面的收缩事务日志文件语句。
USE ufdata_011_2012
GO
DBCC SHRINKFILE(Ufmodel_LOG)