然而,这不能完成的主要原因是在恢复操作期间移动页面会破坏 b-tree 指针。如果页面 A 指向页面 B,但页面 A 被还原过程移动,那么页面 B 如何更新为指向页面 A?如果它立即更新,那么它可能会被其余的恢复过程覆盖。如果它是延迟更新的,如果恢复过程恢复了一些删除页面 A 或页面 B 的事务日志怎么办?根本做不到。
底线 - 备份和恢复是永远不会更改数据的物理操作。
希望这可以帮助!
PS 虽然它没有直接解决这个问题,但请查看我为 7 月 TechNet 杂志撰写的文章,该文章解释了各种备份如何在内部工作:了解 SQL Server 备份。九月杂志将有下一篇关于理解修复的系列文章。
答案是否定的,无论使用何种备份软件。
备份是物理操作,而不是逻辑操作。它读取包含已分配页面的所有扩展区(即,即使仅分配了 8 页扩展区中的一个页面,它也会备份整个 64K 扩展区),并按物理顺序进行。
还原是物理操作,而不是逻辑操作。它在数据文件中的适当位置规定了范围。
重建索引(或类似的东西)是一个逻辑操作,必须记录下来。备份和恢复直接操作数据文件,而不通过缓冲池,这是无法做到这一点的原因之一。无法做到这一点的另一个原因是备份和还原不了解正在备份的数据中包含的内容。
然而,这不能完成的主要原因是在恢复操作期间移动页面会破坏 b-tree 指针。如果页面 A 指向页面 B,但页面 A 被还原过程移动,那么页面 B 如何更新为指向页面 A?如果它立即更新,那么它可能会被其余的恢复过程覆盖。如果它是延迟更新的,如果恢复过程恢复了一些删除页面 A 或页面 B 的事务日志怎么办?根本做不到。
底线 - 备份和恢复是永远不会更改数据的物理操作。
希望这可以帮助!
PS 虽然它没有直接解决这个问题,但请查看我为 7 月 TechNet 杂志撰写的文章,该文章解释了各种备份如何在内部工作:了解 SQL Server 备份。九月杂志将有下一篇关于理解修复的系列文章。
本机SQL 备份只是备份文件的逐页转储,因此答案是否定的。Quest lightspeed 备份可能使用某种压缩压缩算法,但它仍然不会“重建”数据文件或索引,这将在大型数据库上花费大量时间。
备份会定期且非常频繁地进行(我希望如此)。因此,设计师确保备份尽可能快。什么是最快的 I/O?顺序的。您以精确的物理顺序从磁盘读取块,您将获得最佳性能。
为什么数据库每天晚上都要执行繁琐的随机 I/O 操作,把磁盘的磁头弄得满地都是?差异将在两个数量级左右。在这方面没有可能的收获。
嗯。BradC,您以前是否使用过 Firebird/Interbase - 主要的备份/恢复实用程序/API 更像是 SSMS/EM 的“复制数据库...”?如果是这样,请知道 MS SQL Server 不喜欢它。
SQLServer 备份更像是“按原样”还原的数据库转储 - 因此它更像是“在其他地方分离-复制-重新附加”操作的舒适在线快捷方式。还原的数据库几乎是原始数据库文件的精确副本(几乎是因为您可以更改还原数据库的数据库文件的位置)...