iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server数据恢复准备之TRUNCATE TABLE理解
  • 582
分享到

SQL Server数据恢复准备之TRUNCATE TABLE理解

2024-04-02 19:04:59 582人浏览 安东尼
摘要

当truncate table发生时,如何进行恢复,相信大部分人都会选择通过还原备份到truncate table前,然后将数据重新导入正式表中。那么在SQL Server中是不是真的只有这种方法呢,当然不

当truncate table发生时,如何进行恢复,相信大部分人都会选择通过还原备份到truncate table前,然后将数据重新导入正式表中。

那么在SQL Server中是不是真的只有这种方法呢,当然不是,这也是本文即将介绍的内容,前提条件是sql Server完整恢复模式(大容量日志模式未做测试,暂不介绍)。

首先,了解一下truncate table的一些相关知识

官档:

TRUNCATE TABLE 通过释放用于存储表数据的数据页删除数据,且仅在事务日志中记录页释放。

这句话包含的信息量是很大的,通过实验进行验证,解释如下:

truncate table时,数据库日志中不会记录确切的已删除值,只记录截断记录的页的ID,并且这些记录所占用的空间会被标识为可重写,

mdf中会暂时保留这些页内的数据,当有新事务写入这些页时,truncate table的数据将会被覆盖(数据页被fORMat,然后重新使用)。

测试:

创建一张表,并插入数据

create table test_truncate(id int,name varchar(20),address varchar(20))
Go
insert into test_truncate select 1,'zhangsan','first road'
go
insert into test_truncate select 2,'wangxiao','second road'
go

利用dbcc ind找到该表的数据页,如下PageType=1为数据页,即为:288

SQL Server数据恢复准备之TRUNCATE TABLE理解

使用dbcc page查看数据页内容


PAGE: (1:288)
BUFFER:
BUF @0x000000000563C600
bpage = 0x0000000150020000          bhash = 0x0000000000000000          bpageno = (1:288)
bdbid = 9                           breferences = 0                     bcputicks = 0
bsampleCount = 0                    bUse1 = 56673                       bstat = 0x10b
blog = 0x7adb21cc                   bnext = 0x0000000000000000          
PAGE HEADER:
Page @0x0000000150020000
m_pageId = (1:288)                  m_headerVersion = 1                 m_type = 1
m_typeFlagBits = 0x0                m_level = 0                         m_flagBits = 0x8000
m_objId (AllocUnitId.idObj) = 489   m_indexId (AllocUnitId.idInd) = 256 
Metadata: AllocUnitId = 72057594069975040                                
Metadata: PartitionId = 72057594062241792                                Metadata: IndexId = 0
Metadata: ObjectId = 935674381      m_prevPage = (0:0)                  m_nextPage = (0:0)
pminlen = 8                         m_slotCnt = 2                       m_freeCnt = 8021
m_freeData = 167                    m_reservedCnt = 0                   m_lsn = (49:7380:2)
m_xactReserved = 0                  m_xdesId = (0:0)                    m_ghostRecCnt = 0
m_tornBits = 0                      DB Frag ID = 1                      
Allocation Status
GAM (1:2) = ALLOCATED               SGAM (1:3) = ALLOCATED              
PFS (1:1) = 0x61 MIXED_EXT ALLOCATED  50_PCT_FULL                        DIFF (1:6) = CHANGED
ML (1:7) = NOT MIN_LOGGED           
Slot 0 Offset 0x60 Length 35
Record Type = PRIMARY_RECORD        Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 35                    
Memory Dump @0x000000006DDF8060
0000000000000000:   30000800 01000000 03000002 00190023 007a6861  0..............#.zha
0000000000000014:   6e677361 6e666972 73742072 6f6164             ngsanfirst road
Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4
id = 1                              
Slot 0 Column 2 Offset 0x11 Length 8 Length (physical) 8
name = zhangsan                     
Slot 0 Column 3 Offset 0x19 Length 10 Length (physical) 10
address = first road                
Slot 1 Offset 0x83 Length 36
Record Type = PRIMARY_RECORD        Record Attributes =  NULL_BITMAP VARIABLE_COLUMNS
Record Size = 36                    
Memory Dump @0x000000006DDF8083
0000000000000000:   30000800 02000000 03000002 00190024 0077616e  0..............$.wan
0000000000000014:   67786961 6f736563 6f6e6420 726f6164           gxiaosecond road
Slot 1 Column 1 Offset 0x4 Length 4 Length (physical) 4
id = 2                              
Slot 1 Column 2 Offset 0x11 Length 8 Length (physical) 8
name = wangxiao                     
Slot 1 Column 3 Offset 0x19 Length 11 Length (physical) 11
address = second road               
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

可以看到数据页中存在的记录

Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4
id = 1                              
Slot 0 Column 2 Offset 0x11 Length 8 Length (physical) 8
name = zhangsan                     
Slot 0 Column 3 Offset 0x19 Length 10 Length (physical) 10
address = first road  

Slot 1 Column 1 Offset 0x4 Length 4 Length (physical) 4
id = 2                              
Slot 1 Column 2 Offset 0x11 Length 8 Length (physical) 8
name = wangxiao                     
Slot 1 Column 3 Offset 0x19 Length 11 Length (physical) 11
address = second road

执行truncate table后

SQL Server数据恢复准备之TRUNCATE TABLE理解

可以看到数据页中仍保留着truncate table的相关记录。

那么,truncate table的第二种恢复方法就显而易见了,在这些数据被覆盖之前,从页面中将数据提取出来,并恢复到表中。


您可能感兴趣的文档:

--结束END--

本文标题: SQL Server数据恢复准备之TRUNCATE TABLE理解

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

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

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

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

下载Word文档
猜你喜欢
  • SQL Server数据库之备份和恢复数据库
    目录1. 概述2. 备份类型3. 恢复模式3.1 简单恢复模式3.2 完全恢复模式和大容量日志恢复模式4. 备份数据库5. 恢复数据库1. 概述 在一些对数据可靠性要求很高的行业,若发生意外停机或数据丢失,其损失是十分惨...
    99+
    2023-03-23
    数据库的备份方法 数据库的恢复方式
  • Navicat怎样恢复SQL server的数据库备份
    这篇文章主要介绍Navicat怎样恢复SQL server的数据库备份,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!打开Navicat for MySQL,在左侧激活数据连接,激活数...
    99+
    2024-04-02
  • SQL Server中怎么实现数据库恢复备份
    今天就跟大家聊聊有关SQL Server中怎么实现数据库恢复备份,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。第一种方法:通常我们采用恢复备份的方式...
    99+
    2024-04-02
  • SQL Server 中如何恢复数据库
    本篇文章给大家分享的是有关SQL Server 中如何恢复数据库,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、在SQL Server Ma...
    99+
    2024-04-02
  • SQL Server和MySQL的数据备份与恢复策略对比。
    SQL Server和MySQL是目前最常用的关系型数据库管理系统之一。在日常的数据库管理中,数据备份与恢复是非常重要的。本文将对SQL Server和MySQL的数据备份与恢复策略进行对比,并提供相应的代码示例。一、数据备份策略SQL S...
    99+
    2023-10-22
    数据恢复 数据备份 策略对比
  • SQL Server数据库崩溃后怎么恢复
    这篇文章主要讲解了“SQL Server数据库崩溃后怎么恢复”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server数据库崩溃后怎么恢复”吧!任何...
    99+
    2024-04-02
  • 如何恢复XenServer服务器SQL Server数据库数据
    这篇文章主要讲解了“如何恢复XenServer服务器SQL Server数据库数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何恢复XenServer服务器SQL S...
    99+
    2023-06-29
  • Mysql数据库之备份和恢复
     一、为什么要数据备份?   备份的主要目的是灾难恢复。 在生产环境中,数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因: 程序错误人为,操作错误,运算错误,磁盘故障灾难(如火灾、地震)和盗窃. 二、...
    99+
    2023-09-15
    数据库 mysql
  • SQL Server数据库中有哪些恢复模式
    SQL Server数据库中有哪些恢复模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.Simple 简单恢复模式,Sim...
    99+
    2024-04-02
  • 如何配置SQL Server数据库恢复模式
    如何配置SQL Server数据库恢复模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。下面主要介绍配置SQL Server数据库恢复模式...
    99+
    2024-04-02
  • SQLServer数据库之备份和恢复数据库
    目录1. 概述2. 备份类型3. 恢复模式3.1 简单恢复模式3.2 完全恢复模式和大容量日志恢复模式4. 备份数据库5. 恢复数据库1. 概述 在一些对数据可靠性要求很高的行业,若...
    99+
    2023-03-23
    数据库的备份方法 数据库的恢复方式
  • Sql Server数据库文件丢失要怎么恢复
    这篇文章主要讲解了“Sql Server数据库文件丢失要怎么恢复”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Sql Server数据库文件丢失要怎么恢复”...
    99+
    2024-04-02
  • 如何用PL/SQL备份与恢复数据库
    备份数据库: 创建一个脚本来执行备份操作,例如: CREATE OR REPLACE PROCEDURE backup_datab...
    99+
    2024-05-08
    PL/SQL
  • 怎么恢复SQL Server 2000损坏的数据库文件
    这篇文章主要讲解了“怎么恢复SQL Server 2000损坏的数据库文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么恢复SQL Server 200...
    99+
    2024-04-02
  • 怎么通过日志恢复SQL Server的历史数据
    这篇文章主要讲解了“怎么通过日志恢复SQL Server的历史数据”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么通过日志恢复SQL Server的历史数...
    99+
    2024-04-02
  • sql server中怎么通过查询分析器实现数据库备份与恢复
    这篇文章将为大家详细讲解有关sql server中怎么通过查询分析器实现数据库备份与恢复,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。sql server的...
    99+
    2024-04-02
  • 碎片拼接技术恢复XenServer服务器SQL Server数据库数据
    目录1、数据恢复方案一2、数据恢复方案二​环境:​ Dell PowerEdge服务器;XenServer虚拟化平台;4块希捷2T STAT硬盘用RAID卡组成的RAID10;Xen...
    99+
    2024-04-02
  • sql数据库备份和恢复数据的方法有哪些
    SQL数据库备份和恢复数据的方法有以下几种:1. 使用数据库管理工具:大多数数据库管理工具提供了备份和恢复数据库的功能,用户可以通过...
    99+
    2023-09-09
    sql数据库
  • MySQL怎么用SQL语句备份和恢复表数据
    本篇内容介绍了“MySQL怎么用SQL语句备份和恢复表数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&...
    99+
    2024-04-02
  • Atlas如何处理数据备份和恢复
    Atlas提供了自动备份和快照功能,用户可以通过控制台或API来管理备份和恢复数据。用户可以设置备份频率和保留时间,以确保数据的安全...
    99+
    2024-03-08
    Atlas
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作