SQL Server事务备份与日志


12

我继承了一个中等规模的对业务至关重要的SQL Server 2008数据库,并试图将我的头放在备份计划上。(我是开发人员,而不是DBA。)

现在,我们的系统设置方式有两个备份系统:

  1. 每周完整备份(.bak)和每小时事务日志(.trn)备份。我们保留了这些备份的几套,并定期将它们运到异地。
  2. SQL Server日志(.ldf),恢复模式设置为Full。该文件与主.mdf文件位于单独的驱动器上,但不进行备份。

如果进行紧急还原(或将备份还原到开发机),我的程序是使用这些.bak文件,然后应用.trn文件。我们有一个脚本,可使该过程相对简单。

我的问题:

  1. 是否可以从.ldf文件还原数据库?什至是为了什么?
  2. 同时拥有这两个事务日志是否不必要?
  3. 备份.ldf文件重要吗?

Answers:


16

不,不可能从ldf文件恢复数据库。ldf文件将与mdf文件一起还原。

不,这不是多余的,因为它们有两个不同的用途。

进行完整备份和事务日志备份很重要。仅拥有ldf文件的副本并不能帮助您还原数据库。

至于ldf文件的用途,ldf是事务日志。可以将其视为记录数据库更改的循环缓冲区。当您更新一行时,更改将立即写入ldf。在将来的某个时间点(通常少于五分钟),修改后的数据将被写入mdf文件。

如果服务器崩溃或出现电源故障,则在SQL启动时,它将读取ldf并重新应用(REDO)这些更改。

另外,如果您有一个尚未提交的事务并且服务器崩溃,则必须撤消该事务所做的所有更改才能使数据库保持一致。ldf文件也具有该任务。(UNDO)

上面我提到ldf文件是循环的。进行事务日志备份(.trn)复制出一部分ldf文件。安全创建trn文件后,sql可以重用ldf文件的该部分。这一系列的trn备份创建了一个链,该链一起记录了对数据库的每次修改。当然,如果您从未进行过事务日志备份,则ldf文件会越来越大。

在灾难情况下,还原完整备份后,您将获得完整备份完成时的数据库副本。然后,您可以按顺序还原trn文件,并将数据库保持最新状态到任何时间点,包括最新的trn备份。

我掩盖了一些重要的细节,但要点是ldf是一个工作文件,它记录了数据库的最新更改。trn文件是ldf的一部分的副本,其前提是您将保持安全,以便sql可以重用ldf中的空间,如果发生灾难,可以将它们放在其他位置。


2
+1非常好的答案。我唯一要添加的是,当DBA说“数据库”时,它们表示.mdf(数据文件)和.ldf(日志文件)文件的组合。这两个文件共同构成一个单元。在某些数据库上,您甚至可能还会看到多个.mdfs和/或.ndfs(辅助数据文件)。这些文件也被组合在一起,以形成称为数据库的单个单元。如果您丢失了其中任何一个,则您将处于灾难状态,必须采取纠正措施。
肯尼斯·费舍尔

+1很好的答案,即使在MS SQL Server运行时,即使在使用Norton这样的第三方应用程序时,也可以在系统上运行系统时备份“物理文件”(实际的.mdf / .ndf / .ldfs)。安全的“备份”。这些文件非常敏感,因此应始终尽可能创建实际的MS SQL Server备份文件。
Ali Razeghi 2013年

谢谢,这是非常有帮助的。听起来我们的常规SQL Server备份计划已经足够,并且无需直接篡改.mdf或.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.