SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)

SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)

背景

SQL Server是一种常见的关系型数据库管理系统,堆表是其一种表的存储形式。在误删除堆表记录并进行回滚时,如果数据库处于简单模式下,数据不可恢复。本攻略在简单模式下误删除堆表记录并绕过页眉校验,实现数据恢复。

简单模式下误删除堆表记录

在SQL Server中,简单模式下的事务处理不支持日志记录和回滚操作,也就是说使用简单模式的数据库如果误删除数据,将无法进行恢复操作,因此一定要谨慎操作。

绕过页眉校验实现数据恢复

SQL Server在表的数据页头中保存了相应的元数据信息,用于维护数据完整性。其中 校验字符串(Checksum) 是SQL Server用于判断表是否损坏的关键信息之一。我们在进行数据恢复前,需要先对表的数据页头进行修改,绕过页眉校验,否则恢复的数据可能会不完整。具体操作步骤如下:

  1. 确定误删除记录所在的堆表和行数。
  2. 在SQL Server中以sa账号登录,打开SQL Server Management Studio。
  3. 使用下面的sql语句,手动修改目标数据页头的Checksum,绕过页眉校验。
DBCC TRACEON (3604);
DBCC PAGE ('<Database_Name>', <File_ID>, <Page_ID>, 3) WITH TABLERESULTS;
USE [<Database_Name>]
GO

DBCC PAGE ('<Database_Name>', <File_ID>, <Page_ID>, 3) WITH TABLERESULTS;
GO

UPDATE [<Table_Name>] SET <Column_Name>='<Value>' WHERE <Unique_ID>='<Unique_ID_Value>'

其中,<Database_Name>是指误删的数据所在的数据库名称,<File_ID>是指数据文件编号,<Page_ID>是指数据页编号,在SQL Server Management Studio中可以通过右键点击数据表,选择【属性】,在【选项】中查找获取。<Table_Name>是指误删除的数据所在的表名称,<Column_Name>是指误删除的列名称,<Value>是指误删除的数据的值,<Unique_ID>是指误删除记录的ID编号列名称,<Unique_ID_Value>是指误删除记录的唯一ID编号值,可以通过查询堆表获取。修改Checksum算法和值,确保页眉校验被绕过。

  1. 使用下面的sql语句将新修改的数据页写入磁盘,此步骤是为了推进数据页的
    写出操作,使写入的信息能保存到数据库文件中。
USE [<Database_Name>]
GO
ALTER DATABASE [<Database_Name>] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO

DBCC TRACEON (3604);
DBCC PAGE ('<Database_Name>', <File_ID>, <Page_ID>, 3) WITH TABLERESULTS;
USE [<Database_Name>]
GO

UPDATE [<Table_Name>] SET <Column_Name>='<Value>' WHERE <Unique_ID>='<Unique_ID_Value>'
GO

ALTER DATABASE [<Database_Name>] SET MULTI_USER;
GO

示例

为了更好地说明操作步骤,以下提供两个示例说明。

示例一

误删除了数据库Test中的UserInfo表的第2行数据,假设以下条件:

  • 数据库名称:Test
  • 数据文件编号: 1
  • 数据页编号:10899
  • 表名称:UserInfo
  • 列名称: UserName
  • 列值:Tom
  • ID列名称:UserID
  • ID列值:2

我们需要用以下代码进行数据恢复操作:

USE [Test]
GO
DBCC TRACEON (3604)
GO
DBCC PAGE ('Test', 1, 10899, 3) WITH TABLERESULTS
GO
UPDATE UserInfo SET UserName='Tom' WHERE UserID='2'
GO
USE [Test]
GO
ALTER DATABASE [Test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC TRACEON (3604)
GO
DBCC PAGE ('Test', 1, 10899, 3) WITH TABLERESULTS;
GO
USE [Test]
GO
UPDATE UserInfo SET UserName='Tom' WHERE UserID='2'
GO
ALTER DATABASE [Test] SET MULTI_USER
GO

示例二

误删除了数据库Test中的UserInfo表的第5行数据,假设以下条件:

  • 数据库名称:Test
  • 数据文件编号: 2
  • 数据页编号:2125
  • 表名称:UserInfo
  • 列名称: UserName
  • 列值:Lily
  • ID列名称:UserID
  • ID列值:5

我们需要用以下代码进行数据恢复操作:

USE [Test]
GO
DBCC TRACEON (3604)
GO
DBCC PAGE ('Test', 2, 2125, 3) WITH TABLERESULTS
GO
UPDATE UserInfo SET UserName='Lily' WHERE UserID='5'
GO
USE [Test]
GO
ALTER DATABASE [Test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC TRACEON (3604)
GO
DBCC PAGE ('Test', 2, 2125, 3) WITH TABLERESULTS;
GO
USE [Test]
GO
UPDATE UserInfo SET UserName='Lily' WHERE UserID='5'
GO
ALTER DATABASE [Test] SET MULTI_USER
GO

以上就是本攻略的具体操作步骤与示例说明。需要注意的是,在使用本方法时要谨慎操作,避免因不慎操作导致数据损坏。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验) - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Oracle带输入输出参数存储过程(包括sql分页功能)

    下面是针对“Oracle带输入输出参数存储过程(包括sql分页功能)”的完整攻略,通过以下内容,您可以学习并练习如何在Oracle数据库中创建带有输入输出参数的存储过程,并且带有SQL分页功能。 1. 准备工作 在开始创建存储过程之前,需要确保您已经掌握以下基础知识: Oracle数据库的基础结构与操作方法; SQL查询语句、函数、分页等基本用法; 存储过程…

    database 2023年5月21日
    00
  • mysql备份的三种方式详解

    MySQL备份的三种方式详解 为什么需要备份MySQL? MySQL是一种非常重要的关系型数据库管理系统,为了避免数据丢失和避免服务停机时间过长,我们需要定期备份MySQL数据。定期备份MySQL可以对数据和系统进行还原,使得备份数据成为企业保障业务连续性和数据完整性的非常重要的一部分。 备份MySQL的三种方式 MySQL备份方法可以分为以下三种: 物理备…

    database 2023年5月22日
    00
  • MySQL中对查询结果排序和限定结果的返回数量的用法教程

    下面是MySQL中对查询结果排序和限制结果返回数量的用法教程完整攻略: 排序查询结果 在MySQL中可以使用ORDER BY语句来对查询结果进行排序。ORDER BY语句必须放在查询语句的最后,后面紧跟着排序的列名以及可选的排序方式(升序或降序)。 以下是ORDER BY语句的基本语法: SELECT column1, column2, … FROM t…

    database 2023年5月22日
    00
  • 使用Redis实现抢购的一种思路(list队列实现)

    原文:https://my.oschina.net/chinaxy/blog/1829233   抢购是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少(“超卖”问题) 对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。重点在于第二个问题,我们看看下…

    Redis 2023年4月11日
    00
  • Centos7下mysql 8.0.15 安装配置图文教程

    Centos7下mysql 8.0.15 安装配置图文教程 本教程将以CentOS 7系统为例,详细介绍如何安装配置mysql 8.0.15。 步骤1:下载Mysql服务器 进入mysql官网(https://dev.mysql.com/downloads/mysql/)下载MySQL服务器安装包,选择RPM Archive版本即可。 wget https:…

    database 2023年5月22日
    00
  • asp.net无法加载oci.dll等错误的解决方法

    请看以下内容: ASP.NET无法加载oci.dll等错误的解决方法 在ASP.NET开发中,我们可能会遇到类似“无法加载oci.dll”、“无法加载oraocci11.dll”、“无法加载Oracle.DataAccess.dll”等错误。这些错误通常是由Oracle客户端库(ODAC)没有正确安装或配置引起的。下面是解决这些问题的一些方法。 1. 安装或…

    database 2023年5月21日
    00
  • linux性能调试之vmstat分析

    Linux性能调试之VMStat分析攻略 VMStat是Linux上的一个综合性能监控工具,可以监控系统的CPU、内存、虚拟内存、磁盘I/O等各方面的性能指标,是分析系统瓶颈和优化系统性能的重要工具之一。 使用VMStat进行性能监控 安装VMStat VMStat是Linux系统自带的工具,通常情况下无需进行安装。 启动VMStat 我们可以使用以下命令启…

    database 2023年5月22日
    00
  • mysql 操作数据库基础详解

    MySQL 操作数据库基础详解 MySQL 是一种基于关系型数据库管理系统的开源软件。它能够提供数据存储、访问和管理的能力。MySQL 操作数据库有多种方式,包括使用命令行、使用图形用户界面和使用编程语言对数据库进行操作。在本文中,我们将介绍如何使用命令行方式操作 MySQL 数据库。 连接 MySQL 数据库 在进行任何操作之前,必须先连接到数据库。使用以…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部