共计 4137 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 SQL Server 2008 数据备份与还原的示例分析,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、恢复模式
右键数据库属性 – 选项 – 可以看到“恢复模式”,SQL Server 2008 数据库恢复模式分为三种:完整恢复模式、大容量日志恢复模式、简单恢复模式,如下图。
完整恢复模式
为默认恢复模式。它会完整记录下操作数据库的每一个步骤。使用完整恢复模式可以将整个数据库恢复到一个特定的时间点,这个时间点可以是最近一次可用的备份、一个特定的日期和时间或标记的事务。
大容量日志恢复模式
简单地说就是要对大容量操作进行最小日志记录,节省日志文件的空间(如导入数据、批量更新、SELECT INTO 等操作时)。比如一次在数据库中插入数十万条记录时,在完整恢复模式下每一个插入记录的动作都会记录在日志中,使日志文件变得非常大,在大容量日志恢复模式下,只记录必要的操作,不记录所有日志,这样一来,可以大大提高数据库的性能,但是由于日志不完整,一旦出现问题,数据将可能无法恢复。因此,一般只有在需要进行大量数据操作时才将恢复模式改为大容量日志恢复模式,数据处理完毕之后,马上将恢复模式改回完整恢复模式。
简单恢复模式
在该模式下,数据库会自动把不活动的日志删除,因此简化了备份的还原,但因为没有事务日志备份,所以不能恢复到失败的时间点。通常,此模式只用于对数据库数据安全要求不太高的数据库,并且在该模式下,数据库只能做完整和差异备份。
可以看出三种恢复模式的区别在于对“日志”的处理方式不同,就“日志”大小来看:完全恢复模式 大容量日志恢复模式 简单恢复模式。
2、备份方式
SQL Server 2008 提供了四种备份方式:完整备份、差异备份、事务日志备份、文件和文件组备份。
完整备份
备份整个数据库的所有内容,包括事务日志。该备份类型需要比较大的存储空间来存储备份文件,备份时间也比较长,在还原数据时,也只要还原一个备份文件。
差异备份
差异备份是完整备份的补充,只备份上次完整备份后更改的数据。相对于完整备份分来说,差异备份的数据量比完整数据备份小,备份的速度也比完整备份要快。因此,差异备份通常作为常用的备份方式。在还原数据时,要先还原前一次做的完整备份,然后还原 *** 一次所做的差异备份,这样才能让数据库里的数据恢复到与 *** 一次差异备份时的内容相同。
事务日志备份
事务日志备份只备份事务日志里的内容。事务日志记录了上一次完整备份或事务日志备份后数据库的所有变动过程。事务日志记录的是某一段时间内的数据库变动情况,因此在进行事务日志备份之前,必须要进行完整备份。与差异备份类似,事务日志备份生成的文件较小、占用时间较短,但是在还原数据时,除了先要还原完整备份之外,还要依次还原每个事务日志备份,而不是只还原 *** 一个事务日志备份(这是与差异备份的区别)。
文件和文件组备份
如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。使用文件和文件组备份方式可以只备份数据库中的某些文件,该备份方式在数据库文件非常庞大时十分有效,由于每次只备份一个或几个文件或文件组,可以分多次来备份数据库,避免大型数据库备份的时间过长。另外,由于文件和文件组备份只备份其中一个或多个数据文件,当数据库里的某个或某些文件损坏时,可能只还原损坏的文件或文件组备份。
3、举例说明
完整备份
例如,在 2012 年 1 月 1 日早上 8 点进行了完整备份,那么将来在还原时,就可以恢复到 2012 年 1 月有 1 日早上 8 点时的数据库状态。
差异备份
差异备份是备份完整备份后的数据变动情况。例如,在 2012 年 1 月 1 日早上 8 点进行了完整备份后,在 1 月 2 日和 1 月 3 日又分别进行了差异备份,那么在 1 月 2 日的差异备份里记录的是从 1 月 1 日到 1 月 2 日这一段时间里的数据变动情况,而在 1 月 3 日的差异备份里记录的是从 1 月 1 日到 1 月 3 日这一段时间里的数据变动情况。因此,如果要还原到 1 月 3 日的状态,只要先还原 1 月 1 日做的完整备份,再还原 1 月 3 日做的差异备份就可以了。
事务日志备份
事务日志备份是以事务日志文件作为备份对象,相当于将数据库里的每一个操作都记录下来了。假设在 2012 年 1 月 1 日早上 8 点进行了完整备份后,到 1 月 2 日早上 8 点为止,数据库里的数据变动了 100 次,如果此时做了差异备份,那么差异备份记录的是第 100 次数据变动后的数据库状态,而如果此时做了事务日志备份,备份的将是这 100 次的数据变动情况。
再举一个例子,例如在 2012 年 1 月 1 日早上 8 点进行了完整备份后,在 1 月 2 日和 1 月 3 日又进行了事务日志备份,那么在 1 月 2 日的事务日志备份里记录的是从 1 月 1 日到 1 月 2 日这一段时间里的数据变动情况,而在 1 月 3 日的事务日志备份里记录的是从 1 月 2 日到 1 月 3 日这一段时间里的数据变动情况。因此,如果要还原到 1 月 3 日的数据,需要先还原 1 月 1 日做的完整备份,再还原 1 月 2 日做的事务日志备份,*** 还要还原 1 月 3 日所做的事务日志备份。
4、备份方式的选择
了解了以上数据库备份方式后,便可以针对自己的数据库利用以上方式来备份数据库了。合理备份数据库需要考虑几方面,首先是数据安全,其次是备份文件大小,*** 是做备份和还原能承受的时间范围。
数据变动量较小
例如,如果数据库里每天变动的数据量很小,可以每周(周日)做一次完整备份,以后的每天(下班前)做一次事务日志备份,那么一旦数据库发生问题,可以将数据恢复到前一天(下班时)的状态。
当然,也可以每周(周日)做一次完整备份,以后的每天(下班前)做一次差异备份,这样一旦数据库发生问题,同样可以将数据恢复到前一天下班时的状态。只是一周的后几天做差异备份时,备份的时间和备份的文件都会跟着增加。但这也有一个好处,在数据损坏时,只要恢复完整备份的数据和前一天差异备份的数据即可,不需要去恢复每一天的事务日志备份,恢复的时间会比较短。
数据变动量较大
如果数据库里的数据变动得比较频繁,损失一个小时的数据都是十分严重的损失时,用上面的办法备份数据就不可行了,此时可以交替使用三种备份方式来备份数据库。
例如,每天下班时做一次完整备份,在两次完整备份之间每隔八小时做一次差异备份,在两次差异备份之间每隔一小时做一次事务日志备份。如此一来,一旦数据损坏可以将数据恢复到最近一个小时以内的状态,同时又能减少数据库备份数据的时间和备份数据文件的大小。
数据库文件较大
在前面还提到过当数据库文件过大不易备份时,可以分别备份数据库文件或文件组,将一个数据库分多次备份。在现实操作中,还有一种情况可以使用到数据库文件的备份。例如在一个数据库中,某些表里的数据变动得很少,而某些表里的数据却经常改变,那么可以考虑将这些数据表分别存储在不同的文件或文件组里,然后通过不同的备份频率来备份这些文件和文件组。但使用文件和文件组来进行备份,还原数据时也要分多次才能将整个数据库还原完毕,所以除非数据库文件大到备份困难,否则不要使用该备份方式。
尾部日志备份
针对以上备份方案,能看出数据还是不完整吗?比如昨天夜间 12 点做了完整备份,每隔一小时做了一次事务日志备份,*** 一次事务日志备份是今天中午 12 点,现在是今天中午 12 点 10 分,发现数据库数据遭到丢失或破坏,可 *** 一次事务日志备份是今天中午 12 点,如果我此时将数据库恢复到 12 点,那么 12 点后至 12 点 10 分前没遭到破坏的操作数据将丢失(比如数据库有三个表,一个表的数据遭到破坏,其它两个表的数据被其它用户变动)。此时就要用到【尾部日志备份】,尾部日志备份原理是从 *** 一次事务日志备份的时间点开始,将之后的所有操作进行备份,还原时便可以找到 12 点后操作的正确数据了。
注:进行尾部日志备份时,数据库将强制停止数据库,此时如果不停止数据库,还有用户继续操作,尾部日志备份将失去意义。SQL Server 2012 如果你 *** 一次备份事务日志后,对数据进行过改动,即发生过事务日志(也就是当前日志文件记录的 LSN(日志序列号) 大于 *** 一次事务日志备份里记录的 ***LSN,SQL Server 通过 LSN 来区分日志的记录),并尚未对尾部日志备份,它会提示并要求你必须先做尾部备份。
5、示例操作
首先进行完整备份【MyTest.bak】,然后再基于此备份文件 进行两次事务日志备份,*** 一次事务日志备份时间为【2012-8-4 23:07】。下图:备份文件名为【MyTest.bak】,*** 一次事务日志备份时间为【2012-8-4 23:07】
下图:选择备份文件“MyTest.bak”后,此时能看到“要还原的备份集”列表里显示有备份文件,分别列出了完整备份文件和两次事务日志备份。
以上备份文件 *** 一次事务日志备份时间为【2012-8-4 23:07】,那么,您可以还原到自 *** 完整备份开始后,至 *** 一次事务日志备份时间期间的任何一个时间点,这就充分验证上上文讲到的事务日志备份方式(如果后期进行过尾部日志备份,还原时在“要还原的备份集”列表里的 *** 一行会列出尾部日志记录)。
如果事务日志备份有两次,分别是“事务日志 1”、“事务日志 2”,那么在还原时去掉“事务日志 1”复选框,“事务日志 2”也会自动去掉,但只去掉“事务日志 2”是允许的,这也充分验证了上文讲到的:“在还原数据时,除了先要还原完整备份之外,还要依次还原每个事务日志备份,而不是只还原 *** 一个事务日志备份”,不同于差异备份可以基于完整备份,只还原 *** 一次差异备份即可。
若在【2012-08-04 23:36:53】插入一条数据,【2012-08-04 23:37:44】又做了一次事务日志备份 3,然后再将时间点还原到【2012-08-04 23:36:00】,还原后,此时间点后的数据就没有了。
【注意:在还原时会提示数据库正在使用,一般要断开全部连接后,才能进行还原。我一般使用脚本将数据脱机再联机,所有连接将会全部断开】
关于“SQL Server 2008 数据备份与还原的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。