sql server 备份和恢复小结

来源:互联网 发布:金蝶数据导出 编辑:程序博客网 时间:2024/06/07 10:06

花了点时间把我对备份和恢复的理解总结如下:

1、  完整备份:

a)        备份数据库中包含数据的所有页,由于不含数据的页不包含到备份中,所以,备份永远不会大于创建备份的数据库,它是恢复数据库的基础,要想使用差异或着事务日志备份,首先必须存在这个备份。

b)        创建数据库后,最好立即做一次全备份,否则在完全恢复模式下的log还会以简单模式进行工作。由于备份过程和页的顺序无关,所以可以多线程向设备写入页,一般制约性能的主要是备份设备的性能。

c)        备份时,会在事务日志中放上标记,在备份完成的时候会锁定数据库,并再在事务日志中放置一个标志,并将两个标志间的事务追加到备份,所以是备份在备份完成时间点内的所有数据。

d)        全备份时不允许添加或删除数据库文件,收缩数据库

e)        备份策略根据数据库的大小和备份时间定一般天,周,月的周期都可以,个人觉得也和后面差异以及log备份周期有直接关系。

2、  事务日志备份:

a)        db的每一个更改都会在log中添加一个条目,每一行都会在内部被分配一个唯一的编号(LSN),log内容分两部分:活动和不活动,不活动部分包含已提交给数据库的所有更改,活动部分包含尚未提交的所有更改。执行log备份时会找到最低的lsn,并将后续的每个事务日志写入备份,一旦备份完成,已备份部分就会被删除。

b)        以序列号为基础,所以可以还原到任何时间点。在大容量日志恢复模式下,如果日志备份包含大容量日志操作,则无法还原到该日志备份中的时点,而只能还原整个日志备份。

c)        恢复模式为简单模式,无法做log备份。

d)        必须在完整备份后才能做log备份。

e)        日志备份可以看做是增量备份,所以必须按顺序恢复完整备份或者差异备份后的所有log,如果出现断层,则断层之后的log都将无法恢复。

f)         在做任何恢复前,请做一次尾部日志备份,已防止数据丢失。此方法还可以用于当数据库文件损坏,而log正常,使用continue_after_error选项,将尾部日志备份出来,结合以前的备份,来还原数据库。

g)        备份策略主要和业务允许丢失的数据有关,比如允许30分钟数据,就可按30分钟做一次log备份

3、  差异备份:

a)        备份的是上一次完整备份后所有已变化的区,主要目的是为了减少需要还原事务日志备份的数量

b)        差异备份也必须在完整备份基础之上。

c)        每个差异备份都包含自从上一次完整备份以来发生更改的所有页。所以差异备份还原可以在上次完整备份还原的基础上还原最近的一次差异备份。

d)        应用场景,当db非常大(比如数T甚至数十T),不适合周期很短的做全备份,另外,事务日志备份又非常频繁,为了降低log断层的风险,以及过多的log恢复的数量,可以在完整备份后增加差异备份,特别适用于往库中大量插入数据的库,这样每次的差异备份会很小,再加上log备份,可以极高的提高备份的可靠性。

 

4、  文件和文件组备份

a)        完整备份能备份db中所有页,但对大型数据库执行完整备份可能消耗大量的空间和时间,如果需要缩减备份规模,可以改为执行文件和文件组备份

b)        前提是数据库中存在多文件和文件组

c)        可以把文件组看做一个存储边界,不建议对单个文件做备份,最好是文件组级别,因为一个文件组有多个文件时,会将数据在各个文件之间随机分布。

d)        可以与差异和log备份共同使用。

e)        另外,只要不是回复主要文件组,在企业版上,恢复过程中,可以保持数据库联机。只有恢复的那一部分才需要脱机。

 

5、  部分备份

a)        文件组可以标识为只读,如果为了减小备份大小,只备份允许更改的文件组,可以执行部分备份

6、  恢复

a)        所有恢复都是从一个完整备份或者文件组备份开始的

b)        如果数据库不存在,会自动创建,如果存在,需要使用replace强迫在现有数据库上恢复

c)        事务日志备份的恢复不能断层

d)        恢复数据库前,如果现有的数据还在运行,则需要做一次尾部日志备份

e)        备份如果有多个文件,在还原最后一个文件时使用recovery选项,使数据库还原后联机,其他文件恢复使用norecoverydb保持在recovering状态。

f)         如果在恢复过程中需要执行select语句,可以使用standby选项。

g)        可以使用move选项修改数据库文件的位置

h)        如果制定continue_past_errors选项,恢复可以跳过介质损坏的地方继续恢复。恢复完成后,db会被设为emergency模式,管理员可判断是否讲db改为online模式。在emergency模式下,可以select操作,可以从数据库中读出尽可能多的数据

i)          如果是要恢复master数据库,必须在单用户登陆模式下进行。

 

7、  其他事项

a)        为了防止页损坏,需要对db启用checksum,另外恢复检查数据完整性时,必须在之前做过checksum,如果对数据库做过镜像,并且镜像数据库的页没有损坏,sql会自动从镜像回复损坏的页。

b)        页损坏可以隔离,但sql为了防止db大规模损坏,最多只能有1000个损坏页,达到这个限制,数据库会被脱机。

c)        备份时最多可以指定64个备份设备,设备间构建的是带区集。

d)        如果要向不同位置写入备份(拷贝多个备份的备份)可以使用mirror选项,最多可以制定4个不同的路径。注意不能磁带和磁盘混用,每个镜像必须有相同数量的备份设备

e)        通过压缩备份选项可以提高备份设备的速度,压缩一般可以达到4-10倍之多,前提是牺牲cpu为代价换取磁盘io的性能提升和备份大小的减少,另外一个重要目的可以大大减少恢复所需要的时间!

f)         如果备份的目的是用于测试或者其他目的,不想备份记录到备份集,可以使用copy_only选项。