我用如下命令: 
use master
go
alter database [Portal(TISS0113)] set recovery simple with no_wait
go
alter database [Portal(TISS0113)] set recovery simple 
go
use [Portal(TISS0113)]
go
 DBCC SHRINKFILE (N'Portal(kjwx)_Log' , 11, TRUNCATEONLY) 
 go
 
 USE master
go
alter database [Portal(TISS0113)] set recovery full with no_wait
go
alter database [Portal(TISS0113)] set recovery full
go结果报: 无法收缩日志文件 2 ,因为该文件结尾的逻辑日志文件正在使用。(1 行受影响)
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

解决方案 »

  1.   

    backup log [database name] with no_loggoDBCC SHRINkdatabase ('database name', 20, TRUNCATEONLY)  
      

  2.   

    把恢复模式改成简单详细参考:http://social.microsoft.com/Forums/it-IT/sqlserverzhchs/thread/dd8595c4-85c9-45bd-b9ad-c1ce42bb46ea
      

  3.   

    在 alter database dbname set recovery simple 后,执行 checkpoint 截断日志。
      

  4.   

    呵呵,我已经试了很多次,把服务停了重启都还是报同样的错误,
    我用了
    backup log [Portal(TISS0113)] with no_log
    go
    DBCC SHRINkdatabase ('Portal(TISS0113)', 20, TRUNCATEONLY)
    结果报了: 
    消息 3032,级别 16,状态 2,第 1 行
    此语句不支持一个或多个选项(no_log)。请查阅文档以了解所支持的选项。
    DBCC SHRINKDATABASE: 已跳过数据库 ID 7 的文件 ID 1,因为该文件没有足够的可用空间可以回收。
    无法收缩日志文件 2 (uniRMSPortal(kjwx)_Log),因为该文件结尾的逻辑日志文件正在使用。楼上能否解释一下具体如何执行checkpoint ?
      

  5.   

    USE AdventureWorks2008R2;
    GO
    -- Truncate the log by changing the database recovery model to SIMPLE.
    ALTER DATABASE AdventureWorks2008R2
    SET RECOVERY SIMPLE;
    GO
    -- Shrink the truncated log file to 1 MB.
    DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1);
    GO
    -- Reset the database recovery model.
    ALTER DATABASE AdventureWorks2008R2
    SET RECOVERY FULL;
    GO不能用backup log 。no_log 因为这在2008中已经禁用。用如上语句
    直接执行 checkpoint 就可以了
      

  6.   

    DBCC SHRINKFILE (N'Portal(kjwx)_Log' , 11, )  
    语句有问题,TRUNCATEONLY 只适用于数据文件的收缩。你可以先看下文件的空余大小
    use <dbnam>SELECT name 
    ,size/128.0 as size_MB
    ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB
    ,*
    FROM sys.database_files;
    go
    然后在
    dbcc shrinkfile(2)
    go