我有一个客户端,它有一个非常基本的单服务器设置,其中包括一个小型 SQL Server Express 数据库。
我最近为他们配置了 Symantec Backup Exec 2010 Quickstart 版本。这是免费的、功能有限的 Backup Exec OEM 版本,不包括 SQL Server Agent(或任何应用程序代理)。但是,它通过 Advanced Open File Option (AOFO) 支持 VSS。在这种情况下,我总是配置一个计划任务来转储数据库并备份转储,这样我就可以确保我有一个一致的备份。
然而,在启用 AOFO 的情况下对整个盒子进行初始测试作业后,我注意到它很高兴地备份了 SQL 数据文件,包括 MDF/LDF 文件,并且只是给了我一个非常温和的“建议”,我可能要考虑购买 SQL Server Agent,因为它已经检测到了 SQL Server 数据。这在两个方面让我感到惊讶:
- 据我了解,除非您通过注册表项手动禁用此功能,否则 Backup Exec 会自动使用 Active File Exclusion(或“AFE”)功能从平面文件备份中排除 MDF/LDF 文件。我的理解是,这是因为它总是直接支持他们不是一个好主意。因此,他们没有被排除在外这一点很奇怪,也许是故意的。
- 没有任何严重警告表明 SQL 数据可能不一致、无法恢复或其他问题。只是对 SQL Agent 提出礼貌建议。
这让我想知道,如果您使用 VSS(通过 AOFO),直接备份 SQL Server 数据是否真的安全?毕竟,这可能意味着在拍摄快照之前调用 SQL Server VSS Writer 来确保数据文件与应用程序一致。尽管 Backup Exec 已经识别出 SQL 数据,但它似乎“允许”我这样做。
我知道使用专用 SQL 代理有很多好处,但单纯就进行基本、一致、可恢复的备份而言,这安全吗?
似乎这个问题没有明确的答案,而且存在一些争议。显然,如果没有答案,我会采取久经考验的路线,但这让我陷入思考。
以下是我目前发现的一些内容:
答案1
想想正在发生的事情。SQL 数据库随时可能将复杂的事务写入整个 MDF 文件中的多个行和表。如果在这些复杂事务进行时进行备份,则数据库的一部分将在事务的第一部分写入之前备份,另一部分则在之后备份。如果它是一个包含很多列的表,理论上它可以在写入一行时复制文件的那部分。现在您有一个不一致的数据库,数据库日志无法知道。卷影复制将复制卷,但可以冻结卷...他们说是一分钟,但是.....还有大量的依赖项和陷阱。如果你愿意的话可以依赖它,但我不确定为什么。 https://www.brentozar.com/archive/2018/01/perils-vss-snaps/
SQL 备份中正在发生的事情的概念视图。真正的 SQL 备份在进行备份时会停止将更改写入数据库。它继续记录所有更改,并从与数据库读取混合的日志中适当地读取这些更改。备份数据库后,将启动新日志,并备份到该点的日志。当您恢复它时,数据库将被恢复,然后应用正在发生的日志文件。这样一切都稳定可靠。根据简单或完整恢复模型,这有不同的细微差别,但基本原理是相同的。保证备份的文件不会改变。这一切都是由数据库完成的,特别是对于数据库完整性的细微差别。这是值得信赖的。