【转】SQLServer恢复表级数据
时间:2022-03-14 03:39
最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致update、delete出现了无法恢复的后果,加上那些库都是几十G。恢复起来少说也要十几分钟。为此,找了一些资料和工作总结,给出一下几个方法,用于快速恢复表,而不是库,但是切记,防范总比亡羊补牢好。
在生产环境或者开发环境,往往都有某些非常重要的表。这些表存放了核心数据。当这些表出现数据损坏时,需要尽快还原。但是,正式环境的数据库往往都是非常大的,统计数据表明,1T的数据库还原时间接近24小时,所以因为一个表而还原一个库,不单空间,甚至时间上都是一个很大的挑战。本文介绍如何恢复单表,而不需要恢复整个库。
现在假设一个表:TEST_TABLE。我们需要尽快恢复这个表,并且把恢复过程中对其他表和用户的影响降到最低。
SQLServer(特别是2008以后),具有很多备份及恢复功能:完整、部分、文件、差异和事务备份。而恢复模式的选择严重影响备份策略和备份类型。
下面是几个可供参考的方案,但是记住,各有好坏,应该按照实际需要选择:
方法
优点
缺点
还原数据库
快且容易
适用于小库,且要注意触发器和外键等
还原日志
能指定时间点
所有时间点后的新数据会被覆盖
数据库快照
当表不是经常更新时很有用
当表并行更新时,快照容易出现问题
视图
把表的数据于库分开,没有数据丢失
元数据需要周期性更新,并要定期维护新数据库
同义词
把表的数据于库分开,没有数据丢失
在链接服务器上不能用,并要定期维护新数据库
BCP
拥有表的专用备份
需要额外的空间、还会出现触发器、外键等问题
可以看到,其他这种方法很难还原一个表,但是当库小的时候,倒可以试试。