禁用交易日志


79

Oracle具有可以发出的SQL命令,这样就不会记录事务。SQL Server 2008是否有类似的东西?

我的情况:我们需要在服务器(Dev,QA,Prod)上发送Tx日志,但是也许我们可以在开发人员机器上不使用它们。


1
您是否尝试过将视图用于计算的数据?

抱歉劫持了您的问题,但是如何为特定过程/查询禁用oracle中的事务日志记录?谢谢!
维克多

3
@Kaushik你最好问这个问题,因为这是自己的问题。
Raj More

“,这样就不会记录交易”如果您指的是NOLOGGED选项,那么这不是真的。
a_horse_with_no_name13年

@RajMore您是否了解有关此主题的更多信息?在我们的案例中,我们正在进行批量加载,令人惊讶的是,看到SIMPLE模式将如此多的数据推到磁盘上。现在,我明白了为什么,但是我想知道,如果可以消除事务日志记录,则可能会提高多少性能。
D-Klotz

Answers:


124

在任何情况下,都不能没有SQL Server中的事务日志。引擎根本无法运行。

您可以在开发机器上将恢复模型设置为“简单”,这可以防止未完成tran日志备份时事务日志膨胀。

ALTER DATABASE MyDB SET RECOVERY SIMPLE;

18
只是一个大提示:这个答案在技术上是100%正确的。但这仅仅是您要在DEVELOPER计算机上使用的内容,或者是您不希望能够备份数据时使用的内容。有关更多信息和背景,请参见 sqlservervideos.com/video/logging-essentialssqlservervideos.com/video/shrinking-log-files
迈克尔·坎贝尔

或对于RDS(或等效服务)上的数据库,其中备份策略使用快照而不是事务日志。
bsplosion,

还是数据库是从其他来源(例如事件源)构建的,因此没有事务且不需要日志记录
Anthony Johnston,

45

SQL Server需要事务日志才能运行。

也就是说,事务日志有两种操作模式:

  • 简单
  • 充分

完全模式下,事务日志将保持增长,直到您备份数据库为止。在简单模式下:每个Checkpoint都会“回收”事务日志中的空间。

很少有人需要在完全恢复模型中运行他们的数据库。使用完整模型的唯一要点是,如果您想每天多次备份数据库,并且备份整个数据库会花费太长时间-因此您仅备份事务日志。

事务日志整天保持增长,而您仅对其进行备份。那天晚上,您进行了完整备份,然后SQL Server截断了事务日志,开始重新使用事务日志文件中分配的空间。

如果仅执行完整数据库备份,则不需要完全恢复模式。


这有点不对:您需要备份日志以(希望)停止事务日志的增长。当然,如果您有未结交易或大量交易,则日志将增长,因为内部日志文件分配(VLF)无法重用或需要更多。这是BTW的快速概述,而不是章节和经文
gbn 2012年

1
@gbn您无需备份日志即可阻止日志增长。我的意思是你做的,但是这不是的功能。Microsoft并未创建交易日志来玩游戏“因为您忘记了备份日志,所以消耗了整个硬盘”。的原因日志持续增长(然后需要备份,从停止生长的话),是让你可以备份只是日志。
伊恩·博伊德

44

上面没有提到第三种恢复模式。恢复模式最终决定了LDF文件的大小以及写入它们的方式。如果要进行任何类型的批量插入,则应将数据库设置为“ BULK / LOGGED”。这使得散装刀片可以快速移动,并且可以随时更换。

为此,

USE master ;
ALTER DATABASE model SET RECOVERY BULK_LOGGED ;

改回它:

USE master ;
ALTER DATABASE model SET RECOVERY FULL ;

本着增加关于为什么有人不想要LDF的对话的精神,我添加以下内容:我们进行多维建模。本质上,我们将数据库用作大量的变量存储,可以使用外部程序批量处理这些变量。我们从不要求回滚。如果我们可以通过打开ALL日志记录来提高性能,那么我们将不胜感激。


1
谢谢你 我们以完全相同的方式使用数据库。我们不会在乎是否能够回滚。我们追求的就是纯粹的表现
2012年

对于这种情况,您可能考虑使用其他数据库,例如Mongo(允许禁用日志)或内存(redis和其他数据库)
Tim

2

Tx日志有什么问题?他们长大了吗?然后只需在检查点选项上设置截断即可。

从Microsoft文档:

在SQL Server 2000或SQL Server 2005中,“简单”恢复模型等效于SQL Server早期版本中的“截断登录检查点”。如果每次在服务器上执行检查点时事务日志都会被截断,这将阻止您使用该日志进行数据库恢复。您只能使用完整的数据库备份来还原数据。使用“简单”恢复模型时,将禁用事务日志的备份。


1
好吧,空间问题-有些开发人员的机器比较旧,我们可以不用。更重要的是,我很好奇这是否可能!我的印象是,仅在SQL 2008中使用简单恢复模式设置了“在检查点上登录日志”选项。还有另一种方法吗?
Raj More

1
@Tapori,他们是同一回事。他们在2000
。– zvolkov

0

如果这仅是为了节省空间而仅用于开发机器,则只需使用简单的恢复模式,您就可以做的很好。

在生产计算机上,尽管我强烈建议您将数据库保持在完全恢复模式。这将确保您可以在需要时进行时间点恢复。

另外–使数据库处于完全恢复模式可以通过读取事务日志来帮助您撤消意外更新和删除。请参阅下面或更多详细信息。

如何在SQL Server 2005中回滚UPDATE查询?

读取SQL Server 2008中的日志文件(* .LDF)

如果生产机器上空间不足,则只需创建频繁的事务日志备份即可。

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.