SQLServer无需Restore恢复误删表(一):恢复表结构
admin
2023-02-08 17:40:04
0次

最近在研究《Microsoft SQL Server 2012 Internals》这本书,考虑到如何快速恢复误操作数据,如UPDATE、DELETE、TRUNCATE、DROP等操作。当数据库特别大的时候,通过还原数据库恢复误操作数据就会变得非常吃力。

那么如何在不restore database的情况下,快速进行数据恢复呢。这也将是本文将要提到的内容。


首先,简单了解下DROP TABLE操作的原理

1. 删除表的DDL

2. 删除数据页数据


通过分析Transaction Log可知,drop table并不会记录删除每一行数据的日志,drop table最终是通过标记该表数据页为可重写以表示释放空间(当空间不够时,会format掉这些数据页),

当数据库空间不足时,SQL Server可对这部分空间进行数据写入。


因此,我们想要在不restore database情况下恢复数据,就得确保drop table后表的数据页没有被format。一旦数据页被format,那么只能通过restore database方式进行恢复(目前尚未找到其他的恢复方法)。


以下为恢复表结构语句的实例

1. 建表

create table test_drop(
col1  tinyint,
col2  smallint,
col3  int identity(1,1),
col4  bigint,
col5  varchar(20),
col6  char(20),
col7  nvarchar(20),
col8  nchar(20),
col9  datetime,
col10 timestamp,
col11 uniqueidentifier,
col12 sysname,
col13 numeric(10,2),
col14 xml,
col15 money,
col16 text
)


2. 删除表

drop table test_drop


3. 恢复被删除的表结构语句

exec Recover_Dropped_Table_DDL_Porc 'test_drop'

SQLServer无需Restore恢复误删表(一):恢复表结构


生成恢复语句如下:

if object_id('dbo.test_drop') is not null
    print  'dbo.test_drop is existed'
else
create table dbo.test_drop(col1 tinyint null 
,col2 smallint null 
,col3 int identity 
,col4 bigint null 
,col5 varchar(20) collate SQL_Latin1_General_CP1_CI_AS null 
,col6 char(20) collate SQL_Latin1_General_CP1_CI_AS null 
,col7 nvarchar(20) collate SQL_Latin1_General_CP1_CI_AS null 
,col8 nchar(20) collate SQL_Latin1_General_CP1_CI_AS null 
,col9 datetime null 
,col10 timestamp not null 
,col11 uniqueidentifier null 
,col12 sysname collate SQL_Latin1_General_CP1_CI_AS not null 
,col13 numeric(10,2) null 
,col14 xml null 
,col15 money null 
,col16 text collate SQL_Latin1_General_CP1_CI_AS null 
)



相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...