1、1,第8章 数据保护之数据库的备份与还原,备份数据库,二、,恢复数据库,三、,备份和还原构架,一、,数据库的维护,四、,2,一、备份和还原构架,为什么要备份和还原?因为故障是不可避免的,而故障会带来数据的丢失和损坏。为了保证数据库的安全性,防止数据库中数据的意外丢失,应经常对数据库中的数据进行备份,以便在数据库出故障的时候进行及时有效的恢复。 计算机硬件故障 系统软件和应用软件的错误 操作员的失误 病毒或恶意的破坏 .,3,恢复操作的基本原理:冗余利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据 恢复机制涉及的关键问题 1. 如何建立冗余数据 数据备份 登录日志文件备
2、份 2. 如何利用这些冗余数据实施数据库恢复,4,什么是日志文件?,日志文件(log)是用来记录事务对数据库的更新操作的文件。 必须先写日志文件,后写数据库 写日志文件操作:把表示这个修改的日志记录写到日志文件。 写数据库操作:把对数据的修改写到数据库中,故障发生点静态转储 运行事务 正常运行 Ta Tb Tf登记日志文件重装后备副本 利用日志文件恢复事务 继续运行 介质故障恢复 登记日志文件,5,为什么要先写日志文件写数据库和写日志文件是两个不同的操作,在这两个操作之间可能发生故障。如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了;如果先写日志,但没有修改数
3、据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性,6,DBA应制定备份和还原计划:,应定期进行数据转储,制作后备副本。 但转储又是十分耗费时间和资源的,不能频繁进行。 DBA应该根据数据库使用情况确定适当的转储周期和转储方法。例: 每天晚上进行动态增量转储 每周进行一次动态海量转储 每月进行一次静态海量转储,7,(一)备份概述,备份内容,系统数据库 用户数据库 事务日志,备份方式 (备份类型 ),完全数据库备份 差异数据库备份 事务日志备份 数据库文件和文件组备份,二、 备份数据库,备份设备类型,磁盘设备 磁带设备 其它设备,8,1. 完全数据库备份备份数
4、据库的所有表的数据及模式,以及对应的文件结构,包括对事务日志中的事务进行备份。 2. 差异数据库备份只记录自上次完全数据库备份后发生更改的数据。差异备份的数据量比完全备份小而且备份速度快,因此可以更经常地备份,经常备份将减少丢失数据的危险。,9,3. 事务日志备份事务日志是自上次备份事务日志后对数据库执行的所有事务的一系列记录。事务日志备份只考虑在日志中所记录的变化,是基于逻辑操作的备份。可以使用事务日志备份将数据库恢复到特定的即时点或恢复到故障点。 4. 数据库文件和文件组备份只备份特定的文件或文件组,常用于超大型数据库的备份。,10,SQL Server恢复模型的备份类型,1。完全数据库备
5、份和恢复 2。完全+差异备份和恢复 3。完全+日志备份和恢复(这是DBA常采取的方法),如何选择备份和恢复模型?,11,(二) 创建和删除备份设备,磁盘备份设备:指硬盘或其它磁盘存储介质上的文件,与常规操作系统文件一样。可以在本地服务器的磁盘上或远程共享磁盘上定义磁盘备份设备。 磁带备份设备:磁带设备只能物理连接到运行SQL Server实例的计算机上。SQL Server不支持备份到远程磁带设备上。,在进行备份以前一般要指定或创建备份设备,备份设备是用来存储数据库、事务日志或文件和文件组备份的存储介质。包括磁盘和磁带设备。,12,物理设备名称:是操作系统用来标识备份设备的名称,如“D:MyB
6、ackupsStudent.bak”。 逻辑设备名称:是用来标识物理备份设备的别名或公用名称,用以简化物理设备名称。例如,逻辑设备名称可以是“STDBackup”,而物理设备名称则是“D:MyBackupsStudent.bak”。,SQL Server使用物理设备名称或逻辑设备名称来标识备份设备。,13,选择服务器展开“管理”文件夹右击“备份”选择“新建备份设备”命令,1. 使用企业管理器创建设备,14,打开“备份设备属性”对话框:,逻辑备份设备名称,物理备份设备名称,15,创建备份设备后,在企业管理器的右侧窗格中会显示该备份设备的名称、物理位置和设备类型,用鼠标右击要删除的备份设备的名称,
7、从弹出的快捷菜单中选择“删除”命令,则可以删除相应的备份设备。,2. 使用企业管理器删除备份设备,16,格式: sp_addumpdevice devtype = 设备类型, logicalname = 逻辑备份设备名, physicalname = 物理备份设备名 参数说明: devtype = 设备类型:指定备份设备的类型,可以是: disk、pipe、tape。 logicalname = 逻辑备份设备名 : 指定逻辑备份设备名称。,3使用系统存储过程创建备份设备(简略了解),17,physicalname = 物理备份设备名:指定物理备份设备名。物理名称必须遵照操作系统文件名称的规则或
8、者网络设备的通用命名规则,并且必须包括完整的路径。对于远程硬盘文件,可以使用格式“主机名共享路径名路径名文件名”表示;对于磁带设备,用“.TAPEn”表示,其中n为磁带驱动器序列号。,18,【例17-1】创建一个磁盘备份设备,逻辑名称为“copy1”,物理名称为“d:Mybackupcompany.bak”EXEC sp_addumpdevicedevtype = disk,logicalname = copy1,physicalname =d:Mybackupcompany.bak 也可以简化成:EXEC sp_addumpdevice disk,copy1,d:Mybackupcompan
9、y.bak 这里的EXEC表示执行存储过程。,19,【例17-2】创建备份设备copy2,使用teacher服务器共享文件夹backup下的文件company1.bak。EXEC sp_addumpdevice disk,copy2,teacherbackupcompany1.bak 【例17-3】用物理设备.TAPE0创建一个磁带备份设备tapedevice。EXEC sp_addumpdevice tape,tapedevice,.TAPE0,略,20,格式: sp_dropdevice logicalname = 逻辑备份设备名 , delfile = 删除文件 参数说明: delfil
10、e: 指是否同时删除物理备份文件。如果该参数指定为DELFILE,那么就会删除设备物理文件名指定的磁盘文件。,4. 使用系统存储过程sp_dropdevice删除备份设备 (略),21,【例17-4】删除例5-11创建的备份设备tapedevice,不删除相应的物理备份文件。EXEC sp_dropdevice copy1 【例17-5】删除例5-9创建的备份设备copy1,并删除相应的物理文件。EXEC sp_dropdevice copy1, DELFILE,22,(三) 执行备份,1. 在企业管理器中使用备份向导执行备份(了解) (1) 单击服务器 打开“工具”菜单选择“向导” 或 单击
11、 工具栏图标,打开“选择向导”对话框:,23,(2) 选择数据库:,24,(3) 输入备份名称和描述信息:,25,(4) 选择备份类型:,26,(5) 选择备份设备和属性:,27,(6) 备份验证和调度:,28,(7) 完成备份:,29,2. 在企业管理器中使用备份数据库对话框执行备份 (1)打开备份数据库话框 方法一:右击数据库选择“所有任务” 选择“备份数据库”令 方法二:展开“数据库”文件夹展开“管理”文件夹右击“备份” 选择“备份数据库” 方法三:打开“工具”菜单选择“备份数据库”,30,31,32,(1)完全数据库备份 格式:BACKUP DATABASE 数据库名称TO ,.n W
12、ITH NAME = 备份集名称 , DESCRIPTION = 备份描述文本 , INIT | NOINIT ,3. 使用BACKUP DATABASE语句备份数据库,33,说明: :指定备份要使用的逻辑或物理备份设备。定义如下::= 逻辑备份设备名 | DISK |=TAPE 物理备份设备名 INIT:指定应重写所有备份集。 NOINIT:表示备份集将追加到指定的设备现有数据之后,以保留现有的备份集。,完全数据库备份是制作数据库中所有内容的一个副本,备份过程花费时间相对较长,备份占用的空间大,因此不宜频繁进行。,34,【例17-6】将“学生管理”数据库备份到d盘的mybackup文件夹下的
13、“学生管理.bak”文件中。-首先先创建一个备份设备sp_addumpdevice disk,mycopy1,d:mybackup 学生管理.bak-用BACKUP DATABASE备份学生管理数据库BACKUP DATABASE 学生管理TO mycopy1WITHNAME = 学生管理备份,DESCRIPTION = 完全备份,35,【例17-7】将“学生管理”数据库备份到网络中的另一台主机ServerX上。sp_addumpdevice disk,STDcopy,ServerXbackupstudent.datBACKUP DATABASE 学生管理 TO STDcopy,略,36,指对
14、最近一次完全数据库备份结束以来发生改变的数据进行备份。当数据库从上次备份以来只修改了很少的数据时,适合使用差异备份。 格式:BACKUP DATABASE 数据库名称TO ,.n WITHDIFFERENTIAL , NAME=备份集名称 , DESCRIPTION = 备份描述文本 , INIT | NOINIT ,(2)差异数据库备份,37,【例17-8】假设对“学生管理”数据库进行了一些修改,现在要做一个差异备份,且将该备份添加到例17-6的现有备份之后。BACKUP DATABASE 学生管理TO mycopy1WITH DIFFERENTIAL,NOINIT,NAME=学生管理备份,
15、DESCRIPTION=第一次差异备份,38,当一个数据库很大时,对整个数据库进行备份可能会花费很多时间,这时可以采用文件或文件组备份,即对数据库中的部分文件或文件组进行备份。,(3)文件或文件组备份(略),39,格式:BACKUP DATABASE 数据库名称 ,.n TO ,.n WITHDIFFERENTIAL , NAME=备份集名称 , DESCRIPTION = 备份描述文本 , INIT | NOINIT := FILE = 逻辑文件名 | FILEGROUP = 逻辑文件组名 ,略,40,将test数据库的文件组QQQ备份到文件“E:tempgroup1.dat”中。BACKU
16、P DATABASE testFILEGROUP= QQQ TO DISK=E:tempgroup1.datWITHNAME=group backup of test 将XJGL数据库的次数据库文件DDD备份到文件“d:mybackupddd.dat”中。BACKUP DATABASE xjglFILE=dddTO DISK=d:mybackupddd.dat,例17-9】,恢复模型为“完全”;建立一个文件组QQQ,并建立一个次要数据库文件属于该文件组;相应文件夹存在。,恢复模型为“完全”;建立一个次数据库文件DDD;相应文件夹存在。,41,事务日志是自上次备份事务日志后对数据库执行的所有事务
17、的一系列记录,备份事务日志将对最近一次备份事务日志以来的所有事务日志进行备份。 格式:BACKUP LOG 数据库名称TO ,.n WITH , NAME=备份集名称 , DESCRIPTION = 备份描述文本 , INIT | NOINIT ,(4) 事务日志备份,42,【例17-10】将“学生管理”数据库的日志文件备份到文件d:mybackupMyLog1.bak中。EXEC sp_addumpdevice disk,MyLog1, d:mybackupMyLog1.bakBACKUP LOG 学生管理 TO MyLog1,前提: 恢复模型为“完全” 存在文件夹d:mybackup,43
18、,三、 恢复数据库,数据库备份后,一旦系统发生崩溃或者执行了错误的数据库操作,就可以从备份文件中恢复(还原)数据库,让数据库回到备份时的状态。通常在以下情况下需要恢复数据库。媒体故障。用户操作错误。服务器永久丢失。将数据库从一台服务器复制到另一台服务器。,恢复数据库之前,需要限制其他用户访问数据库: 右击数据库选择“属性” 选择“选项”选择“限制访问”、单用户,44,恢复内容: 恢复整个数据库 恢复部分数据库 恢复数据库文件或文件组 恢复数据库事务日志 恢复途径: 使用企业管理器中 使用RESTORE DATABASE,45,1. 使用企业管理器恢复数据库单击服务器名称选择“工具”菜单选择“还
19、原数据库” 或右击“数据库”或数据库名称选择“所有任务” 选择“还原数据库”命令。两种方法都会打开 “还原数据库”对话框:,46,“还原数据库”对话框“常规”选项卡,47,“还原数据库”对话框“选项”选项卡,48,(1) 恢复完全备份数据库和差异备份数据库 格式:RESTORE DATABASE 数据库名称 FROM ,.n WITH , FILE = 文件号 , MOVE 逻辑文件名 TO 物理文件名 ,.n , NORECOVERY | RECOVERY , REPLACE ,2. 使用RESTORE DATABASE语句恢复数据库,49,说明: 文件号:要还原的备份集。例如,文件号为2表
20、示第二个备份集。 NORECOVERY:指示还原操作不回滚任何未提交的事务。当还原数据库备份和多个事务日志时,或在需要使用多个RESTORE语句时(例如在完整数据库备份后进行差异数据库备份),SQL Server要求在除最后的RESTORE语句外的所有其它语句上使用WITH NORECOVERY选项。 RECOVERY:指示还原操作回滚任何未提交的事务。在恢复完成后即可随时使用数据库。 REPLACE:指定如果存在同名数据库,将覆盖现有的数据库。,50,恢复第一天做的“学生管理”数据库的完全备份(如例17-6)RESTORE DATABASE 学生管理FROM mycopy1WITHFILE=
21、1,RECOVERY,【例17-11】完全恢复,51,设第一天做了一个“学生管理”数据库的完全备份(如例17-6),第2天做了一个“学生管理”数据库的差异备份(如例17-8),之后数据库出现故障,将数据库恢复到做差异备份时的状态。-恢复完全备份RESTORE DATABASE 学生管理FROM mycopy1WITHFILE=1,NORECOVERY -这时数据库无法使用,继续恢复差异备份RESTORE DATABASE 学生管理FROM mycopy1WITHFILE=2,RECOVERY -这时数据库可以使用,【例17-12】完全+差异 恢复,52,(2) 恢复事务日志 格式:RESTOR
22、E LOG 数据库名称 FROM ,.n WITH , FILE = 文件号 , MOVE 逻辑文件名 TO 物理文件名 ,.n , NORECOVERY | RECOVERY,53,假设对“XJGL”数据库先后做了完全数据库备份、差异数据库备份和事务日志备份,现在利用这三个备份来恢复数据库。BACKUP DATABASE xjglTO disk=d:mybackupxjgl.bakWITHNAME = xjgl备份,DESCRIPTION = 完全备份 BACKUP DATABASE 学生管理TO disk=d:mybackupxjgl.bakWITH DIFFERENTIAL,NOINIT
23、, NAME=xjgl备份,DESCRIPTION=第一次差异备份 BACKUP LOG xjgl TO disk=d:mybackupxjglLog1,【例17-14】完全+差异 +日志 恢复,54,RESTORE DATABASE xjglFROM disk=d:mybackupxjgl.bakwithnoRECOVERY RESTORE DATABASE xjgl FROM disk=d:mybackupxjgl.bak WITH NORECOVERYRESTORE LOG xjgl FROM disk=d:mybackupxjglLog1 WITH RECOVERY -完成恢复,数据库
24、可以使用,55,练习1:(完全数据库备份与简单恢复),1.建立备份: 建立JSJX数据库 在JSJX数据库中建立一个表TABLE1 然后执行完全备份JSJX数据库操作 2.完成操作 再删除自己建立的表TABLE1 3.恢复操作(将数据库恢复到操作2之前的状态) 恢复JSJX数据库,56,练习2:差异数据库备份与简单恢复,1.建立一个完全备份备份: 建立JSGL数据库在JSGL数据库中建立一个表TABLE1 然后执行JSGL数据库操作 2.完成操作 再自己建立的表TABLE1 中插入一条记录 3.建立一个差异备份 4.再向自己建立的表TABLE1 中插入一条记录 5.恢复操作 将数据库恢复到操作
25、2完成后的状态,57,练习3:日志备份与完全恢复(这是DBA常采取的方法),1.对数据库XJGL实施备份 数据库XJGL实施完全备份FULLBACKUP_XJGL 对其中的STUDENT表进行下面操作 删除一条记录 修改一条记录的系别 备份当前活动日志文件LBACKUP_XJGL 对其中的STUDENT表进行下面操作 插入一条记录 2.将数据库恢复到“插入一条记录”之前的状态,58,四、 数据库的维护,利用数据库的维护计划向导可以方便地设置数据库的核心维护任务,以便于定期地执行这些任务,其创建数据库维护计划的步骤如下: 如图17-35-图17-49所示,59,图17-35 选择数据库维护计划对
26、话框,60,图17-36 欢迎使用维护计划向导对话框,61,图17-37 选择数据库对话框,62,图17-38 更新数据优化信息对话框,63,图17-39 编辑循环作业调度对话框,64,图17-40 检查数据库完整性对话框,65,图17-41 指定数据库备份计划对话框,66,图17-42 指定数据库备份文件存放目录对话框,67,图17-43 指定事务日志备份计划对话框,68,图17-44 指定事务志文件备份存放目录对话框,69,图17-45 维护计划生成报表对话框,70,图17-46 指定维护计划历史记录存放位置对话框,71,图17-47 指定数据库维护计划名称对话框,72,图17-48 数据库维护计划对象选择对话框,73,图17-49 数据库维护计划编辑对话框,74,谢谢您的光临!,Thank you very much!,