如何单独恢复SQL server数据库文件组
这存在一个具体例子:可能您存在一个单个的出现疑问的文件。这样的文件存在50MB大小,而您的整个数据库 运行着大约存在几十亿的字节,这种的话可能能恢复单个失败文件的话就显的相当存在意义。这种的事情发生 的一个情景是当文件或者文件组在单独的驱动器上,而驱动器出现了疑问。一般,仅仅恢复单个文件或者 文件组会使总的停止时间缩短,因为它明显减少了就得恢复的总的数据量。
现在,为什么您不选择这么做呢?这存在多数原因:
您就得存在事务日志备份。可能您想参考备份中恢复一个文件或者文件组,您同时也就得恢复与它们一起 创建的事务记录备份,参考而使整个数据库可以处于一个一致的状态。在SQL Server 2000 和 2005中,您 就得使用Full Recovery或者Bulk-Logged Recovery模式(也可以说不可能Simple Recovery)来使它成为可以。我应该指出SQL Server的做的更好者们并无尽他们的努力来完成区分参考上一次备份一个文件或者文件组是 否可以被修改了的功能。可能无被改变,当事务记录是无什么需要的。可就是,具体的说,或者就得 事务记录备份的,可能您现在还无一个备份事务记录的恢复或者备份计划,当现在就创建一个吧。
在要恢复的文件或者文件组中的表格与数据库中别的的表格之间的数据不一致性成为就得考虑的一个 疑问。可能您存在相互之间依靠的表格,并且这一系列表格无被存储在一样的物理文件或者文件组中(这存在时 是不可避免的),仅仅恢复一个文件或者文件组可能会导致它与数据库别的部分不一样步。打个比方,您存在一个 表格被另一个表格用JOIN关联,并且这种JOIN使用了一个视图和存储过程,这时仅仅恢复一个而不恢复另 一个可能会存在疑问。
当您在数据库中只存在一个文件组。可能您的所存在的数据仅仅存储在一个文件或者文件组中,并且它又 不可能一个特别大的数据库时,会发生什么事情呢?那时恢复一个文件或者文件组的努力就变的无什么意 义了。
选择性的恢复文件或者文件组的主要原因是当恢复数据库很大,以至于恢复整个数据库的代价很大的 时候,促使对数据库的局部损坏的恢复成为可能。在一个相当小的轻量级的数据库里,和nonproduction 系统中,或者数据库中只存在一个文件组的时候,做的更好选择性的恢复功能就显的无太大的意义,因为这时 恢复整个数据库和恢复单个的文件或者文件组无什么太大的区别。
我找到大多数时候当人们想使用文件或者文件组恢复时,他们实际上是想把一个特定的表格恢复到先 前的一个点的时刻的状态。这在SQL Server中不可能一个显式支特的特性,可就是存在这么做的做法,倘如果您 不介意因为采取这种做法而就得手工的来管理可能产生的不一致(就想上面#2所说的)。可能您手边就存在一 个数据库备份的话,您可以简单的恢复那个备份,仅仅把它看作是一样数据库的不一样名字的实例。接着, 通过事务记录把数据库向前滚动到指定的点(可能就得这种做的话),接下来手工的把当前的数据库拷贝到目 标数据库中。
我个人可以实验过这种做法几次,可就是仅仅只存在一个表格无与一样数据库中的别的的表格存在很大的 关联。我使用的例子涉及了一个包含了留言版系统的聊天网站。我不得不经常恢复多数在留言版上被意外卸载 的消息,这一系列是自包含的:参考留言版表格的数据产生的唯一的JOINs是外部的而不可能内部的。所以,我可 以随意的更新表格因为我知道我不会促使那个表格与别的表格不一样步的。
在SQL Server 2000和它更高的版本中,当您做一个RESTORE操作的时候您可以使用PARTIAL子句,参考而 使仅仅就得的文件组数据被恢复。这作为一个时间和空间上的节约开销的措施是相当存在用的:您不就得进 行繁重的恢复所存在数据的工作,而仅仅只就得对一个表格进行操作。何况很可能也无足够的空间来进行 完全的恢复操作。