DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 917|回复: 0
打印 上一主题 下一主题

[待整理] SQL Server块日志恢复

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 15:31:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL Server提供了三种恢复模型:简单,完全和块日志模型。这些模型为你从备份中重新存储数据库提供了各种层级的恢复。块日志恢复的优点包括对事务日志空间的最小要求,块操作的最好性能。虽然如此,仍需消息。它的一个缺点就是当你在备份文件中执行块日志的事务的时候,你无法进行某个时间点的恢复。

  在这篇贴士中,我将会解释你可能会想要选择块日志作为SQL Server恢复手段的环境,以及在这个模型下,你需要哪些步骤来对数据库进行重新存储。

  作为回顾,这里列举了各个恢复模型之间的区别:

  简单模型

  简单恢复模型只能允许你将数据恢复到最近的一次完全备份或者差别备份。事务日志备份不可用,因为事务日志的内容在每次数据库执行检查点的时候都被截断了。

  完全模型

  完全恢复模型可以使用完全备份,差别备份和事务日志备份来提供安全网来抵御完全的失败。因为它可以使用完全或者差别备份来进行重新存储,你就可以将数据库恢复到失败的那个点或者其它某个特定的时间点上去。所有的操作,包括块操作,例如SELECT INTO, CREATE INDEX和块载入数据,都是完全记录日志并可以恢复的。

  块日志

  块日志恢复模型可以提供预防失败的保护,提供最好的性能。为了获得更好的性能,只在最低限度上记录如下的操作,并不是可以完全恢复的:SELECT INTO, 块操作, CREATE INDEX,以及其它有关文字和图像的操作。在块日志恢复模型中,损坏的数据文件将会由于日志的不充分而导致手工完成redo的工作。此外,块日志恢复模型可以让数据库恢复到事务日志备份的结尾,只有当日志备份包含了块更改的时候。

  块日志的好处

  使用块日志恢复模型的一个主要的好处就是他最小化了事务日志所需要的空间,这样它就可以跟踪事务中的某个单个的操作。这一点在你的系统很大,你需要导入大量数据或者创建一个大索引的时候,非常有用。事务仍然被提交了,并且写入了你的数据文件,但是事务日志所需要的空间却没有完全恢复模型那么大。在测试中,你可以看到,插入数据仍然需要大量的事务日志空间,但是创建索引所需要的空间则小得多。

  根据SQL Server备份和恢复模型工作的方式,你可以选择将你的模型从完全恢复改变到块日志恢复,然后再在需要的时候,恢复到完全恢复模型,而不需要干扰年的事务日志备份。这可以让你在执行较大的块日志事务的时候,能够保证事务日志的规模在控制之内。

  要注意的一件事情就是事务写入事务日志备份的方式。如果在你的备份文件中有块日志事务,你就不能进行时间点的恢复。这也是你在处理重新存储的时候需要注意的最大的一件事情。当事务日志备份中存在块日志事务的时候,你必须重新存储整个事务日志。

  备份处理

  备份处理的工作方式一样,无论你的数据库是在完全还是块日志恢复模型。你仍然有选择使用完全、区别和事务日志备份的自由。命令也是完全相同的,如下所示:

  BACKUP DATABASE Test TO DISK='C:Test_full.BAK'

  BACKUP DATABASE Test TO DISK='C:Test_diff.BAK' WITH DIFFERENTIAL

  BACKUP LOG Test TO DISK='C:Test_log.TRN'

  事务日志备份需要注意的另外一件关键的事情就是事务日志备份文件的尺寸。如果你设置了你的数据库采用块日志恢复模型,并且执行了最低限度的日志事务,例如CREATE INDEX,你会看到事务日志自身并没有增大。但是当你执行的是事务日志备份语句的时候,悲愤文件就会变得非常大,因为所有为了重新存储你的数据库的语句所需要重放的数据都存下来了。

         重新存储过程

  重新存储的过程与重新存储的观点非常类似。一个区别就在于,如果你的事务日志备份文件包含了任何块日志事务的话,你就不能重新存储到某个时间点。如果你尝试使用时间点恢复,而事务日志备份中含有块日志活动,你就会遇到下面的错误信息:

Server: Msg 4327, Level 16, State 1, Line 1


  这个备份集合中的日志包含了最低限度的日志变更。时间点恢复是受到限制的。RESTORE会向前滚到日志的结尾,在不需要覆盖数据库的情况下。

  当数据库的设置为使用块日志恢复模型的时候,你可以使用如下命令来完成重新存储:(正如你看到的,这些命令同样也是与数据库使用的是完全或者块日志恢复无关的。)

  RESTORE DATABASE Test FROM DISK='CTest_full.BAK' WITH NORECOVERY

  RESTORE DATABASE Test FROM DISK='C:Test_diff.BAK' WITH NORECOVERY

  RESTORE LOG Test FROM DISK='C:Test_log.TRN' WITH RECOVERY

  你从使用块日志恢复中获得的实际好处是什么?这要看你的环境。如果你使用非常多的块插入语句,在批处理中随时地删除和重新创建索引,那么块日志恢复模型是一条可以走的路。如果你的环境正常,数据并不总是在变化中,完全恢复模型也是更好的选择。当你在做任何选择的时候,一个越简单的道路通常在以后会带来更多的烦恼,所以要明智地选择你的恢复模型,然后计划你的恢复过程。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-27 07:26 , 耗时 0.105359 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表