浅谈SQL SERVER表级数据恢复

2013-12-29 00:00:00闫爱涛
电脑知识与技术 2013年1期

摘要:在各种系统或应用不断发展的今天,为系统提供数据支持和服务的数据库地位与作用愈发的突出和重要了。随着数据库的运行,数据量的不断增加和数据的不断变化,数据库容量变得越来越大,数据也变得越来越复杂,数据库发生错误的概率和风险也变得比较高,虽然我们可以对数据库进行备份和恢复,但是这些动辄GB级或TB级的数据库恢复起来会造成大量时间和资源的浪费,甚至影响了相关业务工作的正常运行。为了能节省恢复时间降低资源浪费和减少损失,我们可以只对涉及到的数据库表级数据进行恢复,从而降低成本,提高效率。该文就是在SQL SERVER环境下,我对几种表级数据恢复的讨论和总结。

关键词:SQL SERVER;数据库;恢复

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)01-0020-02

在各行业企业应用系统的后台数据库中,往往都有某些非常重要的表。这些表存放了核心数据。当这些表出现数据错误或损坏时,比如,因为少了Where条件,导致Update、Delete出现了无法恢复的后果需要尽快还原。但是,正式环境的数据库往往都是非常大的,统计数据表明,1TB的数据库还原时间接近24小时,所以因为一个表而还原一个库,不单空间,甚至时间上都是一个很大的挑战。该文结合搜集资料和工作总结介绍几种表级恢复方案,而不需要恢复整个库。

本文讨论的是在SQL SERVER环境下进行的表级数据恢复,SQLServer(特别是2008以后),具有很多备份及恢复功能:完整、部分、文件、差异和事务备份。在SQL SERVER下我们定义了一个名为TEST的数据库,在TEST数据库下,现在有一个表:test_table。以test_table为对象,我们需要尽快恢复这个表,并且把恢复过程中对其他表和用户的影响降到最低。下面是几个可供参考的方案,但是记住,各有好坏,应该按照实际需要选择:

这个方法的优点就是你不需要担心元数据更新所带来的结构变更不及时。但是这个方法的问题就是不能在DDL语句中引用同义词,或者不能在链接服务器中找到。

方案6:使用BCP保存数据:

你可以创建一个作业,使用BCP定期导出数据。但是这种方法的缺点和方案1类似,需要找到哪天的文件并导进去,同时要考虑触发器和外键问题。

各种方法的对比:

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

以上介绍的方案能帮助我们更好更高效的进行数据的恢复,在实际的应用中能达到事半功倍的效果,具有较高的应用价值。但是良好的编程习惯和良好的备份机制才是解决问题的根本,以上的措施都仅仅是一个亡羊补牢的办法。

参考文献:

[1] 王雨竹,张玉花,张星.SQL SERVER2008数据库管理与开发教程[M].2版.北京:人民邮电出版社,2012.

[2] (美)尼尔森. SQL SERVER2008宝典[M]. 马振晗,任鸿,高宇辉,译.北京:清华大学出版社,2011.