从备份还原 SQL 数据库是否会重建其索引?

Bra*_*adC 10 restore sql-server

从备份还原 SQL 数据库是否会从头开始重建其表和索引?或者它是否保持与备份时相同的内部物理顺序?

我们将 SQL 2000 与 Quest Lightspeed 压缩备份一起使用,如果这有什么不同的话。

Pau*_*dal 16

答案是否定的,因为无论使用何种备份软件。

备份是物理操作,而不是逻辑操作。它读取包含已分配页面的所有区(即,即使只分配了 8 页区中的一个页面,它也会备份整个 64K 区),并按物理顺序执行。

还原是物理操作,而不是逻辑操作。它在数据文件中的适当位置放置了范围。

重建索引(或类似的东西)是一个逻辑操作,必须记录下来。备份和恢复直接操作数据文件,无需通过缓冲池,这也是无法做到这一点的原因之一。无法做到这一点的另一个原因是备份和恢复不了解正在备份的数据中包含的内容。

然而,不能这样做的主要原因是在恢复操作期间移动页面会破坏 b 树指针。如果页面 A 指向页面 B,但页面 A 被还原过程移动,页面 B 如何更新为指向页面 A?如果它立即更新,那么它可能会被其余的恢复过程覆盖。如果它是延迟更新的,那么如果恢复过程恢复了一些删除页面 A 或页面 B 的事务日志怎么办?它根本无法做到。

底线 - 备份和恢复是从不更改数据的物理操作。

希望这可以帮助!

PS 虽然它没有直接解决这个问题,但请查看我为 7 月 TechNet 杂志撰写的文章,该文章解释了各种备份如何在内部工作:了解 SQL Server 备份。九月杂志将有下一篇关于理解恢复的系列文章。

  • 我喜欢你解释索引是一种逻辑操作的事实。 (2认同)

Aar*_*ton 6

SQL 备份只是备份文件的逐页转储,因此答案是否定的。Quest lightspeed 备份可能使用某种压缩算法,但它仍然不会“重建”数据文件或索引,这将在大型数据库上花费大量时间。