SQL Server 压缩日志及数据库文件大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server 压缩日志及数据库文件大小相关的知识,希望对你有一定的参考价值。

参考技术A

  请按步骤进行 未进行前面的步骤时 请不要做后面的步骤 以免损坏你的数据库

  一般不建议做第 两步 第 步不安全 有可能损坏数据库或丢失数据 第 步如果日志达到上限 则以后的数据库处理会失败 在清理日志后才能恢复

   清空日志

  DUMP TRANSACTION 库名 WITH NO_LOG

   截断事务日志

  BACKUP LOG 数据库名 WITH NO_LOG

   收缩数据库文件(如果不压缩 数据库的文件不会减小

  企业管理器 右键你要压缩的数据库 所有任务 收缩数据库 收缩文件

   选择日志文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了

   选择数据文件 在收缩方式里选择收缩至XXM 这里会给出一个允许收缩到的最小M数 直接输入这个数 确定就可以了

  也可以用SQL语句来完成

   收缩数据库

  DBCC SHRINKDATABASE(客户资料)

   收缩指定数据文件 是文件号 可以通过这个语句查询到:

  select * from sysfiles

  DBCC SHRINKFILE( )

   为了最大化的缩小日志文件(如果是sql 这步只能在查询分析器中进行)

  a 分离数据库:

  企业管理器 服务器 数据库 右键 分离数据库

  b 在我的电脑中删除LOG文件

  c 附加数据库:

  企业管理器 服务器 数据库 右键 附加数据库

  此法将生成新的LOG 大小只有 多K

  或用代码

  下面的示例分离 pubs 然后将 pubs 中的一个文件附加到当前服务器

  a 分离

  EXEC sp_detach_db @dbname = pubs

  b 删除日志文件

  c 再附加

  EXEC sp_attach_single_file_db @dbname = pubs

  @physname = c:/Program Files/Microsoft

  SQL Server/MSSQL/Data/pubs mdf

   为了以后能自动收缩 做如下设置

  企业管理器 服务器 右键数据库 属性 选项 选择 自动收缩

   SQL语句设置方式:

  EXEC sp_dboption 数据库名

   autoshrink TRUE

   如果想以后不让它日志增长得太大

  企业管理器 服务器 右键数据库 属性 事务日志

   将文件增长限制为xM(x是你允许的最大数据文件大小)

   SQL语句的设置方式:

lishixinzhi/Article/program/SQLServer/201311/22266

SQL Server 2008 日志文件很大并且增长很快

【中文标题】SQL Server 2008 日志文件很大并且增长很快【英文标题】:SQL Server 2008 log file size is large and growing quickly 【发布时间】:2011-03-17 03:38:45 【问题描述】:

大多数时候用户会访问数据库来阅读新闻。在事务下执行的查询数量很少。 95% 的数据库命中将用于只读目的。

我的数据库日志文件大小每天增长 1 GB。即使我缩小数据库,日志文件的大小也不会减少。越来越多的日志文件大小可能是什么原因?我该如何控制这个?根据我的知识,当我们从表中读取数据时,日志文件不会增加。

关于如何处理日志文件增长的任何建议?如何将其保持在可管理或合理的大小?这会以任何方式影响性能吗?

【问题讨论】:

您的恢复模式是什么?您是否在进行完整备份? 看似反复出现的问题...***.com/questions/3140259/log-file-size-is-huge***.com/questions/453858/… 【参考方案1】:

日志文件大的主要原因是数据库中的批量事务。要减小日志文件大小,最好的选择是在一定时间间隔后进行事务日志备份。

【讨论】:

【参考方案2】:

完整备份无济于事,您必须定期备份事务日志(以及常规数据库完整备份和差异备份)才能清空它。如果您没有备份日志并且您不是处于简单恢复模式,那么您的事务日志中包含自数据库设置以来的所有事务。如果您有足够的操作以使您每天增长一个演出,那么您可能还会有大量导入或更新同时影响许多记录。您可能需要处于不单独记录事务的简单恢复模式。但是,如果您有来自导入和用户的混合数据,请不要这样做。在这种情况下,您需要经常备份事务日志,以便能够将大小保持在可管理的时间点上。我们每 15 分钟备份一次事务日志。

阅读 BOL 中的事务日志备份,了解如何解决您现在遇到的问题。然后让您的备份设置并正常运行。在尝试修复之前,您需要彻底阅读并理解这些内容。现在,如果您的服务器出现故障并且您必须恢复数据库,您可能会受到伤害。事务日志备份对于能够从故障中正确恢复至关重要。

【讨论】:

【参考方案3】:

有几件事需要考虑。您执行什么类型的备份,以及您需要什么类型的备份。如果您有这个问题的答案,您可以将恢复模式切换为简单模式或保持完整模式,但您需要每天进行增量备份(或任何让您对日志大小感到满意的方式)。

将您的数据库日志设置为简单(但前提是您对数据库进行完整备份!)。

    右键单击您的数据库 选择属性 选择选项 将恢复模式设置为简单

如果您的备份计划是每天完全备份,这将是最好的。因为在这种情况下,您的日志不会被修剪,并且会飙升(就像您的情况一样)。

如果您将使用 Grandfather&Father&Son 备份技术,这意味着 每月完整备份每周完整备份,然后是每 天增量备份。然后,您需要 完全恢复模式。如果每天 1GB 的日志仍然太多,您可以启用每小时或每 15 分钟的增量备份。这应该可以解决日志越来越多的问题。

如果您每天都运行完整备份,则可以将其切换到简单恢复模式,并且您应该没问题而不会给您的数据带来风险(如果您离开时可能会丢失 1 天的数据)。如果您打算使用增量,请将其保留在 Recovery Mode Full

【讨论】:

【参考方案4】:

您是否经常备份数据库?您需要执行完整和/或事务日志备份,以便 SQL Server 考虑缩小您的日志文件。

【讨论】:

以上是关于SQL Server 压缩日志及数据库文件大小的主要内容,如果未能解决你的问题,请参考以下文章

如何清除SQLserver 日志

Sql Server 压缩数据库日志文件的方法解析

SQL Server 日志文件快速增长

sqlserver 数据库如何阻止日志快速增长?

sql server 数据库怎样压缩数据库日志文件

sql server数据库日志怎么清理