错误 832 是与 SQL Server 页面中的问题相关的错误。当外部工具(数据库引擎外部)影响数据库页面时,会发生此错误。完整的错误消息如下所示:
Msg 832, Level 24, State 1, Line 1
A page that should have been constant has changed (expected checksum: 0xE7F987A3, actual checksum: 0xA2B9E4F1, database id: 5, file id: 1, page id: 123456789, expected file size: 1048576, created timestamp: 2023-07-15 10:34:28.283).
级别 24 表示这是一个严重错误。此错误与影响数据库中一页或多页的硬件或操作系统问题有关。此外,如果 MS SQL Server 进程中正在运行的线程错误地写入数据库中的页面,也可能会发生这种情况。
我们怎样才能检测到这个错误呢?
有多种方法可以检测此错误。您可以在事件查看器中查找此错误。要打开事件查看器,请在 Windows 操作系统任务栏的搜索文本框中键入事件查看器。 在事件查看器中,转至Windows 日志 > 应用程序。或者,您可以自定义过滤器选项来查找错误。 应用程序并使用筛选器选项来查找错误。" data-mce-src="https://cdn-cmlep.nitrocdn.com/DLSjJVyzoVcUgUSBlgyEUoGMDKLbWXQr/assets/images/optimized/rev-1360ed1/blog/wp-content/uploads/2023/08/image-2-1-1024x662.png">或者,您可以在 SQL Server 错误日志中查找此错误。在 SQL Server Management Studio (SSMS) 中,转到SQL Server 代理 > 错误日志。当您打开日志时,您将看到 SQL Server 错误消息,包括错误 832。 错误日志并查看包括错误 832 在内的 SQL Server 错误消息,在 SQL Server 错误日志中查找错误。" data-mce-src="https://cdn-cmlep.nitrocdn.com/DLSjJVyzoVcUgUSBlgyEUoGMDKLbWXQr/assets/images/optimized/rev-1360ed1/blog/wp-content/uploads/2023/08/image-3.png">
修复 MS SQL Server 中的错误 832 的方法
您可以尝试使用以下一些方法来修复错误 832 并恢复数据库。
恢复上次的 MS SQL 数据库备份
解决此问题的最简单方法是使用上次备份或最接近您需要的日期的备份。以下 T-SQL 命令显示了如何恢复数据库。
RESTORE DATABASE stellardb
FROM DISK = ‘e:\backups\stellardb.bak’
上述命令恢复存储在 e:\backups 文件夹中的名为 stellardb.bak 的备份。或者,您可以使用 SQL Server Management Studio (SSMS) 来还原数据库。按着这些次序:
- 在 SSMS 中,选择数据库模式并选择恢复数据库选项。
- 选择“设备”选项,然后按“浏览”按钮选择备份。
- 选择备份设备。
- 选择备份集并按确定。
使用 DBCC CHECKDB 命令
如果没有备份,可以尝试使用DBCC CHECKDB命令修复数据库。可以使用以下命令修复数据库:
ALTER DATABASE stellardb SET EMERGENCY;
ALTER DATABASE stellardb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DBCC CHECKDB (stellardb, REPAIR_REBUILD) WITH NO_INFOMSGS, ALL_ERRORMSGS;
ALTER DATABASE stellardb SET MULTI_USER;
第一个命令将名为 stellardb 的数据库设置为紧急模式:
ALTER DATABASE stellardb SET EMERGENCY;
第二个命令将数据库设置为单用户模式并立即回滚。
DBCC CHECKDB (stellardb, REPAIR_REBUILD) WITH NO_INFOMSGS, ALL_ERRORMSGS;
第三条命令修复数据库。
DBCC CHECKDB (stellardb, REPAIR_REBUILD)
最后一个命令将其设置回多用户模式
ALTER DATABASE stellardb SET MULTI_USER;
仅恢复单个页面
如果只有一个页面损坏,您可以恢复该页面。为此,在 SQL Server Management Studio (SSMS) 中,转到对象资源管理器并选择任务 > 还原 > 页面。 “还原”>“页面”。" data-mce-src="https://cdn-cmlep.nitrocdn.com/DLSjJVyzoVcUgUSBlgyEUoGMDKLbWXQr/assets/images/optimized/rev-1360ed1/blog/wp-content/uploads/2023/08/img-8-1024x387.png">您需要输入文件 ID 和页面 ID。运行 DBCC CHECKDB 命令时,页面 ID 将显示在错误消息中,文件 ID 可以在以下查询中找到:
SELECT name as FileName, file_id AS FileID
FROM sys.database_files;
在恢复页面上,按添加按钮并输入文件 ID 和页面 ID。然后,按确定。
如果以上解决方案都不起作用怎么办?
如果前面的方法不起作用,那么您可以使用强大的 SQL 数据库修复工具,例如Stellar Repair for MS SQL。该工具旨在修复损坏的数据库。要修复数据库,您需要首先使数据库脱机。您可以使用以下 T-SQL 命令使数据库脱机:
ALTER DATABASE stellardb SET OFFLINE;
接下来,启动软件并查找需要修复的数据库文件。您可以使用“查找”按钮查找数据文件。
或者,您可以通过选中“包括已删除的记录”选项来恢复已删除的行。选择数据库文件后,按“修复”按钮。
修复后,您可以将数据保存在新数据库、现有数据库(实时数据库)或其他格式(如 Excel、CSV 等)中。
结论
上面,我们讨论了如何检测错误 832 以及修复该错误的不同方法。解决此问题的最简单方法是从备份恢复数据库。如果没有备份,可以尝试使用DBCC CHECKDB命令修复数据库。如果只有单个或几个页面需要修复,则恢复单个页面可能是一个有效的选项。如果这些解决方案都不起作用,您可以使用 Stellar Repair for MS SQL 来修复损坏的数据库。