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.