在某些表上禁用日志记录


9

我正在使用SQL Server2005。我有两个包含聚合信息的表。信息不断更新,每天生成近5GB的日志数据。(这比整个数据库要大!)我想禁用对这些表的日志记录,因为回滚并不是必须的。但是,我想继续登录数据库中的其他表。

是否可以禁用数据库中某些表的日志记录?如果不是,是否可以将两个表放在相同的架构中,然后禁用该架构的日志记录?将两个表移到一个单独的数据库并在那里禁用日志记录的唯一选择是吗?

更新: 我想我会解释为什么我真的不需要在这些表上记录活动。

这两个表充满了GPS数据,因此它们变得很大。第一个表格是从该字段的六个Android表格中捕获原始位置。每个平板电脑的新数据每5-10秒就会出现一次。然后将该信息汇总为locationA,locationB,travelTime。目标是根据实际驾驶数据最终使所有位置之间的行驶时间最短。该数据仅适用于一个小城市,并且只能精确到小数点后四位,因此是可管理的。但是,随着新的原始数据的到来,需要更新的行进时间变慢,并且需要插入新的行进时间。

原始数据汇总后,将被清除。我们不会退缩到更长的旅行时间,所以这就是为什么在这些表中回滚没有太大关系。


Answers:


8
  • 是否可以禁用数据库中某些表的日志记录?
  • 我可以将两个表放在相同的架构中,然后禁用该架构的登录吗?
  • 将两个表移到一个单独的数据库并在那里禁用日志记录的唯一选择是吗?

无法禁用用户操作的日志记录。

有一类称为操作的最低限度记录的操作,只允许交易被轧背部(而不是还能够滚动前进)。但是,这听起来并不像您的操作符合适用条件,我也不认为这将解决问题。

SQL Server解决方案是将登台表SIMPLE恢复到新的数据库中,并与聚合结果数据库分开(我认为是FULL恢复)。虽然这不会减少日志记录的数量,但可以消除备份数据加载生成的日志的需求。(请参阅此处有关日志记录的博客文章,以及选择数据库恢复模型所涉及的一些因素。)

将表分离到另一个数据库中将提供灵活性,将日志文件放在更快的I / O子系统上,该子系统可能是一小部分本地连接的固态驱动器。

此外,请考虑单独使用SQL Server可能不是解决问题的最佳解决方案。还有其他RDBMS解决方案可以完全禁用某些表的日志记录。可以在另一个系统中暂存和聚合数据,然后将结果合并到现有的SQL Server数据库中,该数据库通过完整的日志记录和备份得到了很好的保护。


@dangowans:不客气。
乔恩·塞格尔

3

不可以,无论架构,表或数据库级别如何,都无法阻止登录SQL Server。

实际上,在使用快照隔离时,会记录所有在SQL Server数据库中执行修改或更改的事务,但与涉及TempDB的版本存储相关的事务除外。(登录事务日志可确保可以回滚事务(对于某些操作,您可以通过将恢复模型更改为BULK Logged来减少日志记录(称为最小日志记录操作)---您可以在此处的 SQL Server联机丛书中了解有关此操作的更多信息


0

答案一如既往地取决于。
当你说:

我有两个包含汇总信息的表。信息不断更新

那是什么聚合?
尝试改用VIEW,无需更新,也无需记录。

如果不是这样,请尝试使用较短的事务,并在它们之间备份日志。

使用不同的数据库意味着安全管理开销等,并且将拥有它自己的事务日志(即使使用SIMPLE恢复模型写入日志,SQL Server也会自动自动截断日志,但不会释放磁盘空间),因此我不建议使用该选项。


我用正在发生的聚合类型更新了问题。
dangowans 2012年

@dangowans我正在考虑大容量日志记录的恢复模型,您的DRP是否需要执行及时还原的功能?您是否使用复制?尝试阅读有关最少日志记录操作
Roi Gavish 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.