本文主要介绍sqlserver如何恢复数据(sql server bak恢复),下面一起看看sqlserver如何恢复数据(sql server bak恢复)相关资讯。
最近几天,该公司 s的维护人员经常找我恢复数据库,因为他们总是缺乏约束,导致更新删除不可挽回的后果,再加上那些库中的几十个g,恢复起来也就十几分钟。所以,找一些资料和工作总结,一些快速恢复的方法,不是图书馆,但是要记住,这比好的预防要好。在生产环境或者开发环境中,经常会有一些非常重要的表,存储着核心数据。当这些桌子损坏时,需要尽快修复。然而,正式环境中的数据库通常非常大。统计数据显示,1t数据库的恢复时间接近24小时,因此恢复数据库中的一个表不仅在时间上,而且在空间上都是一个很大的挑战。本文描述了如何在不恢复整个库的情况下恢复单个表。现在假设有一个表:test_table,我们需要尽快恢复这个表,并尽量减少对其他表和用户的恢复过程的影响。sqlserver(尤其是2008年以后)有很多备份和恢复功能:完成、部分文件、差异、事务备份。恢复模式的选择严重影响备份策略和备份类型。以下是几个选项供参考,但请记住每一个都有好有坏,要根据实际需要选择:方案一:恢复到不同的数据库:这是一个小型数据库恢复备份新库的好方法,同步新数据库表中的数据。你可以完全恢复,或者说恢复一段时间。但是对于大型数据库来说,非常耗时,消耗磁盘空间。此方法仅用于恢复数据。当您还原数据(即数据同步)时,您应该考虑触发器、外键等因素。方案二:使用stopat恢复日志:您可能希望恢复最新的数据库备份,回滚到某个时间点,即事故发生前的某个时间点,此时可以在子句中使用,但前提是必须使用完整或批量日志恢复模式。下面是一个例子:从数据库备份文件中恢复需要恢复的数据库= 3,restore;需要恢复日志的数据库是从数据库file = 4,22,2012 = ;oct norecovery,凌晨02 : 00;还原数据库需要还原数据库;注意:这种方法的主要缺点是覆盖所有数据是从修改的数据开始的一个指定的时间点。所以一定要权衡得失。场景3:数据库快照:创建数据库快照。当事故发生时,可以直接从快照中获取原始数据。但肯定是快照前制造的事故。这在核心表中不经常更新,尤其是在提供定期更新时。但是这种方法不可取,表不定期更新,定期访问或者被很多用户访问。当你需要的时候要使用此方法,请记住每次更新时都要创建快照。方案四:使用视图:可以新建一个数据库,将test_table移入库中。需要恢复的时候,只需要恢复这个非常小的数据库,就可以访问源数据库的数据。最简单的方法是创建一个视图,并选择test_table表的所有列中的数据。但请注意,这种方法需要在创建视图前重命名或删除源数据库表:使用需要恢复的数据库;从备份数据库中创建视图test_table as * select。building name.test _ table;要使用这种方法,可以使用选择/插入/更新/删除视图的语句,看起来是直接操作的实体表。当test_table更改时,sp_refreshview使用存储过程更新元数据。方案5:创建同义词(synonyms):与方案4类似,将表移动到另一个数据库,然后在源数据库中为表创建同义词:使用需要恢复的数据库;转到test_table创建一个新的同义词数据库。building name.test _ table;转到方案6:用bcp保存数据:可以用bcp创建一个作业并定期导出数据,但这种方法的缺点与方案1类似。它需要找一天 s文件并指导它,同时考虑触发器和外键。各种方法的比较:这种方法的要点是你不 不需要担心元数据更新引起的不及时的结构变化。但是这种方法的问题是你可以 不要在ddl语句中引用同义词,或者你可以 找不到与服务器的连接。恢复数据库的方法优缺点对于小酷来说,快速简单,需要注意的触发器、外键等恢复日志可以指定时间点,所有时间点之后的新数据都会被覆盖。当表不定期更新时,数据库快照非常有用。并行更新表时,快照容易出现问题。视图表的数据与库分离,没有数据丢失。元数据需要定期更新,新的数据库需要定期维护。同义词表的数据从库中分离出来,没有数据丢失。它在链接服务器上不可用,并且会定期维护一个新的数据库。bcp表、额外空格、触发器、外键等的特殊备份。总结:良好的编程习惯和好的备份机制才是解决问题的根本,以上措施只是一种补救措施。有人可能会说sqlserver新版本不是部分恢复。让 s来看看网上系列的解释:如你所见,用其他方法恢复一个表很难,但是在库比较小的时候可以试试。
了解更多sqlserver如何恢复数据(sql server bak恢复)相关内容请关注本站点。
