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 
)



相关内容

热门资讯

今日重大发现“悟空黑桃A怎么开... 网上科普关于“悟空黑桃A有没有挂”话题很是火热,小编也是针对悟空黑桃A作*弊开挂的方法以及开挂对应的...
今日重大发现“方片十三张有挂吗... 网上科普关于“方片十三张有没有挂”话题很是火热,小编也是针对方片十三张作*弊开挂的方法以及开挂对应的...
今日重大通报“万圣节消除大作战... 您好:万圣节消除大作战这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9784099】很多玩家在...
今日重大消息“乾坤互娱怎么装挂... 有 亲,根据资深记者爆料乾坤互娱是可以开挂的,确实有挂(咨询软件无需打开...
玩家最新攻略“响水麻将是不是有... 您好:响水麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
玩家最新攻略“福建天天开心有挂... 网上科普关于“福建天天开心有没有挂”话题很是火热,小编也是针对福建天天开心作*弊开挂的方法以及开挂对...
终于了解“威信茶楼有挂吗?”(... 家人们!今天小编来为大家解答威信茶楼透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很...
玩家攻略科普“山城麻将怎么装挂... 有 亲,根据资深记者爆料山城麻将是可以开挂的,确实有挂(咨询软件无需打开...
今日重大通报“新全游有没有挂?... 今日重大通报“新全游有没有挂?”(外卦神器下载)您好,新全游这个游戏其实有挂的,确实是有挂的,需要了...
终于明白“天酷牛牛是不是有挂?... 您好:天酷牛牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...