蓝枫的个人空间

暂无签名

  • 博客访问: 179372
  • 博文数量: 87
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 17:48
个人简介

暂无介绍

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(87)

文章存档

2011年(1)

2010年(58)

2009年(17)

2008年(11)

我的朋友
微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
有关事务日志截断和收缩 2010-04-02 10:44:16

分类: Linux

概述

在实际环境中,我们经常会遇到事务日志满,无法进行操作,这样我们需要手动进行对日志文件的截断和收缩。由于长时间运行的事务或暂停的数据库镜像会话都

可导致事务日志填满,这个时候日志中的事务仍处理活动状态,经常有人在右击数据库-->task-->shrink-->files,选择数据库文件或日期志文件都不产生效果。如果数据库使用的是简单恢复模式,事务日志将被自动截断。

 

首先,我们可以通过目录视图sys.databaseslog_reuse_waitlog_reuse_wait_desc列可显示事务日志的活动情况:

 

SELECT name,log_reuse_wait,log_reuse_wait_desc FROM sys.databases

 

log_reuse_wait_descACTIVE_TRANSACTION时,表示事务日志处于活动状态,这时通过普通的收缩日期志文件不会有效。

 

 

日志截断

日志截断可释放日志文件中的空间,以供事务日志重新使用。由于日志的活动部分不能通过收缩来截断或删除,因此,当日志记录长时间保持活动状态时,截断将被延迟。

 

日志截断(在简单恢复模式下自动执行)对于防止日志变满至关重要。截断过程通过将不包含任何逻辑日志部分的虚拟日志文件标记为不活动来减小逻辑日志文件的大小。

 

日志截断并不减小物理日志文件的大小。 减小日志文件的物理大小需要收缩文件。

 

在清除事务日志,SQLSERVER 2000SQLSERVER 2005基本上可以用一样的命令,但是在SQLSERVER 2005有些新的变化。

 

SQLSERVER 2000

DUMP TRANSACTION { database_name | @database_name_var }

  WITH { NO_LOG | TRUNCATE_ONLY }

[;]

 

 

SQLSERVER 2005则可以用BACKUP命令完成

Backing Up the Transaction Log (full and bulk-logged recovery models)

BACKUP LOG { database_name | @database_name_var }

  TO [ ,...n ]

  [ ] [ next-mirror-to ]

  [ WITH { | } [ ,...n ] ]

[;]

 

Truncating the Transaction Log (breaks the log chain)

BACKUP LOG { database_name | @database_name_var }

  WITH { NO_LOG | TRUNCATE_ONLY }

[;]

 

注:SQL SERVER 2008 已取消BACKUP TRANSACTIONBACKUP LOG { WITH NO_LOG | TRUNCATE_ONLY } 功能

SQL SERVER 2008中,如果数据库使用的是简单恢复模式,事务日志将被自动截断。如果必须从数据库删除日志备份链,请切换到简单恢复模式。

 

收缩日志文件

DBCC SHRINKFILE (N'filename_log' , 0, TRUNCATEONLY);

 

例:

在日志的活动部分不能通过收缩来截断或删除时,将通过截断后再收缩(SQL SERVER 2005)

1. BACKUP LOG database_name WITH TRUNCATE_ONLY

 

2.  DBCC SHRINKFILE (N'filename_log' , 0, TRUNCATEONLY);

 

即可完成!

 

在完成事务日志截断和收缩后,之后的差异备份和日期志备份将无效,所以要求做一次完全备份!
阅读(1925) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册