位置: 编程技术 - 正文

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

编辑:rootadmin
首先,我需要强调下,这篇主旨是揭示堆表的删除记录找回的原理,我所考虑的方面并不适用于每个人的每种情况,望大家见谅~ 很多朋友认为数据库在简单模式下,堆表误删除一条记录,是无法找回的,因为没有日志记录。其实不然,某种意义上是可以找回的,因为堆表在删除记录时,只更改了行偏移,实际数据没有被物理删除,所以利用这点,测试了下恢复数据,果然成功了,但是还有点问题没有研究出结果:如果不关闭页面校验,除了更改偏移量,删除数据时还需要更改页眉,这点还没时间去琢磨,所以恢复数据时还要能推断出页眉的进制对应关系,有兴趣的朋友可以分享下经验给我。这里为了排除页眉的校验错误,关闭后测试 废话不多说,测试的demo如下: 测试环境:   SQL Server R2   数据库:repl_test 简单模式   测试表:test_del 测试步骤 1.创建测试表test_del,并插入测试数据。 2.查看测试数据,显示正常。

3.DBCC IND命令来找到数据页id,找到数据页id:,这个数据页存放了test_del的数据

使用dbcc page查看数据页的内容以及行偏移量 dbcc page(repl_test,1,,1) go输出结果为: DATA: Slot 0, Offset 0x, Length , DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = Memory Dump @0xCC : f &#;........row 1 : &#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#; ... Slot 1, Offset 0x, Length , DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = Memory Dump @0xCC : f &#;........row 2 : &#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#; ... Slot 2, Offset 0x8a, Length , DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = Memory Dump @0xCCA : f &#;........row 3 : &#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#; ... Slot 3, Offset 0x9f, Length , DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = Memory Dump @0xCCF : f &#;........row 4 : &#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#; ... Slot 4, Offset 0xb4, Length , DumpStyle BYTE Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Record Size = Memory Dump @0xCC0B4 : f &#;........row 5 : &#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#;&#; ... OFFSET TABLE: Row - Offset 4 (0x4) - (0xb4) 3 (0x3) - (0x9f) 2 (0x2) - (0x8a) 1 (0x1) - (0x) 0 (0x0) - (0x) 其中行偏移量第一行为 (0x),实际记录为row 1,row 2: (0x),row 3: (0x8a),row 4:(0x9f),row 5: (0xb4) 4. 删除第三行数据 a = 3,b = row 3的记录

说明a=3 b=row3的记录已经被删除。5.再次查看数据页的行偏移 dbcc page(repl_test,1,,1) goRow - Offset 4 (0x4) - (0xb4) 3 (0x3) - (0x9f) 2 (0x2) - 0 (0x0) 1 (0x1) - (0x) 0 (0x0) - (0x) 发现第3行的行偏移量被更改成了0,继续执行 dbcc page(repl_test,1,,2) goDATA: .. CC: f &#;........row 1 CC: f &#; ...........row CC: &#; 2 ......... CC: f &#;..row 3 .... CC0A0: 6f &#;.......row 4 CC0B0: f &#; ...........row CC0C0: 发现row3的记录还存在数据页中! 那么猜想,是否将第三行的行偏移量0x0修改回原来的0x8a就可以恢复记录了? 利用winHex工具,打开mdf文件,因为是页面,8* = 字节,所以的行偏移量应该在处,剩下的工作就很简单了 6.关闭数据库的数据页I/O保护机制,即设置page_verify数据库选项为none,并将repl_test 数据库设置为脱机,利用winhex找到repl_test.mdf文件的结尾处进制码 把repl_test数据库设置为脱机,用winhex工具找到页面的结尾处(页面的其实位置):

果然第3行的行偏移量为 ,那么我将其改回8A 后保存,并将数据库设置为online

记录被成功恢复。 如果不进行 则会读取表时发生页面校验错误。 那么如何找回记录又可以DBCC checkdb安全通过呢? 1.笨方法找回记录后将原表删除,损坏页面会被丢失,重新表,导入数据即可。 2.修改页眉校验,可惜小弟不才,还没研究页眉结构对应的物理进制关系。只靠修改前的页眉截图,修改后按照截图还原页眉,这里无法向大家说明白修改的地方。希望有经验或者有兴趣的朋友可以和我分享下,谢谢~ 如何释放堆中的空闲页面? 若要删除堆中的行并释放页,我们可以使用下列方法之一。 &#;在 DELETE 语句中指定 TABLOCK 提示。使用 TABLOCK 提示会导致删除操作获取表的共享锁,而不是行锁或页锁。这将允许释放页。 &#;如果要从表中删除所有行,请使用 TRUNCATE TABLE。 &#;删除行之前,请对堆创建聚集索引。删除行之后,可以删除聚集索引。与先前的方法相比,此方法非常耗时,并且使用更多的临时资源。 如果释放空闲页面空间,很有可能记录就无法再恢复了,同时说明数据库完整模式+日志备份是多么的重要,可以省去很多发杂的步骤 文笔不好,如果哪里看的模糊请留言。

推荐整理分享SQL Server简单模式下误删除堆表记录恢复方法(绕过页眉校验)(sql server使用教程),希望有所帮助,仅作参考,欢迎阅读内容。

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

文章相关热门搜索词:sqlserver简单模式日志,sql server简单语句,sql server简介,sql server简单语句,sql server实用教程,sqlserver简单模式 数据库正在恢复,sqlserver简单模式和完整模式,sqlserver简单模式和完整模式,内容如对您有帮助,希望把文章链接给更多的朋友!

SQLSERVER的非聚集索引结构深度理解 我们知道SQLSERVER的数据行的存储有两种数据结构:A:堆B:B树(binary二叉树)数据按照这种两种的其中一种来排序和存储,学过数据结构的朋友应该知

sql函数实现去除字符串中的相同的字符串 ---去除字符串中重?偷闹岛?createfunctionStringRemove(@strnvarchar())returnsvarchar()asbegindeclare@resultnvarchar(),@tempnvarchar()set@result=''set@temp=''while(charindex(',',

获取数据库中两个时间字段的相差天数及ABS/DATEDIFF函数应用 SELECTABS(DATEDIFF(dd,EndDate,BeginDate))FROMdbo.WorkingPlan其中,WorkingPlan为一张表,EndDate和BeginDate为WorkingPlan表中的结束时间和开始时间如果哪里有不正确的地方

标签: sql server使用教程

本文链接地址:https://www.jiuchutong.com/biancheng/347856.html 转载请保留说明!

上一篇:SQLSERVER编译与重编译发生场景及重用的利弊介绍(sql语句编译执行过程)

下一篇:SQLSERVER的非聚集索引结构深度理解(mysql 非聚集索引)

  • 浙江税务网上办税大厅官网
  • 发票没有纳税人识别号怎么重开
  • 确认固定资产减值损失
  • 银行代发工资必须交社保吗
  • 个人独资企业可以核定征收吗
  • 小规模纳税人每个季度超过了30万怎么办
  • 合伙企业季度所得税预缴不用纳税调整是吗
  • 业务往来说明范本
  • 向银行申请签发银行汇票的会计分录
  • 房产税从租计征12%是年税率吗
  • 非独立核算分公司个税怎么申报
  • 仓储费和仓储服务费的区别
  • 营业费用率说明什么
  • 资产负债表应交税费从哪取数
  • 住房按揭贷款贷后检查内容
  • 分公司帮总公司付款怎么做分录
  • 广告制作需要交文化建设费吗
  • 房屋租赁发票可以抵扣增值税吗
  • 银行本票通俗
  • 佣金可以直接转到个人账户吗
  • 一般纳税人在国家电子税务局里面如何添加银行账户
  • 工程结算科目属于哪一类
  • 还在讨论“税务金四”上线?税务和银行要联手清查单位和个人账户了!
  • 个人所得税未缴算偷税吗
  • 去年的成本今年入账会计分录
  • 简易计税分包款进项税可以抵扣吗
  • 样品寄送时运费支付的对策
  • 怎么限制路由器使用人数
  • 调账的基本原则
  • 个人所得税租房和房贷只能二选一吗
  • 收购自然人股东的股权要注意什么
  • 荣耀x10的鸿蒙系统怎么开启
  • 数字证书费用计入管理费用什么科目
  • 苹果手机清理内存怎么清理微信内存
  • 外贸企业代理出口销售的出口退税手续由谁办理
  • 苹果客服人工24小时
  • 售后回购怎么做账务处理
  • 建筑公司结算会计
  • 应付职工薪酬年末结转到哪个科目
  • vue生成二维码分享
  • 本年利润的会计科目
  • 计提的福利费怎么处理
  • 分公司改为子公司的所得税业务处理?
  • 公司可以不再提取法定公积金
  • mkdir命令怎么用
  • uni-app入门到实战 以项目为导向
  • python3.9怎么清屏
  • 其他应收款检查表怎么填
  • 增值税普票遗失可否用复印件入账
  • 工程公司项目管理部管理制度
  • 固定资产折旧范围口诀
  • 股东的投资款能转为借款
  • 差额征税可以开专票抵扣吗
  • 预扣预缴和汇算清缴是什么意思
  • sqlserver2005简介
  • 专项应付款的会计处理
  • 企业在建工程领用自产应税消费品成本为10000元
  • 附加税的计税依据是增值税实际缴纳税款吗
  • 企业营业利润率怎么算
  • 党委费用支出需要什么票据
  • 饭店卖烟酒需要什么手续
  • 公司电子发票报销
  • 深入sql编程开发与优化
  • sqlserver 触发器 if 后边没执行
  • bios设置网卡开启
  • macbook的qq怎么更换背景
  • win10通过任务管理器打开设置
  • window10h2
  • 十个常用linux脚本命令
  • linux ssh默认端口
  • win8.1系统更新
  • 噩梦像连续剧
  • javascript中的类型转换
  • js金额加减
  • python datetime.now
  • 税务局分类分级
  • 滴滴收入统计
  • 税务分局长级别
  • 企业年度申报怎么修改
  • 保税区社会车辆能进吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设