首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQLServer回复表级数据

2013-01-06 
SQLServer恢复表级数据最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致up

SQLServer恢复表级数据

       最近几天,公司的技术维护人员频繁让我恢复数据库,因为他们总是少了where条件,导致update、delete出现了无法恢复的后果,加上那些库都是几十G。恢复起来少说也要十几分钟。为此,找了一些资料和工作总结,给出一下几个方法,用于快速恢复表,而不是库,但是切记,防范总比亡羊补牢好。

       在生产环境或者开发环境,往往都有某些非常重要的表。这些表存放了核心数据。当这些表出现数据损坏时,需要尽快还原。但是,正式环境的数据库往往都是非常大的,统计数据表明,1T的数据库还原时间接近24小时,所以因为一个表而还原一个库,不单空间,甚至时间上都是一个很大的挑战。本文介绍如何恢复单表,而不需要恢复整个库。

       现在假设一个表:TEST_TABLE。我们需要尽快恢复这个表,并且把恢复过程中对其他表和用户的影响降到最低。

       SQLServer(特别是2008以后),具有很多备份及恢复功能:完整、部分、文件、差异和事务备份。而恢复模式的选择严重影响备份策略和备份类型。

       下面是几个可供参考的方案,但是记住,各有好坏,应该按照实际需要选择:


方案1:恢复到一个不同的数据库:        这对于小数据库来说不失为一种好的办法,用备份还原一个新的库,并把新库中的表数据同步回去。你可以做完整恢复,或者时间点恢复。但是对于大数据库,是非常耗时和耗费磁盘空间的。这个方法仅仅用于还原数据,在还原数据(就是同步数据)的时候,你要考虑触发器、外键等因素。


方案2:使用STOPAT来还原日志:

       你可能想恢复最近的数据库备份,并回滚到某个时间点,即发生意外前的某个时刻。此时可以使用STOPAT子句,但是前提是必须为完整或大容量日志恢复模式。下面是例子:

方法优点缺点还原数据库快且容易适用于小库,且要注意触发器和外键等还原日志能指定时间点所有时间点后的新数据会被覆盖数据库快照当表不是经常更新时很有用当表并行更新时,快照容易出现问题视图把表的数据于库分开,没有数据丢失元数据需要周期性更新,并要定期维护新数据库同义词把表的数据于库分开,没有数据丢失在链接服务器上不能用,并要定期维护新数据库BCP拥有表的专用备份需要额外的空间、还会出现触发器、外键等问题
总结:

        良好的编程习惯和良好的备份机制才是解决问题的根本,以上的措施都仅仅是一个亡羊补牢的办法。可能有人说SQLServer 新版本不是有部分还原吗?我们来看看联机丛书的说明:

SQLServer回复表级数据

可以看到,其他这种方法很难还原一个表,但是当库小的时候,倒可以试试。

热点排行