代码之家  ›  专栏  ›  技术社区  ›  Ed Haber

如何缩小MS SQL 2000数据库上的事务日志?

  •  5
  • Ed Haber  · 技术社区  · 16 年前

    我有几个数据库,其中事务日志(.ldf)比数据库文件(.mdf)大很多倍。

    我该怎么做才能自动收缩这些或防止它们变大呢?

    9 回复  |  直到 12 年前
        1
  •  6
  •   Community CDub    8 年前

    那应该能完成任务

    use master
    go
    dump transaction <YourDBName> with no_log
    go
    use <YourDBName>
    go
    DBCC SHRINKFILE (<YourDBNameLogFileName>, 100) -- where 100 is the size you may want to shrink it to in MB, change it to your needs
    go
    -- then you can call to check that all went fine
    dbcc checkdb(<YourDBName>)
    

    一句警告的话

    您只能在不需要适当备份策略的测试/开发数据库上使用它,因为转储日志会导致丢失事务历史记录。在实时系统中,您应该使用由 Cade Roux

        2
  •  4
  •   Cade Roux    16 年前

    备份事务日志并收缩它。

    如果定期备份数据库并在检查点截断,那么它不应该失控,但是,如果您在这些间隔之间执行大量(大小)事务,那么它将一直增长到下一个检查点。

        3
  •  3
  •   Dana    16 年前

    右键单击Enterprise Manager中的数据库>所有任务>收缩数据库。

        4
  •  2
  •   Forgotten Semicolon adrianm    16 年前
        5
  •  1
  •   ChimneyImp Mladen    12 年前

    这里没有人说过,所以我会:永远不要缩小事务日志。从SQL Server的角度来看,这是一个坏主意。

    通过每天进行数据库备份和每小时(或更少)的事务日志备份,保持事务日志较小。事务日志备份间隔取决于数据库有多忙。

        6
  •  0
  •   Fry    16 年前

    您可以尝试的另一件事是将数据库的恢复模式设置为“简单”(如果尚未设置),这将阻止日志文件快速增长。我们最近遇到了这样的问题:我们的交易日志被填满,我们不再被允许进行交易。

    收缩文件的组合是在多个答案和简单的恢复模式,确保我们的日志文件保持合理的大小。

        7
  •  0
  •   jdecuyper    16 年前

    使用查询分析器:

    USE yourdabatase
    SELECT * FROM sysfiles
    

    你应该找到类似的东西:

    FileID    …  
    1             1             24264    -1            1280      1048578               0             yourdabatase_Data    D:\MSSQL_Services\Data\yourdabatase_Data.MDF
    2             0             128         -1            1280      66           0                             yourdabatase_Log      D:\MSSQL_Services\Data\yourdabatase_Log.LDF
    

    检查日志文件的文件ID(大多数情况下是2个)。 执行2到3次checkpoint命令,将每个页面写入硬盘。

    Checkpoint
    GO
    Checkpoint
    GO
    

    执行以下事务性命令,将日志文件中继到1 MB

    DUMP TRAN yourdabatase WITH no_log 
    DBCC SHRINKFILE(2,1)  /*(FileID , the new size = 1 Mb)*/
    
        8
  •  0
  •   spinner_den_g    16 年前

    这是我一直使用的

    BACKUP LOG <CatalogName> with TRUNCATE_ONLY
    DBCC SHRINKDATABASE (<CatalogName>, 1)
    use <CatalogName>
    go
    DBCC SHRINKFILE(<CatalogName_logName>,1)
    
        9
  •  -1
  •   schudel    16 年前

    尝试sp_force_shrink_日志,您可以在这里找到它 http://www.rectanglered.com/sqlserver.php