var*_*ble 4 sql-server corruption sql-server-2019
假设 dbcc checkdb 在一页上显示损坏。
假设我想通过仅恢复损坏的页面来修复此问题。
所以我进入恢复页面用户界面,单击按钮找到损坏的页面,输入完整和日志备份文件并恢复。
我的问题是 - sql 服务器检查给定完整备份中页面是否损坏的方式是什么?
Dom*_*her 10
不会的。如果备份文件中有损坏的页面并恢复它,SQL 将恢复它(并且不会引发任何错误)。
您的工作是经常运行 checkdb 并确保不备份损坏的页面。
现在,您可以尝试恢复最新的完整备份+ diff/log 并运行 checkdb 以查看这是否修复了您的损坏。
如果没有,那么您可以获取以前的完整备份并应用所有日志到最后(这可能需要一些时间,因为您可能有很多日志需要恢复)并再次运行 checkdb。
*您可以通过在其他地方仅恢复完整内容并在那里运行 checkdb 来节省时间。如果页面没有完全损坏,那么在应用日志后从技术上讲它应该保持未损坏。
Joh*_* N. 10
DBA 有责任制定适当的维护计划并确保正在运行的数据库和数据库备份的完整性。
DBCC CHECKDB()是检查生产运行数据库中是否损坏的工具。
BACKUP DATABASE ... WITH CHECKSUM...这是一个足够的设置,可确保写入备份位置的数据与从正在运行的数据库检索的数据相同。
指定备份操作验证每个页面的校验和和破损页面(如果已启用且可用),并为整个备份生成校验和。
在 GUI 中设置选项“验证备份”RESTORE VERIFYONLY...或对数据库备份文件执行手动操作,也将检查创建的备份文件的有效性。
RESTORE DATABASE ... WITH CHECKSUM ...是将数据库恢复到备用位置/服务器时要运行的命令。
默认情况下,遇到无效校验和时,RESTORE 会报告校验和错误并停止。但是,如果指定 CONTINUE_AFTER_ERROR,则在返回校验和错误以及包含无效校验和的页号(如果损坏允许)后,RESTORE 将继续。
恢复后,您将再次运行 aDBCC CHECKDB()以确保恢复的数据库没有损坏。
确保正在恢复的页面不被损坏的 SQL Server 机制是什么?
空无一人。DBA 只需执行几个步骤(如上所述)即可确保数据库备份不损坏。页面可能包含损坏,但仍可恢复。只有运行后DBCC CHECKDB()您才能知道页面是否损坏。