第15章 备份和恢复数据库 15.1 备份数据库
$ b& D" K: L; C. O 15.1.1 概述6 c1 J/ J, L; |1 Y1 }0 ] |
1、备份数据库的作用
/ h. r0 _$ G" ?6 h b (1) 备份数据库就是将数据库数据和与数据库的正常运行有关的信息保存起来,以备恢复数据库时使用,其主要目的是为了防止数据的丢失。
* @% y* ~# F7 [: i/ s( f2 h (2) 另一作用是作为数据转移的一种方式;
6 R; Q5 Z6 M+ F8 d- N" B+ T 2、备份时间5 G* T2 j# \. j, M8 v% o/ b
(1) 对于系统数据库应进行了修改后立即备份,对于用户数据库一般采用定期备份;
v# j1 t0 N1 V4 }" i) Z (2) 备份数据库要选在数据库操作少的时间进行,这样可减少对备份以及数据操作性能的影响。. `* E3 J& @1 \ r% b. p$ V
15.1.2 备份设备
2 x' [; a7 \: y/ k9 y4 X 1、 SQL Server将备份数据库的场所称为备份设备,它支持将数据库备份到磁带或磁盘上;
( |, h. Q7 P4 G5 @' H1 F 2、 备份方式有两种:
* {% _. N/ M: q! d# Z" T) b (1) 先创建备份设备,然后将数据库备份到备份设备上(永久备份设备);$ j) z/ x J2 I9 s9 d" |; H: V
(2) 直接将数据库备份到物理文件上(临时备份设备)。
7 c7 P0 i; ~5 M. f8 m 15.1.3 创建备份设备
" f6 N& U7 ]3 Z! `; L5 B 备份设备在操作系统一级实际上是物理文件,只是备份设备必须要先创建好,然后才能使用
$ l# g! f R! r& u5 i4 I 1、 用企业管理器创建备份设备
9 ^% |# _+ y. M" A. `& Q2 L' H 2、 使用系统存储过程创建备份设备
0 V7 u7 j5 {- p& K- N7 Z7 Y2 c% T3 P sp_addumpdevice[@devtype=]’device_type’,[@logicalname=]’logical_name’,1 L; X& Y* r0 H! [8 Z; \# `
[@physicalname=]’physical_name’
4 v% Z* {* x, |! w6 ] 其中:% {0 z4 \6 y; [7 q" m/ ^. Y
(1)[@devtype=]’device_type’:为备份设备的类型,可选下列之一:# c) J( K; b3 p1 ?
(A) Disk:使用磁盘文件作为备份设备;
7 M( R" m- N( l* B4 y* @ (B) Pipe:使用命名管道作为备份设备;
. E. W. e6 {6 M; ] (C) Tape:使用磁带设备。
3 {4 R1 D# J8 P( t! k( L (2)[@logicalname=]’logical_name’:备份设备的逻辑名称,该逻辑名称用在BACKUP和RESTORE语句中;
- C1 K D" V- D% {/ a6 s% K (3)[@physicalname=]’physical_name’:备份设备的物理名称。$ v! y& L* ^0 `: g f
15.1.4 备份类型* k/ [! h5 [! x4 a [
1、 完全备份$ G, t" E# f, h1 k
是将数据库中的全部信息进行备份,它是恢复的基线,在进行完全备份时,不但备份数据库的数据文件、日志文件,而且还备份文件的存储位置信息以及数据库中的全部对象及相关信息;
6 c+ @% f, x E5 C2 ?/ k [8 Q- m 备份数据库是要消耗时间的,在进行备份数据库时,用户可以访问数据库,它将不影响数据库的备份,并且还可以将备份过程中发生的活动全部备份下来。
4 j3 }! i/ O5 W, J* I 2、差异备份
$ G. {, b! ]: d1 F5 ? 是备份从最近的完全备份之后对数据库所作的修改,它以完全备份为基点,备份变化了的数据文件和日志文件以及数据库中其他被修改的内容,1 w- D! T. Q! R' J
在差异备份过程中,也允许用户访问数据库和对其操作,且在备份过程中的活动也一起备份下来;
& u$ `$ |/ N% P. }0 P, y- N$ \ 3、事务日志备份/ r7 |( U l- O& N+ \
(1) 是备份从上次备份之后的日志记录,在默认情况下,事务日志备份完成后,要截断日志。8 r7 s( I* m' Q( C1 E& [5 ~
(2) 事务日志记录了用户对数据库进行的修改操作,为了避免记录越来越多,必须定期地将日志记录中不需要的部分清除掉,这种过程叫截断日志,备份日志是截断日志的一种方法;
. c2 g5 y) U( L$ |9 b7 p% r, h (3) 如果要进行事务日志备份,必须将数据库的故障还原模型设置为“完全”方式或“大容量日志记录的”方式,因为在默认情况下的“简单”方式,只能进行完全备份和差异备份,不能进行事务日志备份,因为在该模式下系统自动定期将事务日志中不活动的部分清除。+ C5 `( }% V3 s, S# y
(4) 如要对数据库进行事务日志备份,则必须先设置数据库的故障还原模型,否则在恢复时就会出错。这是因为不同的还原模型对日志的记录和维护方式是不一样的。
: x" P8 j" \$ A$ f* B15.1.5 备份策略
2 a1 b7 @5 c2 x2 P9 w w 1、完全备份% x0 {, b+ m" H: Q/ Z$ p% \+ G- Q
完全备份策略适合于数据库数据不是很大,而且数据更改不是很频繁的情况。可以几天或几周进行一次;
- u* }+ `- \$ Q; I 2、完全备份+日志备份# s) F( Y4 b; R7 P5 ^& U9 o* ~. n
如不允许丢失太多数据,且不希望经常进行完全备份;
|& u# N+ I; j/ _1 B, ~# D, p 3、完全备份+差异备份+日志备份! H2 [1 \$ `& c1 U" D
该策略的好处是备份和恢复的速度都比较快,出现故障时丢失的数据也比较少;( c4 ]* s8 y7 C+ Y3 m- a
15.1.6 实现备份7 t0 n j$ K, {- d
1、 使用企业管理器备份数据库
% N; ~- D+ V' ^# M' {; M 2、 使用Transact-SQL语句备份数据库
$ h% P' c1 D" e9 G1 ^ (1) 备份数据库的基本语法:) }: ]7 [, E4 a% v. q
BACKUP DATABASE 数据库名4 f4 n. ?5 O# c3 Q6 ^+ a+ Z0 B
TO {}|{DISK|TAPE}={‘物理备份文件名’}
+ V, ^0 {: B, T5 H5 G! N [WITH [DIFFERENTIAL][[,]{INIT|NOINIT}]]6 r4 }. E% g" h" m* ^' X
其中:
; H C' {% \* L) g3 l (A):将数据库备份到已创建好的备份设备名上;
' x" E7 a1 l7 R( S3 C1 [ (B)DISK|TAPE:将数据库备份到磁盘或磁带;
1 O1 F5 h1 I" ]+ v/ C) t/ i" B (D) DIFFERENTIAL:进行差异备份;( s- o) W4 n1 O
(E) INIT:本次备份数据库将重写备份设备,即覆盖掉本设备上以前进行的所有备份;2 w7 S; w/ y' n
(F) NOINIT:本次备份数据库将追加到备份设备上,即不覆盖。
3 I) p% K3 I- c( y# L (2) 备份数据库日志的基本语法:
- y. q7 K$ L+ ~3 x5 d& V& B& ^ BACKUP LOG 数据库名
7 C e$ M; p2 z2 k1 r TO {}|{DISK|TAPE}={‘物理备份文件名’}8 n) S. ~* g, ?, [8 K
[WITH [{INIT|NOINIT}] [{[,]NO_LOG|TRUNCATE_ONLY|NO_TRUNCATE}]]/ B+ i, Y, u+ Z7 ]
其中:( l& X! n) F* o+ o& a
(A) NO_LOG和TRUNCATE_ONLY:表示备份完日志后要截断不活动的日志;
; E4 U4 g) i: A (B) NO_TRUNCATE:表示备份完日志后不截断不活动的日志;
t7 J/ x! A% K/ s5 u: }2 w' W (C) 其他选项同备份数据库语句的选项。# L5 E" N. n# u) B: K, h
15.1.7 备份媒体集
3 }! E ?0 Z% U* y% [4 S3 X7 R" a4 p: y5 b+ z) P5 ?, l6 H; u
1、 当数据库很大时,有时一个备份设备的空间可能不能满足要求,这里就可以将数据库备份到多个不同的备份设备上,同时使用多个备份设备进行备份的为此设备就称为备份媒体集; |