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