本主题介绍如何使用 SQL Server Management Studio 或 Transact-SQL 还原 SQL Server 中的页面。 页面还原的目标是在不还原整个数据库的情况下还原一个或多个损坏的页面。 通常,由于访问页面时遇到错误,作为还原候选项的页面被标记为“可疑”。 可疑页在 msdb 数据库的suspect_pages表中标识。
本主题内容
准备工作:
若要还原页面,请使用:
在您开始之前
页面还原何时有用?
页面还原用于修复独立损坏的页面。 还原和恢复几个单独的页面的速度可能比文件还原更快,从而减少在还原作期间脱机的数据量。 但是,如果必须还原文件中的多个页面,则还原整个文件通常更高效。 例如,如果设备上的大量页面显示可能会发生的设备故障,请考虑还原文件,可能还原到其他位置,并修复设备。
此外,并非所有页面错误都需要还原。 缓存数据(例如辅助索引)中可能会出现问题,可以通过重新计算数据来解决。 例如,如果数据库管理员删除了一个辅助索引并重新生成它,虽然损坏的数据已被修复,但在 suspect_pages 表中不会被标记为已修复。
局限性与限制
页面还原适用于使用完整或大容量日志恢复模式的 SQL Server 数据库。 页面还原仅支持读写文件组。
只能还原数据库页。 页还原不能用于还原以下内容:
事务日志
分配页:全局分配映射 (GAM) 页、共享全局分配映射 (SGAM) 页和页可用空间 (PFS) 页。
所有数据文件的第 0 页(文件启动页)
第 1:9 页(数据库启动页)
全文目录
对于使用大容量日志恢复模式的数据库,页面还原具有以下附加条件:
在文件组或页面数据脱机时进行备份对于大容量记录数据有问题,因为脱机数据不会记录在日志中。 任何脱机页面都可以阻止备份日志。 在这种情况下,请考虑使用 DBCC REPAIR,因为这可能会导致数据丢失比还原到最新的备份要少。
如果大容量日志数据库的日志备份遇到错误页,则除非指定 WITH CONTINUE_AFTER_ERROR,否则它将失败。
页面还原通常不适用于大容量日志恢复。
执行页面还原的最佳做法是将数据库设置为完整恢复模式,并尝试日志备份。 如果日志备份有效,可以继续执行页面还原。 如果日志备份失败,则必须由于以前的日志备份而丢失工作,或者必须尝试使用 REPAIR_ALLOW_DATA_LOSS 选项运行 DBCC。
建议
页面还原方案:
脱机页面还原
当数据库处于脱机状态时,所有版本的 SQL Server 都支持还原页面。 在脱机页面还原中,数据库在还原损坏的页面时处于脱机状态。 还原序列结束时,数据库上线。联机页面还原
SQL Server Enterprise Edition 支持联机页面还原,但如果数据库当前处于脱机状态,则它们使用脱机还原。 在大多数情况下,当数据库保持联机状态时,可以还原损坏的页面,包括正在还原页面的文件组。 当主文件组处于联机状态时,即使其一个或多个辅助文件组处于脱机状态,页面还原通常也会联机执行。 但是,有时损坏的页面可能需要脱机还原。 例如,某些关键页面的损坏可能会阻止数据库启动。警告
如果损坏的页面正在存储关键数据库元数据,则对元数据的必需更新可能会在联机页面还原尝试期间失败。 在这种情况下,可以执行脱机页面还原,但首先必须创建 结尾日志备份 (通过使用 RESTORE WITH NORECOVERY 备份事务日志)。
页面还原充分利用改进的页面级错误报告(包括页面校验和)和跟踪。 检测到因校验和或撕裂写入导致损坏的页面,损坏的页面,可以通过页面还原操作进行修复。 仅还原显式指定的页面。 每个指定页面都由指定数据备份中的该页的副本替换。
还原后续日志备份时,它们仅应用于包含至少一个正在恢复的页面的数据库文件。 必须将未中断的日志备份链应用于最后一次完整还原或差异还原,才能将包含页的文件组转发到当前日志文件。 与文件还原一样,前滚集通过单次日志重做进行推进。 若要使页面还原成功,必须将还原的页面恢复到与数据库一致的状态。
安全
权限
如果还原的数据库不存在,则用户必须具有 CREATE DATABASE 权限才能执行 RESTORE。 如果数据库存在,则 RESTORE 权限默认授予给sysadmin和dbcreator固定服务器角色的成员,以及数据库的所有者(dbo)。(对于 FROM DATABASE_SNAPSHOT 选项,数据库始终存在。)
RESTORE 权限被授予那些成员信息始终可供服务器轻松获取的角色。 由于仅当数据库可访问且未损坏时,才能检查固定数据库角色成员身份,因此执行 RESTORE 时并不总是如此, 因此db_owner 固定数据库角色的成员没有 RESTORE 权限。
使用 SQL Server Management Studio
从 SQL Server 2014 开始,SQL Server Management Studio 支持页面还原。
还原页面
在对象资源管理器中,连接到 SQL Server 数据库引擎的相应实例,单击服务器名称以展开服务器树。
展开 数据库。 根据数据库,选择用户数据库或展开 系统数据库,然后选择系统数据库。
右键单击数据库,指向 “任务”,指向“ 还原”,然后单击“ 页面”,这将打开“ 还原页 ”对话框。
还原
本部分在还原数据库(常规页)上执行与还原到相同的功能。数据库
指定要还原的数据库。 可以从下拉列表中输入新数据库或选择现有数据库。 该列表包括服务器上的所有数据库,系统数据库 master 和 tempdb 除外。警告
若要还原受密码保护的备份,必须使用 RESTORE 语句。
Tail-Log 备份
在 备份设备 中输入或选择一个文件名,其中将存储数据库的结尾日志备份。备份集
本部分显示还原中涉及的备份集。标题 价值观 名称 备份集的名称。 组件 备份组件: 数据库、 文件或 <空白> (对于事务日志)。 类型 执行的备份类型: 完整、 差异或 事务日志。 服务器 执行备份作的数据库引擎实例的名称。 数据库 备份作中涉及的数据库的名称。 位置 备份集在卷中的位置。 First LSN 备份集中第一个事务的日志序列号(LSN)。 用于文件备份的空白处。 最后一个 LSN 备份集中最后一个事务的日志序列号(LSN)。 用于文件备份的空白处。 检查点 LSN 创建备份时的最近检查点的日志序列号(LSN)。 完整 LSN 最新完整数据库备份的日志序列号(LSN)。 开始日期 备份作开始的日期和时间,显示在客户端的区域设置中。 完成日期 备份作完成的日期和时间,显示在客户端的区域设置中。 大小 备份集的大小(以字节为单位)。 用户名 执行备份作的用户的名称。 过期日期 备份集过期的日期和时间。 单击“ 验证” 检查执行页面还原作所需的备份文件的完整性。
若要标识损坏的页面,请在“ 数据库 ”框中选中正确的数据库,单击“ 检查数据库页”。 这是一项长时间运行的操作。
警告
若要还原未损坏的特定页面,请单击“ 添加 ”并输入要还原的页面 的文件 ID 和 页 ID 。
页面网格用于标识要还原的页面。 最初,此网格是从 suspect_pages 系统表填充的。 若要添加或删除网格中的页面,请单击“添加或删除”。 有关详细信息,请参阅管理suspect_pages表(SQL Server)。
备份集网格列出了默认还原计划中备份集。 (可选)单击“ 验证” 以验证备份是否可读,以及备份集是否已完成,而无需还原备份集。 有关详细信息,请参阅 RESTORE VERIFYONLY (Transact-SQL)。
页面
若要还原页面网格中列出的页面,请单击“ 确定”。
使用 Transact-SQL
若要在 RESTORE DATABASE 语句中指定页面,需要包含页面的文件的文件 ID 和页面 ID。 所需的语法如下所示:
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY
有关 PAGE 选项的参数的详细信息,请参阅 RESTORE 参数 (Transact-SQL)。 有关 RESTORE DATABASE 语法的详细信息,请参阅 RESTORE (Transact-SQL)。
恢复页面
获取要还原的损坏页面的页面 ID。 校验和或撕裂写入错误返回页 ID,提供指定页面所需的信息。 若要查找损坏页面的页面 ID,请使用以下任何源。
页面 ID 的源 主题 msdb..suspect_pages 管理 suspect_pages 表 (SQL Server) 错误日志 查看 SQL Server 错误日志 (SQL Server Management Studio) 事件跟踪 监视和响应事件 DBCC DBCC (Transact-SQL) WMI 提供程序 服务器事件概念的 WMI 提供程序 使用包含该页的完整数据库、文件或文件组备份启动页面还原。 在 RESTORE DATABASE 语句中,使用 PAGE 子句列出要还原的所有页面的页面 ID。
应用最新的差异。
应用后续日志备份。
创建数据库的新日志备份,其中包括还原页的最终 LSN,即上次还原页脱机的点。 最后一个 LSN 作为序列中第一个还原的一部分进行设置,是重做目标 LSN。 包含页面的文件的联机前滚能够在重做目标 LSN 处停止。 若要了解文件的当前重做目标 LSN,请参阅sys.master_files redo_target_lsn列。 有关详细信息,请参阅sys.master_files(Transact-SQL)。
还原新的日志备份。 应用此新的日志备份后,页面还原已完成,页面现在可用。
注释
此序列类似于文件还原序列。 事实上,页还原和文件还原都可以作为同一序列的一部分执行。
示例 (Transact-SQL)
以下示例使用NORECOVERY
还原文件B
的四个损坏页面。 接下来,通过 NORECOVERY
应用两个日志备份,然后通过 RECOVERY
还原结尾日志备份。 此示例执行联机还原。 在此示例中,文件B
的文件 ID 为1
,损坏页的页 ID 为57
、202
和916
1016
。
RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
FROM <file_backup_of_file_B>
WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup>
WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup>
WITH NORECOVERY;
BACKUP LOG <database> TO <new_log_backup>;
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO
另请参阅
RESTORE (Transact-SQL)
应用事务日志备份 (SQL Server)
管理 suspect_pages 表 (SQL Server)
SQL Server 数据库的备份和还原