执行页面还原

https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms175168(v=sql.105)

本主题与使用完整恢复模式或大容量日志恢复模式的 SQL Server 数据库相关。只有读/写文件组支持页面还原。

页面还原的目的是还原一个或多个损坏的页,而不还原整个数据库。通常,要进行还原的页已经由于在访问该页时遇到错误而标记为“可疑”。可疑页在 msdb 数据库的 suspect_pages 表中进行了标识。

注意

并非所有的页面错误都需要还原。缓存数据(例如辅助索引)中可能出现的问题可以通过重新计算这些数据来解决。例如,如果数据库管理员删除一个辅助索引,然后再重新生成一个辅助索引,则损坏的数据虽然已修复,但并没有在 suspect_pages 表中反映出这一情况。

可以立即还原多个数据库页。日志文件备份应用于包含要恢复的页的所有数据库文件。与文件还原中一样,每次传递日志重做,前滚集都会前进一步。

页面还原用于修复隔离的损坏页。还原和恢复少量页面的速度可能比还原一个文件更快,因此减少了还原操作中处于脱机状态的数据量。然而,如果文件中要还原的不只是少量页面,则通常还原整个文件更为有效。例如,如果某个设备上的大量页都指出此设备有未解决的故障;不妨考虑还原该文件(可以还原到另一位置)并修复该设备。

页面还原方案

SQL Server 2005 和更高版本的所有 Edition 都支持在数据库脱机时还原页面(“脱机页面还原”)。在 SQL Server 2005 Enterprise Edition 和更高版本中,如果页面还原过程中数据库处于联机状态,则数据库将保持联机状态。在数据库处于在线状态时还原和恢复页面的行为称作“在线页面还原”。

这些页面还原方案包括:

  • 脱机页面还原

    SQL Server 2005 Standard、SQL Server 2005 Express Edition 和 SQL Server 2005 Workgroup 及更高版本仅支持脱机还原。如果数据库已经处于脱机状态,则 SQL Server 2005 Enterprise Edition 及更高版本将使用脱机还原。在脱机还原页过程中,还原损坏的页时数据库处于脱机状态。还原顺序结束时,数据库将联机。

    为了成功还原页面,已还原的页必须恢复到与数据库一致的状态。必须将不中断的日志备份链应用于最后一次完整或差异还原,以便让包含该页的文件组前进到当前的日志文件。

  • 联机页面还原

    在 SQL Server 2005 Enterprise Edition 和更高版本中,情况允许时,会自动执行联机页面还原。大多数情况下,可以在数据库(包括页面要还原到的文件组)保持在线状态时还原损坏的页。联机页面还原对于因硬件错误而损坏的页尤其有用。

    有时,损坏的页需要脱机还原。例如,某些重要的页发生损坏可能会使数据库无法启动。在这类情况下,必须采用脱机还原。

    注意

    联机还原会尝试更新元数据,如果涉及重要的页面,则该更新可能会失败。如果联机还原尝试失败,则必须执行脱机还原。

页面还原利用了 SQL Server 2005 和更高版本中改进的页级错误报告(包含页校验和)和跟踪。通过校验和或残缺写操作检测为已损坏的页(“损坏页”)可以通过在 RESTORE 语句中指定这些页进行还原。页面还原仅适用于还原损坏的页数量较少的情况。RESTORE 语句中指定的每个页将由指定备份集中的页替换。还原的页必须恢复到与数据库一致的状态。仅还原显式指定的页。

页面还原的限制

仅可以还原数据库页。页面还原不能用于还原下列内容:

  • 事务日志

  • 分配页:全局分配映射 (GAM) 页、共享全局分配映射 (SGAM) 页和页可用空间 (PFS) 页。有关详细信息,请参阅管理区分配和可用空间

  • 所有数据文件的页 0(文件启动页)

  • 页 1:9(数据库启动页)

  • 全文目录

如果无法还原单个页,则必须使用现有的完整数据库备份或者完整文件,或文件组备份。

注意

如果要还原的页具有特殊用途(如元数据页),则联机页面还原将失败。在这些情况下,请尝试脱机页面还原。

还原页的要求

页面还原需要符合下列要求:

  • 数据库必须使用完整恢复模式或大容量日志恢复模式。使用大容量日志恢复模式时存在一些问题。有关详细信息,请参阅以下部分。

  • 只读文件组中的页无法还原。在正在还原文件组中的页的情况下,尝试将该文件组设置为只读会失败。

  • 还原顺序必须从完整备份、文件备份或文件组备份开始。

  • 页面还原需要截止到当前日志文件的连续日志备份,并且必须应用所有这些备份,页才能恢复到当前日志文件的状态。

  • 与在文件还原顺序中一样,您可以在每个还原步骤中向前滚集中添加更多的页。

  • 数据库备份和页面还原不能同时运行。

大容量日志恢复模式和页面还原

对于使用大容量日志恢复模式的数据库,页面还原还有下列附加条件:

  • 对大容量日志数据而言,在文件组或页数据处于脱机状态时进行备份是有问题的,因为日志中不记录脱机数据。任何脱机页都可能导致无法备份日志。在这种情况下,则应考虑使用 DBCC REPAIR,因为此方式导致的数据丢失少于还原到最近备份引起的数据丢失。

  • 如果大容量日志数据库的日志备份遇到错误页,除非指定了 WITH CONTINUE_AFTER_ERROR,否则将失败。

  • 通常,页面还原不能与大容量日志恢复模式配合使用。

    执行页面还原的最佳做法是将数据库设置为完整恢复模式,并尝试进行一次日志备份。如果可以进行日志备份,则可以继续进行页面还原。如果日志备份失败,则您将不得不丢失上一个日志备份之后的工作,或必须尝试运行 DBCC(必须使用 REPAIR_ALLOW_DATA_LOSS 选项)。

基本页面还原语法

若要在 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)

页面还原的过程

页面还原的基本步骤如下:

  1. 获取要还原的损坏页的页 ID。校验和或残缺写错误将返回页 ID,并提供指定页所需的信息。若要查找损坏页的页 ID,请使用下列任一来源。

     

    页 ID 源

    主题

    msdb..suspect_pages

    了解和管理 suspect_pages 表

    错误日志

    查看 SQL Server 错误日志

    事件跟踪

    监视事件

    DBCC

    DBCC (Transact-SQL)

    WMI 提供程序

    WMI Provider for Server Events 的概念

  2. 从包含页的完整数据库备份、文件备份或文件组备份开始进行页面还原。在 RESTORE DATABASE 语句中,使用 PAGE 子句列出所有要还原的页的页 ID。

    PAGE ='file:page [ ,...n ]'

  3. 应用最近的差异。

  4. 应用后续日志备份。

  5. 创建新的数据库日志备份,使其包含已还原页的最终 LSN,即最后还原的页脱机的时间点。设置为顺序中首先还原的最终 LSN 是重做目标 LSN。包含该页的文件的联机前滚可以在重做目标 LSN 处停止。若要了解文件的当前重做目标 LSN,请查看 sys.master_files 的 redo_target_lsn 列。有关详细信息,请参阅 sys.master_files (Transact-SQL)

  6. 还原新的日志备份。应用这个新的日志备份后,就完成了页面还原,可以开始使用页了。

注意

此顺序与文件还原顺序类似。事实上,页面还原和文件还原都可以在相同的顺序中执行。

示例

以下示例使用 NORECOVERY 还原文件 B 的四个损坏页。随后,将使用 NORECOVERY 应用两个日志备份,然后是结尾日志备份(使用 RECOVERY 还原)。

重要提示

如果损坏的页存储了重要的数据库元数据,则可能必须执行脱机页面还原顺序。若要执行脱机还原,则必须使用 WITH NORECOVERY 备份事务日志。

以下示例执行联机还原。此示例中,文件 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

[微软官网] SQLSERVER 执行页面还原的更多相关文章

  1. [微软官网]SQLSERVER的版本信息

    来源:https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2017?view=s ...

  2. Threejs 官网 - 怎样执行本地的东西(How to run things locally)

    Threejs 官网 - 怎样执行本地的东西(How to run things locally) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循&qu ...

  3. ng2响应式表单-翻译与概括官网REACTIVE FORMS页面

    本文将半翻译半总结的讲讲ng2官网的另一个未翻译高级教程页面. 原文地址. 文章目的是使用ng2提供的响应式表单技术快速搭出功能完善丰富的界面表单组件. 响应式表单是一项响应式风格的ng2技术,本文将 ...

  4. Scrapy官网程序执行示例

    Windows 10家庭中文版本,Python 3.6.4,Scrapy 1.5.0, Scrapy已经安装很久了,前面也看了不少Scrapy的资料,自己尝试使其抓取微博的数据时,居然连登录页面(首页 ...

  5. Bootstrap--模仿官网写一个页面

    本文参考Bootstrap官方文档写了简单页面来熟悉Bootstrap的栅格系统.常用CSS样.Javascript插件和部分组件. 以下html代码可以直接复制本地运行: BootstrapPage ...

  6. Angular2响应式表单-翻译与概括官网REACTIVE FORMS页面

    本文将半翻译半总结的讲讲ng2官网的另一个未翻译高级教程页面. 原文地址. 文章目的是使用ng2提供的响应式表单技术快速搭出功能完善丰富的界面表单组件. 响应式表单是一项响应式风格的ng2技术,本文将 ...

  7. windows server 2008 各版本号下载地址(微软官网)

    前言: 微软官网上下载系统的镜像文件要远比百度网盘下载起来得更快. Windows Server 2008 32-bit Standard(标准版)

  8. 从微软官网下载VS离线安装包的方法

    这里描述是包括所有版本,截图以下载VS2017社区版为例: ①登入VS官网下载页面,选择需要的版本点击下载,下载页点此进入. ②下载完成后,打开下载文件所在文件夹,Windows 8.1及以上版本用户 ...

  9. 微软官网下载win10离线介质

    1.打开google浏览器 2.搜索win10官网下载或者直接输入网址https://www.microsoft.com/zh-cn/software-download/windows10 3.按F1 ...

随机推荐

  1. 关于DP和背包

    听说过动态规划(DP)的同学应该都知道有背包问题的存在. 首先我们来了解一下动态规划 基本思想: 动态规划算法通常用于求解具有某种最优性质的问题. 在这类问题中, 可能会有很多可行解.每一个解都对应于 ...

  2. 标准输入输出 sys.stdin与sys.stdin

    1.python中的标准输入输出 如果需要更好的控制输出,而print不能满足需求,input也不能 sys.stdout,sys.stdin,sys.stderr就是你需要的. 2.输入:sys.s ...

  3. Kubernetes学习之路(七)之Coredns和Dashboard二进制部署

    一.CoreDNS部署 在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. (1)编辑coredns.yaml文 ...

  4. 关于 Git SSH 使用的项目实践

    Git 是分布式的代码管理工具,远程的代码管理是基于 SSH 的,所以要使用远程的 git 则需要SSH的配置. 一.简述 访问 Git 仓库可以使用 SSH Key 的方式,首先需要生成 Key. ...

  5. Sklearn环境搭建与常用包

    开发环境搭建 直接安装Anaconda IPython IPython是公认的现代科学计算中最重要的Python工具之一.它是一个加强版的Python交互命令行工具,有以下几个明显的特点: 1. 可以 ...

  6. 开箱即用 - Memcache缓存

    废话少说,先上代码C# memcache Demo memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型. 使用情景:怎么用都可以,注意的是它只 ...

  7. Cisco Packet Tracer中通过集线器组网

    Cisco Packet Tracer中可以通过集线器将多台电脑完成通信. Cisco Packet Tracer 6.2.0 一.添加三台电脑设备 1.按照下图1.2步骤操作,2步骤执行三次,拖拽P ...

  8. Jmeter+Badboy安装使用文档

                  Jmeter+Badboy安装使用文档       目录   1.jmeter安装    1 2.Jmeter基础使用    3 3. 使用Jmeter进行分布式测试    ...

  9. Post请求和Get请求;@RequestBody和@RequestParam

    1.@RequestBody用于Post请求,接收json数据,例如:@RequestBody User user 例如:@RequestBody Map map .不要用于Get请求. 2.@Req ...

  10. C语言学习之路之基础变量

    Hello,大家好,今天又和大家见面了!前两天,我看到了几款游戏引擎渲染效果的对比的视频,https://www.bilibili.com/video/av5113296?from=search&am ...