none
请问Sql Server 2008 日志文件如何删除? RRS feed

  • 问题

  • 现有一Sql server 2008数据库。日志文件有两个,其中:
    主日志文件>130G (已限制增长)
    新建了一个日志文件>10G (自动增长)

    当前我想做的是,清空所有日志。请问如何操作。

    我已经尝试的方法包括:
    1.直接删除日志文件。(删除主日志文件会提示不允许主日志文件;删除新建的日志文件提示文件不为空,不允许删除)
    2.backup log  [db] with no_log。(sql server 2008提示不支持)
    3.分离->删除日志文件->附加。提示无法重建日志文件。因为日志文件数量不止一个

    急!

    2010年3月11日 9:56

答案

  • It's discontinued in sql2k8. Switch to simple recovery model to truncate log, switch back and do full backup.

    2010年3月12日 3:01
  • DBCC SHRINKFILE 
    (
        { file_name | file_id } 
        { [ , EMPTYFILE ] 
        | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
        }
    )
    [ WITH NO_INFOMSGS ]

    EMPTYFILE

    将指定文件中的所有数据迁移到同一文件组中的其他文件。由于数据库引擎不再允许将数据放在空文件内,因此可以使用 ALTER DATABASE 语句来删除该文件。

    2010年3月12日 4:27
  • 对于无法清除日志的情况, 你可以查询一下sys.database以了解原因:
    SELECT log_reuse_wait FROM sys.databases WHERE name = N'你的库名'
    2010年3月12日 4:29
  • Hi, Rmiao 是对的,在2008里面,
    你可以用下面的来truncate. 
     ALTER DATABASE "DBName" SET RECOVERY SIMPLE 
    ALTER DATABASE "DBName" SET RECOVERY FULL 
     如果你需要删除日志文件,可以参照以下: 
    ---- 
    删除数据库中的数据或日志文件 
     1.在对象资源管理器中,连接到 SQL Server 数据库引擎实例,再展开该实例。 
     2.展开“数据库”,右键单击要从其中删除文件的数据库,再单击“属性”。 
     3.选择“文件”页。
     4.在“数据库文件”网格中,选择要删除的文件,再单击“删除”。
     5.单击“确定”。
    2010年3月12日 10:40

全部回复

  • Hi, 如果你不需要保持trans log chain(用trans log 恢复或者log shipping)的话,你可以用 BACKUP LOG "DBNAME" WITH TRUNCATE_ONLY 这个可以一次性解决你的问题。 之后你需要定期back up trans log. 否则还会增长。或者如果不许要的话,把恢复模式设成simple.
    2010年3月11日 10:08
  • 我尝试执行如下语句:
     BACKUP LOG ar_enitorsh WITH TRUNCATE_ONLY
    提示:
    Msg 155, Level 15, State 1, Line 1
    'TRUNCATE_ONLY' is not a recognized BACKUP option.

    无法执行。请问如何解决?
    2010年3月12日 1:42
  • It's discontinued in sql2k8. Switch to simple recovery model to truncate log, switch back and do full backup.

    2010年3月12日 3:01
  • DBCC SHRINKFILE 
    (
        { file_name | file_id } 
        { [ , EMPTYFILE ] 
        | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
        }
    )
    [ WITH NO_INFOMSGS ]

    EMPTYFILE

    将指定文件中的所有数据迁移到同一文件组中的其他文件。由于数据库引擎不再允许将数据放在空文件内,因此可以使用 ALTER DATABASE 语句来删除该文件。

    2010年3月12日 4:27
  • 对于无法清除日志的情况, 你可以查询一下sys.database以了解原因:
    SELECT log_reuse_wait FROM sys.databases WHERE name = N'你的库名'
    2010年3月12日 4:29
  • 执行:
    DBCC SHRINKFILE (LOG_eNitorsh1,emptyfile)

    结果:
    DbId,FileId,CurrentSize,MinimumSize,UsedPages,EstimatedPages
    13,3,32,32,32,32

    日志文件仍无法清空。无法清空就无法移除。


    执行:
    SELECT log_reuse_wait FROM sys.databases WHERE name = N'ar_enitorsh'
    结果:
    log_reuse_wait
    0

    有两个日志文件,但日志文件的文件组都是不可编辑的。所以,应该无法移动到一个日志文件中。
    如何解决?急!
    2010年3月12日 7:35
  • Hi, Rmiao 是对的,在2008里面,
    你可以用下面的来truncate. 
     ALTER DATABASE "DBName" SET RECOVERY SIMPLE 
    ALTER DATABASE "DBName" SET RECOVERY FULL 
     如果你需要删除日志文件,可以参照以下: 
    ---- 
    删除数据库中的数据或日志文件 
     1.在对象资源管理器中,连接到 SQL Server 数据库引擎实例,再展开该实例。 
     2.展开“数据库”,右键单击要从其中删除文件的数据库,再单击“属性”。 
     3.选择“文件”页。
     4.在“数据库文件”网格中,选择要删除的文件,再单击“删除”。
     5.单击“确定”。
    2010年3月12日 10:40