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 
)



相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...