[微软官网] SQLSERVER 执行页面还原
执行页面还原
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)。
页面还原的过程
页面还原的基本步骤如下:
获取要还原的损坏页的页 ID。校验和或残缺写错误将返回页 ID,并提供指定页所需的信息。若要查找损坏页的页 ID,请使用下列任一来源。
页 ID 源
主题
msdb..suspect_pages
错误日志
事件跟踪
DBCC
WMI 提供程序
从包含页的完整数据库备份、文件备份或文件组备份开始进行页面还原。在 RESTORE DATABASE 语句中,使用 PAGE 子句列出所有要还原的页的页 ID。
PAGE ='file:page [ ,...n ]'
应用最近的差异。
应用后续日志备份。
创建新的数据库日志备份,使其包含已还原页的最终 LSN,即最后还原的页脱机的时间点。设置为顺序中首先还原的最终 LSN 是重做目标 LSN。包含该页的文件的联机前滚可以在重做目标 LSN 处停止。若要了解文件的当前重做目标 LSN,请查看 sys.master_files 的 redo_target_lsn 列。有关详细信息,请参阅 sys.master_files (Transact-SQL)。
还原新的日志备份。应用这个新的日志备份后,就完成了页面还原,可以开始使用页了。
注意 |
|---|
|
此顺序与文件还原顺序类似。事实上,页面还原和文件还原都可以在相同的顺序中执行。 |
示例
以下示例使用 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 执行页面还原的更多相关文章
- [微软官网]SQLSERVER的版本信息
来源:https://docs.microsoft.com/zh-cn/sql/sql-server/editions-and-components-of-sql-server-2017?view=s ...
- Threejs 官网 - 怎样执行本地的东西(How to run things locally)
Threejs 官网 - 怎样执行本地的东西(How to run things locally) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循&qu ...
- ng2响应式表单-翻译与概括官网REACTIVE FORMS页面
本文将半翻译半总结的讲讲ng2官网的另一个未翻译高级教程页面. 原文地址. 文章目的是使用ng2提供的响应式表单技术快速搭出功能完善丰富的界面表单组件. 响应式表单是一项响应式风格的ng2技术,本文将 ...
- Scrapy官网程序执行示例
Windows 10家庭中文版本,Python 3.6.4,Scrapy 1.5.0, Scrapy已经安装很久了,前面也看了不少Scrapy的资料,自己尝试使其抓取微博的数据时,居然连登录页面(首页 ...
- Bootstrap--模仿官网写一个页面
本文参考Bootstrap官方文档写了简单页面来熟悉Bootstrap的栅格系统.常用CSS样.Javascript插件和部分组件. 以下html代码可以直接复制本地运行: BootstrapPage ...
- Angular2响应式表单-翻译与概括官网REACTIVE FORMS页面
本文将半翻译半总结的讲讲ng2官网的另一个未翻译高级教程页面. 原文地址. 文章目的是使用ng2提供的响应式表单技术快速搭出功能完善丰富的界面表单组件. 响应式表单是一项响应式风格的ng2技术,本文将 ...
- windows server 2008 各版本号下载地址(微软官网)
前言: 微软官网上下载系统的镜像文件要远比百度网盘下载起来得更快. Windows Server 2008 32-bit Standard(标准版)
- 从微软官网下载VS离线安装包的方法
这里描述是包括所有版本,截图以下载VS2017社区版为例: ①登入VS官网下载页面,选择需要的版本点击下载,下载页点此进入. ②下载完成后,打开下载文件所在文件夹,Windows 8.1及以上版本用户 ...
- 微软官网下载win10离线介质
1.打开google浏览器 2.搜索win10官网下载或者直接输入网址https://www.microsoft.com/zh-cn/software-download/windows10 3.按F1 ...
随机推荐
- 关于DP和背包
听说过动态规划(DP)的同学应该都知道有背包问题的存在. 首先我们来了解一下动态规划 基本思想: 动态规划算法通常用于求解具有某种最优性质的问题. 在这类问题中, 可能会有很多可行解.每一个解都对应于 ...
- 标准输入输出 sys.stdin与sys.stdin
1.python中的标准输入输出 如果需要更好的控制输出,而print不能满足需求,input也不能 sys.stdout,sys.stdin,sys.stderr就是你需要的. 2.输入:sys.s ...
- Kubernetes学习之路(七)之Coredns和Dashboard二进制部署
一.CoreDNS部署 在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问. (1)编辑coredns.yaml文 ...
- 关于 Git SSH 使用的项目实践
Git 是分布式的代码管理工具,远程的代码管理是基于 SSH 的,所以要使用远程的 git 则需要SSH的配置. 一.简述 访问 Git 仓库可以使用 SSH Key 的方式,首先需要生成 Key. ...
- Sklearn环境搭建与常用包
开发环境搭建 直接安装Anaconda IPython IPython是公认的现代科学计算中最重要的Python工具之一.它是一个加强版的Python交互命令行工具,有以下几个明显的特点: 1. 可以 ...
- 开箱即用 - Memcache缓存
废话少说,先上代码C# memcache Demo memcache 是服务器缓存系统,以键值对方式保存数据到内存中,把对象序列化后,理论上可支持所有的数据类型. 使用情景:怎么用都可以,注意的是它只 ...
- Cisco Packet Tracer中通过集线器组网
Cisco Packet Tracer中可以通过集线器将多台电脑完成通信. Cisco Packet Tracer 6.2.0 一.添加三台电脑设备 1.按照下图1.2步骤操作,2步骤执行三次,拖拽P ...
- Jmeter+Badboy安装使用文档
Jmeter+Badboy安装使用文档 目录 1.jmeter安装 1 2.Jmeter基础使用 3 3. 使用Jmeter进行分布式测试 ...
- Post请求和Get请求;@RequestBody和@RequestParam
1.@RequestBody用于Post请求,接收json数据,例如:@RequestBody User user 例如:@RequestBody Map map .不要用于Get请求. 2.@Req ...
- C语言学习之路之基础变量
Hello,大家好,今天又和大家见面了!前两天,我看到了几款游戏引擎渲染效果的对比的视频,https://www.bilibili.com/video/av5113296?from=search&am ...
重要提示