iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >在SQL Server里怎么进行页级别的恢复
  • 175
分享到

在SQL Server里怎么进行页级别的恢复

2023-06-17 05:06:14 175人浏览 薄情痞子
摘要

这篇文章跟大家分析一下“在SQL Server里怎么进行页级别的恢复”。内容详细易懂,对“在sql Server里怎么进行页级别的恢复”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习

这篇文章跟大家分析一下“在SQL Server里怎么进行页级别的恢复”。内容详细易懂,对“在sql Server里怎么进行页级别的恢复”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“在SQL Server里怎么进行页级别的恢复”的知识吧。

在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作。假设在SQL Server里你有一个损坏的页,你要从最近的数据库备份只还原有问题的页,而不是还原整个数据库

我们来破坏一个页

第一步我想向你展示下如何建立表(或索引)里有个特定页损坏的情景,这里我们会进行一些魔术,因为开箱即用(out-of-box)的SQL Server本身不会引入任何损坏的页(如果有的话,恭喜你找到了一个BUG)。我们从创建一个新的数据库,往新建的表插入一些记录开始。

 1 USE master 2 Go 3  4 CREATE DATABASE PageLevelRestores 5 GO 6  7 USE PageLevelRestores 8 GO 9 10 -- Create a table where every record fits onto 1 page of 8kb11 CREATE TABLE Test12 (13     Filler CHAR(8000)14 )15 GO16 17 -- Insert 4 records18 INSERT INTO Test VALUES (REPLICATE('A', 8000))19 INSERT INTO Test VALUES (REPLICATE('B', 8000))20 INSERT INTO Test VALUES (REPLICATE('C', 8000))21 INSERT INTO Test VALUES (REPLICATE('D', 8000))22 GO23 24 -- Retrieve the selected records25 SELECT * FROM Test26 GO

下一步我进行完整数据库备份。这就是说这个备份包含了属于Test表的所有页。这非常重要,因为接下来我们会破坏这个表的一个特定页。为了找出属于Test表的页,我用DBCC IND命令来返回所有属于这个表的页。

1 -- PerfORM a full database backup2 BACKUP DATABASE PageLevelRestores TO DISK = N'C:\Backups\PageLevelRestores.bak'3 GO4 5 -- Retrieve the first data page for the specified table (columns PageFID and PagePID)6 DBCC IND(PageLevelRestores, Test, -1)7 GO

在SQL Server里怎么进行页级别的恢复

在SQL Server里怎么进行页级别的恢复

为了破坏一个特定的页,我使用未公开的DBCC WRITEPAGE命令。是的,在SQL Server里有个可用的DBCC WRITEPAGE命令,但请不要告诉任何人……

 1 ALTER DATABASE PageLevelRestores SET SINGLE_USER WITH ROLLBACK IMMEDIATE 2 GO 3  4 -- Let's corrupt page 90... 5 DBCC WRITEPAGE(PageLevelRestores, 1, 90, 0, 1, 0x41, 1) 6 DBCC WRITEPAGE(PageLevelRestores, 1, 90, 1, 1, 0x41, 1) 7 DBCC WRITEPAGE(PageLevelRestores, 1, 90, 2, 1, 0x41, 1) 8 GO 9 10 ALTER DATABASE PageLevelRestores SET MULTI_USER11 GO

为了使用DBCC WRITEPAGE,问题数据库必须设置如代码所示的单用户模式(Single-User mode)。这里我模拟了有个存储错误,写了一些垃圾到存储的页里(是的,这个在你工作中也会碰到!)。现在当你从表再次读取数据库,SQL Server会返回你一个824 I/O错误,因为对损坏页的校验失败了。

1 -- Retrieve the selected records2 SELECT * FROM Test3 GO

在SQL Server里怎么进行页级别的恢复

一旦SQL Server在I/O访问期间检测到一个损坏的页,在msdb.dbo.suspect_pages里,损坏的页也会被记录,如下图所示。

1 SELECT * FROM msdb.dbo.suspect_pages

在SQL Server里怎么进行页级别的恢复

对msdb里对特定表进行监控是个很好的想法,可以得到你的数据库里是否有损坏的页。现在我们让事情变得更糟糕,下列代码会往表里插入另外一条记录。

1 -- Now we have additional transaction that we don't want to loose...2 INSERT INTO Test VALUES (REPLICATE('E', 8000))3 GO

我们来还原损坏的页

现在你是DBA,你想恢复这个数据库到正确状态且不丢失数据(像我们在***一步插入的记录)。你会怎么做?首先你要进行所谓的尾日志备份(Tail-Log Backup):你要备份自上次事务日志备份后的已发生的事务。

1 -- Backup the transaction log2 BACKUP LOG PageLevelRestores TO3     DISK = 'C:\Backups\PageLevelRestores_LOG1.bak'4     WITH INIT5 GO

在这里还没有进行过事务日志备份,因此我们的备份会包含自完整备份后,所有已执行的事务。现在我们可以在SQL Server里初始页级别还原操作。这里你使用传统的RESTORE DATABASE的T-SQL命令,但你只要指定想要还原的页,不用还原整个数据库,我们只要还原有问题的页。如果你在处理很大的数据库,这会有很大的区别。

1 USE master2 -- Restore full database backup3 RESTORE DATABASE PageLevelRestores4     PAGE = '1:90'5     FROM DISK = 'C:\Backups\PageLevelRestores.bak'6     WITH NORECOVERY7 GO

现在到了棘手的部分:在RESTORE DATABASE的T-SQL命令后,你要进行另一个事务日志备份。这个另外的日志备份是需要的,因为接下来你要保证在这个可用页进行的所有改变用作还原。没有这个额外的日志备份,SQL Server不能把你的页重新上线。

1 -- Backup the tail of the log...2 BACKUP LOG PageLevelRestores TO3     DISK = 'C:\Backups\PageLevelRestores_LOG_TAIL.bak'4     WITH INIT5 GO

进行完这个额外日志备份后,你可以在正确的顺序里恢复所有的日志备份,可以把数据库恢复上线。

 1 -- Restore all available log backups in the correct order 2 RESTORE LOG PageLevelRestores FROM 3     DISK = 'C:\Backups\PageLevelRestores_LOG1.bak' 4     WITH NORECOVERY 5 GO 6  7 -- Finally restore the tail log backup 8 RESTORE LOG PageLevelRestores FROM 9     DISK = 'C:\Backups\PageLevelRestores_LOG_TAIL.bak'10     WITH NORECOVERY11 GO12 13 -- Finally finish with the restore sequence14 RESTORE DATABASE PageLevelRestores WITH RECOVERY15 GO

现在当你再次查询表时,你会看到SELECT语句成功执行没有任何I/O错误,在这个表里没有丢失任何数据。还是很简单,是不是?

1 USE PageLevelRestores2 GO3 4 -- Retrieve the selected records5 SELECT * FROM Test6 GO

在SQL Server里怎么进行页级别的恢复

关于在SQL Server里怎么进行页级别的恢复就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下编程网网站!

--结束END--

本文标题: 在SQL Server里怎么进行页级别的恢复

本文链接: https://www.lsjlt.com/news/287345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在SQL Server里怎么进行页级别的恢复
    这篇文章跟大家分析一下“在SQL Server里怎么进行页级别的恢复”。内容详细易懂,对“在SQL Server里怎么进行页级别的恢复”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习...
    99+
    2023-06-17
  • 怎么恢复SQL Server 2000损坏的数据库文件
    这篇文章主要讲解了“怎么恢复SQL Server 2000损坏的数据库文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么恢复SQL Server 200...
    99+
    2024-04-02
  • 怎么通过日志恢复SQL Server的历史数据
    这篇文章主要讲解了“怎么通过日志恢复SQL Server的历史数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过日志恢复SQL Server的历史数...
    99+
    2024-04-02
  • 怎么进行oracle控制文件的恢复
    这篇文章将为大家详细讲解有关怎么进行oracle控制文件的恢复,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1重建控制文件SYS@hyyk> alte...
    99+
    2024-04-02
  • 怎么进行Linux系统的备份恢复
    怎么进行Linux系统的备份恢复,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。tar 命令副本(本机备份整个系统,以后还原还是还原到本机)注意根目录下要有充足的可用空间用于备份...
    99+
    2023-06-28
  • Jenkins中备份和恢复是怎么进行的
    在Jenkins中进行备份和恢复通常可以通过以下几种方法来实现: 备份: 备份Jenkins的配置文件:可以通过将Jenkins的...
    99+
    2024-03-04
    Jenkins
  • 怎么进行基于sequence日志序号的恢复
    今天就跟大家聊聊有关怎么进行基于sequence日志序号的恢复,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 实验如下:...
    99+
    2024-04-02
  • 怎么在sql server中通过脚本进行数据库压缩全备份
    本篇文章为大家展示了怎么在sql server中通过脚本进行数据库压缩全备份,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。解决方案:通过with compressi...
    99+
    2024-04-02
  • RAC怎么进行从带库到单实例的恢复
    本篇文章给大家分享的是有关RAC怎么进行从带库到单实例的恢复,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 备份软件:HP-DP原库:生产R...
    99+
    2024-04-02
  • 怎么进行XFS文件系统的备份和恢复及修复
    怎么进行XFS文件系统的备份和恢复及修复,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导读XFS文件系统是硅谷图形公司(Silicon Graphics Inc...
    99+
    2023-06-05
  • mysql中lnnobackupex怎么进行全备加上增量的备份恢复
    mysql中lnnobackupex怎么进行全备加上增量的备份恢复,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 ...
    99+
    2024-04-02
  • oracle中对于复杂的SQL语句怎么进行优化
    本篇内容主要讲解“oracle中对于复杂的SQL语句怎么进行优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle中对于复杂的SQL语句怎么进行优化”吧...
    99+
    2024-04-02
  • 怎么在Vue单页面中进行业务数据的上报
    小编给大家分享一下怎么在Vue单页面中进行业务数据的上报,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!概述业务数据的上报主要分为:各个路由的PV上报;用户的点击行为上报;用户操作结果(分享是否成功)的数据上报等;通用和必须...
    99+
    2023-06-15
  • SQLServer 错误 17142 SQL Server 服务已经暂停。 不允许进行新的连接。 要恢复此服务,请使用 SQL 计算机管理器或控制面板中的服务应用程序。 故障 处理 修复 支持远程
    详细信息 Attribute 值 产品名称 SQL Server 事件 ID 17142 事件源 MSSQLSERVER 组件 SQLEngine 符号名称 INIT_SRVC_PAUSED 消息正文 SQ...
    99+
    2023-11-05
    请使用 不允许 管理器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作