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

yizhihongxing

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 存储过程和触发器复制数据

    Oracle数据库中,可以使用存储过程和触发器来实现数据的复制功能。下面是一个完整的攻略,具体包含如下步骤: 1. 创建存储过程 首先,需要创建一个存储过程,用于将要复制的数据从源表复制到目标表。创建存储过程的语句如下: CREATE OR REPLACE PROCEDURE copy_data IS BEGIN INSERT INTO target_tab…

    database 2023年5月21日
    00
  • MySQL数据库用户权限管理

    MySQL数据库用户权限管理 MySQL是一款流行的关系型数据库管理系统,在使用之前需要创建数据库和用户,并设置用户的权限。本文将详细介绍如何进行MySQL数据库用户权限管理。 创建用户 通过CREATE USER命令可以创建一个新用户,使用如下语法: CREATE USER ‘username’@’localhost’ IDENTIFIED BY ‘pas…

    database 2023年5月18日
    00
  • Tableau Desktop10 64位中文破解安装图文教程(附破解补丁下载)

    “Tableau Desktop10 64位中文破解安装图文教程(附破解补丁下载) ”攻略 1. 下载软件和破解补丁 首先需要下载Tableau Desktop10 64位中文软件和破解补丁。这里建议去官网或者知名软件下载站下载,以免下载到病毒或者不安全的文件。 示例链接:Tableau Desktop10 64位中文官方下载页面 2. 安装软件 双击下载的…

    database 2023年5月19日
    00
  • MySQL Where 条件语句介绍和运算符小结

    MySQL是一种非常流行的关系型数据库管理系统,非常适合于处理大量数据。在使用MySQL时,Where条件语句是非常重要的一部分,可以通过使用Where来根据条件过滤数据,从而获取我们想要的数据。 本文将深入讲解MySQL中Where条件语句的使用方法和运算符小结。 一、Where条件语句介绍 Where条件语句是用于从表中的记录中选择特定记录的语句。Whe…

    database 2023年5月22日
    00
  • LNMP下FTP服务器的安装与使用方法(Pureftpd和Proftpd)

    LNMP是Linux+Nginx+MySQL+PHP的简称,为开发及运维者提供了一种快速搭建Web服务的解决方案。这里给出关于LNMP下Pureftpd和Proftpd两种FTP服务器的安装及使用方法。以下步骤在CentOS 7系统上进行测试通过。 安装Pureftpd 确保系统中已经安装epel扩展源和remi扩展源,如果没有安装可以使用以下命令进行安装:…

    database 2023年5月22日
    00
  • MySQL中UPDATE与DELETE语句的使用教程

    MySQL中UPDATE与DELETE语句的使用教程 MySQL是一种常用的数据库管理系统。当我们需要修改或删除数据库中的记录时,我们可以使用MySQL中的UPDATE和DELETE语句来完成操作。下面将分别介绍UPDATE和DELETE语句的使用教程。 使用UPDATE语句修改记录 UPDATE语句用于修改数据库中的记录。其基本语法如下: UPDATE t…

    database 2023年5月21日
    00
  • Could not load file or assembly Microsoft.SqlServer.Management.Sdk.Sfc, Version=

    这个错误信息通常出现在使用.Net Framework开发环境中,是由于缺少或者版本不符的Microsoft.SqlServer.Management.Sdk.Sfc所导致的。为了解决这个问题,我们可以考虑以下几种方法: 方法一:使用NuGet包管理器安装Microsoft.SqlServer.Management.Sdk.Sfc NuGet是一个用于Mic…

    database 2023年5月18日
    00
  • 数据库 关键字一览表

    数据库关键字一览表 在进行数据库操作的时候,我们所使用的各种命令都需要使用到数据库关键字,这些关键字决定了我们所执行的操作种类和范围。下面是一个数据库关键字一览表,其中包含了一些常见的关键字和对应的说明。 SELECT SELECT 关键字用于从一个或多个表中选择数据。其基本语法如下: SELECT column1, column2, column3, ..…

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