none
sqlserver2005 为什么收缩日志没有效果?还是原先大小 RRS feed

  • 问题

  • 数据库使用时的完整恢复模式。

    从来就没有备份过日志,导致ldf文件有40g左右。

    查看联机手册,发现可以收缩日志文件

    执行下面操作:

    1、完整备份数据库

    2、备份事务日志

    3、收缩日志文件(目标设置为500M),提示成功(执行很快也就5s或者稍多一点)

    但查看日志文件还是40g,为什么没有收缩?也没报错,或者从哪能看到具体错误信息?

    上面的步骤是否正确?是否我看文档理解错误了?

    2013年9月6日 22:23

答案

  • LZ可以看一下这篇文章:

    SQL Server 2008如何压缩日志(log)文件?

    文章提供了7种收缩事务日志的方法,下面几种方法都比较好的

    --方法三
    use DB_NAME
    sp_dboption DB_NAME, "trunc. log on chkpt.", true
    checkpoint
    sp_dboption DB_NAME, "autoshrink", true 
    
    --每一行指令请单独执行。其中的DB_NAME是指Database Name,
    --在执行完语法后的数小时至数十小时,该LOG档会逐渐释放空间,
    --最后大约都会维持在数1024KB左右。
    
    --方法六 先设置恢复模式为“简单恢复”模式,再收缩:
    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE BigData ;
    GO
    ALTER DATABASE BigData
    SET RECOVERY SIMPLE;--设置简单恢复模式
    GO
    DBCC SHRINKFILE (BigData_Log, 1);
    GO
    ALTER DATABASE BigData
    SET RECOVERY FULL;--恢复为原模式
    GO
    
    --方法七
    USE BigData;
    GO
    BACKUP LOG DATABASENAME TO DISK='d:\test.bak'
    -- Shrink the truncated log file to 1 MB.
    DBCC SHRINKFILE (Bigdata_Log, 1);
    GO

    还有使用下面这个SQL语句看一下为什么不能收缩事务日志

    SELECT log_reuse_wait_desc, * FROM sys.databases WHERE NAME='dbname'

    对于log_reuse_wait_desc 列的解释:

    http://dollar.0792.cc/post/log_reuse_wait_desc.html

    2013年9月9日 6:01
  • Any open transaction in the db? If doesn't have any, set db to simple recovery mode then shrink log file. You can set back to full recovery mode after shrinking log and create log backup job to run periodically.
    2013年9月7日 2:44

全部回复

  • Any open transaction in the db? If doesn't have any, set db to simple recovery mode then shrink log file. You can set back to full recovery mode after shrinking log and create log backup job to run periodically.
    2013年9月7日 2:44
  • LZ可以看一下这篇文章:

    SQL Server 2008如何压缩日志(log)文件?

    文章提供了7种收缩事务日志的方法,下面几种方法都比较好的

    --方法三
    use DB_NAME
    sp_dboption DB_NAME, "trunc. log on chkpt.", true
    checkpoint
    sp_dboption DB_NAME, "autoshrink", true 
    
    --每一行指令请单独执行。其中的DB_NAME是指Database Name,
    --在执行完语法后的数小时至数十小时,该LOG档会逐渐释放空间,
    --最后大约都会维持在数1024KB左右。
    
    --方法六 先设置恢复模式为“简单恢复”模式,再收缩:
    Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->USE BigData ;
    GO
    ALTER DATABASE BigData
    SET RECOVERY SIMPLE;--设置简单恢复模式
    GO
    DBCC SHRINKFILE (BigData_Log, 1);
    GO
    ALTER DATABASE BigData
    SET RECOVERY FULL;--恢复为原模式
    GO
    
    --方法七
    USE BigData;
    GO
    BACKUP LOG DATABASENAME TO DISK='d:\test.bak'
    -- Shrink the truncated log file to 1 MB.
    DBCC SHRINKFILE (Bigdata_Log, 1);
    GO

    还有使用下面这个SQL语句看一下为什么不能收缩事务日志

    SELECT log_reuse_wait_desc, * FROM sys.databases WHERE NAME='dbname'

    对于log_reuse_wait_desc 列的解释:

    http://dollar.0792.cc/post/log_reuse_wait_desc.html

    2013年9月9日 6:01
  • 有没有做过日志备份?另外用楼上的办法查询log_reuse_wait_desc 列


    Please Mark As Answer if it is helpful.

    2013年9月9日 6:08
  • 多谢回复!

    看来对联机帮助理解上存在偏差。

    现在基本上是用简单模式切换方式,这样处理起来比较方便。

    2013年10月12日 7:15