1、第13章 数据库的备份与还原,第13章 数据库的备份与还原,1. 概述 2. 数据库备份方式 3. 备份设备 4. 数据库备份 4.1 完整备份 4.2 差异备份 4.3 事物日志备份 4.4 文件、文件组备份 5. 数据库还原 6. 数据库的分离和附加,13.1 概述,亲,你有没有遇到过这样的事情?,13.1 概述,亲,你有没有遇到过这样的事情?,13.1 概述,亲,你有没有遇到过这样的事情?,数据丢失问题时有发生!数据丢失带来的就是-,13.1 概述,数据库中的数据损失或被破坏的原因主要包括: (1)储存介质故障 (2)服务器崩溃故障 (3)用户错误操作 (4)计算机病毒 (5)自然灾害如
2、何防止数据丢失的发生? -数据备份!,13.1概述,数据库备份实际上就是对SQL Server数据库或事务日志进行备份,备份文件中记录了在进行备份这一操作时,数据库中所有数据的状态。如果数据库受损,可以通过这些备份文件将数据库还原出来,从而达到降低系统风险的目的。数据库备份与还原技术是数据库管理员必须掌握的核心技术之一。,13.2数据库备份方式,SQL Server 2008提供了3种数据库备份方式: 1完整备份 (1)完整数据库备份 (2)完整文件备份 2差异备份 (1)差异数据库备份 (2)差异文件备份 3事务日志备份,1完整备份,(1)完整数据库备份 对整个数据库进行备份。 该备份方式需
3、要较大的存储空间来存储备份文件,备份时间也比较长,还原操作也需要较长的时间。 (2)完整文件备份 指备份一个或多个文件或文件组中的所有数据。在完整恢复模式下,一整套完整文件备份与跨所有文件备份的足够日志备份合起来等同于完整数据库备份。 使用文件备份使您能够只还原损坏的文件,而不用还原数据库的其余部分,从而加快了恢复速度。例如,如果数据库由位于不同磁盘上的若干个文件组成,在其中一个磁盘发生故障时,只需还原故障磁盘上的文件。,2差异备份,(1)差异数据库备份 只记录自上次完整数据库备份后更改的数据。此完整备份称为“差异基准”。 差异数据库备份比完整数据库备份更小、更快。这会缩短备份时间。 如果数据
4、库的某个子集比该数据库的其余部分修改得更为频繁,则差异数据库备份特别有用。,2差异备份,(2)差异文件备份 差异文件备份为创建当前文件备份提供了一种快速并且节省空间的方式。 在使用差异文件备份时,只备份某个文件的和基准备份的差异部分,因而可以极大地缩短恢复时间。 对于以下情况,可以考虑使用差异文件备份: 文件组中有些文件备份频率低于其他文件的备份频率。 文件很大而且数据不常更新;或者反复更新相同数据。,3事务日志备份,定期备份事务日志,即备份从最后一次完整备份之后的所有数据库操作。 在创建第一个事物日志备份之前,必须先创建完整备份。 使用日志备份,可以将数据库恢复到故障点或特定的时点。,13.
5、3备份设备,备份设备是用来存储数据库事务日志、数据文件或文件组的存储介质,可以是硬盘或磁带等。在进行数据库备份之前首先必须创建备份设备。 物理设备与逻辑设备SQL Server使用物理设备名称或逻辑设备名称标识备份设备。物理备份设备名称是操作系统用来标识备份设备的名称。例如,磁盘设备名称d:backupfile.bak。逻辑备份设备名称是用来标识物理备份设备的别名或公用名称。,13.3备份设备,1创建备份设备-图形界面创建 创建备份设备的步骤如下:(1)启动“SQL Server Management Studio”,在“对象资源管理器”窗口里展开“服务器对象”树型目录,鼠标右键单击“备份设备
6、”,如图13.1所示。,13.3备份设备,(2)在弹出的快捷菜单里选择“新建备份设备”选项,弹出如图13.2所示“新建备份设备”对话框。,13.3备份设备,(3)在“设备名称”文本框里键入备份设备的名称。 (4)在“文件”文本框里键入备份设备的路径和文件名,由此可见,SQL Server 2008中的备份设备事实上也只是一个文件而已。 (5)设置完毕后,单击“确定”按钮,开始创建备份设备操作。,13.3备份设备,1创建备份设备-SQL语言创建 SQL Server 2008还提供了一个名为“sp_addumpdevice”的存 储过程可以创建数据库备份设备,其语法代码如下: sp_addump
7、device devtype = device_type , logicalname = logical_name , physicalname = physical_name 主要参数说明: devtype:设备类型,可以支持的值为disk和tape,其中disk为磁盘文件;tape为windows支持的任何磁带设备。 logicalname:备份设备的逻辑名称,相当于图13.1中的【设备名称】。 physicalname:备份设备的物理名称,相当于图13.1中的【文件】。,13.3备份设备,【例13.1】创建一个名为“学生成绩”的磁盘备份设备。sp_addumpdevice disk,学生
8、成绩,D:学生成绩.bak,13.3备份设备,SQL Server 2008还提供了一个名为“sp_dropdevice”的存储 过程可以删除库备份设备,其语法代码如下: sp_dropdevice logicalname = device , delfile = delfile 主要参数说明: logicalname 表示备份设备的逻辑名称。 delfile 表示物理备份设备文件。【例13.2】删除名为“学生成绩”的备份设备。 sp_dropdevice 学生成绩,13.4数据库备份,一、备份数据库 1.完整备份数据库 用完整备份数据库进行数据库还原 2.差异备份数据库 用差异备份数据库进行
9、数据库还原 3. 事物日志备份数据库 用事物日志备份数据库进行数据库还原 二、备份数据库文件 用数据库文件备份还原数据库,13.4数据库备份,1通过SQL Server Management Studio实现完全备份 (1)启动“SQL Server Management Studio”,在“对象资源管理器”窗口里展开“数据库”目录,鼠标右键单击“CJGL”,在弹出的快捷菜单里选择“任务”,如图13.5所示。,13.4数据库备份,1通过SQL Server Management Studio实现完全备份 (2)单击菜单项“备份”,弹出如图13.6所示“备份数据库”对话框。,13.4数据库备份,
10、(3)在“备份类型”,下拉列表框里选择“完整”。 (4)在图13.6所示对话框里单击“选项”标签,弹出如图13.7所示的“选项”对话框,根据需要设置以下各种选项:,13.4数据库备份,(5)单击“确定”按钮, SQL Server 2008开始执行备份操作。,13.4数据库备份,2使用Transact-SQL语句进行完全备份 BACKUP DATABASE database_name | database_name_var TO ,.n MIRROR TO ,.n .next-mirror WITH BLOCKSIZE = blocksize | blocksize_variable , CH
11、ECKSUM | NO_CHECKSUM , STOP_ON_ERROR | CONTINUE_AFTER_ERROR , DESCRIPTION = text | text_variable , DIFFERENTIAL , EXPIREDATE = date | date_var | RETAINDAYS = days | days_var , PASSWORD = password | password_variable , FORMAT | NOFORMAT , INIT | NOINIT , NOSKIP | SKIP , MEDIADESCRIPTION = text | text
12、_variable , MEDIANAME = media_name | media_name_variable , MEDIAPASSWORD = mediapassword | mediapassword_variable , NAME = backup_set_name | backup_set_name_var , NOREWIND | REWIND , NOUNLOAD | UNLOAD , RESTART , STATS = percentage , COPY_ONLY ,13.4数据库备份,【例13.3】将数据库CJGL的完整备份到文件c:cjgl.bak。BACKUP DATA
13、BASE CJGL TO DISK = c:cjgl.bak【例13.4】将数据库CJGL的数据完全备份到名为“学生成绩管理备份设备”的备份设备上。BACKUP DATABASE CJGL TO 学生成绩管理备份设备,13.4数据库备份,差异备份 1.通过SQL Server Management Studio实现差异备份 (1)按照完全备份中的相同步骤,打开如图13.6 所示的“备份数据库”对话框。 (2)在“备份类型”下拉列表框里选择“差异”。 (3)根据需要设置其他选项。 (4)单击“确定”按钮,SQL Server 2008开始执行备份操作。,13.4数据库备份,2使用Transact
14、-SQL语句进行差异备份。 差异备份语法同完全备份的语法,在此不再赘述:【例13.5】将数据库CJGL的差异数据备份到文件c:cjgl.bak中。BACKUP DATABASE CJGL TO DISK=c:cjgl.bak WITH DIFFERENTIAL,13.4数据库备份,事务日志备份 1通过SQL Server Management Studio实现事务日志备份 (1)按照完全备份中的相同步骤,打开如图13.6所示的“备份数据库”对话框。 (2)在“备份类型”下拉列表框里选择“事务日志”。 (3)根据需要设置其他选项。 (4)单击“确定”按钮,SQL Server 2008开始执行备
15、份操作。,13.4数据库备份,2使用Transact-SQL语句进行事务日志备份。 事务日志备份语法代码如下: BACKUP LOG database_name | database_name_var TO ,.n MIRROR TO ,.n .next-mirror WITH BLOCKSIZE = blocksize | blocksize_variable , CHECKSUM | NO_CHECKSUM , STOP_ON_ERROR | CONTINUE_AFTER_ERROR , DESCRIPTION = text | text_variable , DIFFERENTIAL ,
16、 EXPIREDATE = date | date_var | RETAINDAYS = days | days_var , PASSWORD = password | password_variable , FORMAT | NOFORMAT , INIT | NOINIT , NOSKIP | SKIP , MEDIADESCRIPTION = text | text_variable , MEDIANAME = media_name | media_name_variable , MEDIAPASSWORD = mediapassword | mediapassword_variable
17、 , NAME = backup_set_name | backup_set_name_var , NOREWIND | REWIND , NOUNLOAD | UNLOAD , RESTART , STATS = percentage , COPY_ONLY 从以上代码可以看出,事务日志与完整备份的代码大同小异,只是将BACKUP BATABASE改为了BACKUP LOG。,13.4数据库备份,【例13.6】将数据库CJGL的事务日志备份到文件c:cjgl_log.bak中。BACKUP LOG CJGL TO DISK = c:pubs_log.bak注意: 在对数据库实施事务日志备份之
18、前,必须先进行数据库的完整备份操作。,13.4数据库备份,文件/文件组备份如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方式。 使用文件和文件组备份方式可以只备份数据库中的某些文件; 该备份方式在数据库文件非常庞大的时候十分有效; 由于每次只备份一个或几个文件或文件组,可以分多次来备份数据库,避免大型数据库备份的时间过长; 另外,由于文件和文件组备份只备份其中一个或多个数据文件,那么当数据库里的某个或某些文件损坏时,可以只还原损坏的文件或文件组备份即可。,13.4数据库备份,1通过SQL Server Management Studio实现文件/文件组的完全备份 (1
19、)按照完全备份中的相同步骤,打开如图13.6所示的“备份数据库”对话框。 (2)在图13.6中,“备份组件”中选择“文件和文件组”单选框,此时会弹出如图13.9所示的“选择文件和文件组”对话框。在该对话框里可以选择要备份的文件和文件组,选择完毕后单击“确定”按钮返回。,13.4数据库备份,(3)所有选项设置完毕后单击图13.6中的“确定”按钮,开始执行备份操作,备份成功后弹出如图13.10所示的对话框。,13.4数据库备份,文件/文件组的备份与完全备份的代码大同小异,不同的是在“TO ”之前多了一句“”。该语法块里的参数有: FILE:给一个或多个包含在数据库备份中的文件命名。 FILEGRO
20、UP:给一个或多个包含在数据库备份中的文件组命名。 READ_WRITE_FILEGROUPS:指定部分备份,包括主文件组和所有具有读写权限的辅助文件组。创建部分备份时需要此关键字。,13.4数据库备份,【例13.7】将CJGL数据库中的“CJGL_01”文件备份到到文件d:cjgl01.bak 。BACKUP DATABASE CJGL FILE=CJGL_01 TO DISK = d:cjgl01.bak,13.5数据库还原,SQL Server 支持在以下级别还原数据: 1. 数据库(“数据库完整还原”)还原和恢复整个数据库,并且数据库在还原和恢复操作期间处于脱机状态。 2. 数据文件(
21、“文件还原”)还原和恢复一个数据文件或一组文件。在文件还原过程中,包含相应文件的文件组在还原过程中自动变为脱机状态。访问脱机文件组的任何尝试都会导致错误。 3. 数据页(“页面还原”)在完整恢复模式或大容量日志恢复模式下,可以还原单个数据库。可以对任何数据库执行页面还原,而不管文件组数为多少。,13.5数据库还原,1通过SQL Server Management Studio进行数据库还原 的步骤如下: (1)启动“SQL Server Management Studio”,展开“对象资源管理器”树型目录,鼠标右键单击“数据库”,在弹出的快捷菜单里选择“还原数据库”,弹出如图13.11所示的“
22、还原数据库”对话框。,13.5数据库还原,(2)在“目标数据库”下拉列表框里可以选择或键入要还原的数据库名。 (3)如果备份文件或备份设备里的备份集很多的话,还可以选择“目标时间点”,只要有事务日志备份支持,可以还原到某个时间的数据库状态。在默认情况下该项为“最近状态”。 (4)在“还原的源”区域里,指定用于还原的备份集的源和位置。,13.5数据库还原,如果选择“源设备”单选框,则要指定还原的备份文件或备份 设备。点击“”按钮,弹出如图13.12所示“指定备份”对话 框。在“备份媒体”下拉列表框里可以选择是备份文件还是备 份设备,选择完毕后单击“添加”按钮,将备份文件或备份设 备添加进来。,1
23、3.5数据库还原,单击图13.12中的确定按钮,返回还原数据库对话框,如图 13.13所示。,13.5数据库还原,(3)如果没有其他的需要,可以单击“确定”按钮进行还原操作,也可以在图13.13所示对话框里选择“选项”标签,进入如图13.14所示“选项”对话框。,13.5数据库还原,进行数据库文件和文件组备份的还原的步骤如下: (1)启动“SQL Server Management Studio”,展开“对象资源管理器”树型目录,鼠标右键单击“数据库”,在弹出的快捷菜单里选择“还原文件和文件组”,弹出如图13.15所示的“还原文件和文件组”对话框。,13.5数据库还原,(2)在图13.15所示
24、的“还原文件和文件组”对话框里,可以设置以下选项: “目标数据库”:在该下拉列表框里可以选择或键入要还原的数据库名。 “还原的源”:在该区域里可以选择要用来还原的备份文件或备份设备,用法与还原数据库完整备份中的一样。 “选择用于还原的备份集”:在该区域里可以选择要还原的备份集。 (3)选择完毕后可以单击“确定”按钮开始执行还原操作,也可以选择“选项”进行进一步设置。,13.5数据库还原,2使用Transact-SQL语句进行数据库备份还原 RESTORE DATABASE database_name | database_name_var FROM ,.n WITH , CHECKSUM |
25、NO_CHECKSUM , STOP_ON_ERROR | CONTINUE_AFTER_ERROR , FILE = file_number | file_number , KEEP_REPLICATION , MEDIANAME = media_name | media_name_variable , MEDIAPASSWORD = mediapassword |mediapassword_variable , MOVE logical_file_name TO operating_system_file_name ,.n , PASSWORD = password | password_
26、variable , RECOVERY | NORECOVERY | STANDBY = standby_file_name | standby_file_name_var , REPLACE , RESTART , RESTRICTED_USER , REWIND | NOREWIND , STATS = percentage , STOPAT = date_time | date_time_var |STOPATMARK = mark_name | lsn:lsn_number AFTER datetime |STOPBEFOREMARK = mark_name | lsn:lsn_num
27、ber AFTER datetime , UNLOAD | NOUNLOAD ;,13.5数据库还原,【例13.8】用完整备份文件“D:backupcjgl_完全备份.bak”还原cjgl数据库。 USE master GO RESTORE DATABASE cjgl FROM DISK = D:backupcjgl_完全备份.bak GO 【例13.9】用名为“学生成绩”的备份设备还原cjgl数据库。 USE master GO RESTORE DATABASE test FROM 学生成绩 GO,13.5数据库还原,2)还原差异备份 还原差异备份的语法与还原完整备份的语法是一样的,只是 在
28、还原差异备份时,必须要先还原完整备份再还原差异备 份,因此还原差异备份必须要分为两步完成。完整备份与差 异备份数据在同一个备份文件或备份设备中,也有可能是在 不同的备份文件或备份设备中。如果在同一个备份文件或备 份设备中,则必须要用file参数来指定备份集。无论是备份 集是不是在同一个备份文件(备份设备)中,除了最后一个 还原操作,其他所有还原操作都必须要加上NORECOVERY或 STANDBY参数。,13.5数据库还原,【例13.10】” cjgl_完全备份.bak”是CJGL数据库的完整备份,”cjgl_差异备份_添加t_1.bak” 为其差异备份,请上述两个备份设备还原数据库cjgl。
29、 USE master GO RESTORE DATABASE cjgl FROM DISK = D:backupcjgl_完全备份.bak WITH NORECOVERY GO RESTORE DATABASE cjgl FROM DISK=D:backupcjgl_差异备份_添加t_1.bak WITH NORECOVERY GO,13.5数据库还原,3)还原事务日志备份SQL Server 2008中已经将事务日志备份看成和完整备份、差异备份一样的备份集,因此,还原事务日志备份也可以和还原差异备份一样,只要知道它在备份文件或备份设备里是第几个文件集即可。与还原差异备份相同,还原事务日志备
30、份必须要先还原在其之前的完整备份,除了最后一个还原操作,其他所有还原操作都必须要加上NORECOVERY或STANDBY参数。,13.5数据库还原,4)还原文件和文件组备份 还原文件和文件组备份也可以使用RESTORE DATABASE语句, 但是必须要在数据库名与FROM之间加上“FILE”或“FILEGROUP” 参数来指定要还原的文件或文件组。,13.5数据库还原,【例13.12】使用文件备份,还原cjgl数据库的文件和文件组,再用事物日志文件还原事务日志备份。 RESTORE DATABASE cjgl file=student1 from DISK = D:backupcjgl_文件
31、备份_student1.bak with norecovery GO RESTORE DATABASE cjgl file=student2 from DISK = D:backupcjgl_文件备份_student2.bak with norecovery GO RESTORE log cjgl from DISK = D:backup2cjgl_文件备份_log.bak GO,13.6数据库的分离和附加,Microsoft SQL Server 2008允许分离数据库,然后将其重新附加到另一台服务器,甚至同一台服务器上。分离数据库将从SQL Server删除数据库,但是不改变组成该数据库的
32、数据和事务日志文件。然后这些数据和事务日志文件可以用来将数据库附加到任何SQL Server实例上,包括从中分离该数据库的服务器。这时数据库的使用状态与它分离时的状态完全相同。,13.6数据库的分离和附加,13.6.1分离数据库 通过SQL Server Management Studio分离数据库的操作步骤 如下: (1)启动“SQL Server Management Studio”,在“对象资源管理器”窗口里展开“数据库”树型目录,鼠标右键单击“CJGL”数据库,在弹出的快捷菜单里选择“任务”,如图13.17所示。,13.6数据库的分离和附加,(2)单击“分离”菜单项,弹出如图13.18
33、所示的“分离数据库”对话框。数据库CJGL的状态为就绪,表示可以分离。 (3)单击“确定”按钮,开始执行分离数据库操作。,13.6数据库的分离和附加,通过程序方式分离数据库: 可以使用存储过程sp_detach_db进行数据库的分离,语法格 式如下: sp_detach_db dbname= database_name , skipchecks= skipchecks , keepfulltextindexfile = KeepFulltextIndexFile 【例13.13】通过程序方式分离数据库CJGL。 USE master GO sp_detach_db dbname=CJGL, k
34、eepfulltextindexfile=true; GO,13.6数据库的分离和附加,13.6.2附加数据库 通过SQL Server Management Studio附加数据库的操作步骤 如下: (1)启动“SQL Server Management Studio”,展开“对象资源管理器”树型目录,鼠标右键单击“数据库”节点,如图13.19所示。,13.6数据库的分离和附加,(2)单击“附加”菜单项,弹出如图13.20所示的“附加数据库”对话框。,13.6数据库的分离和附加,(3)单击“添加”按钮,弹出如图13.21所示的“定位数据库文件”对话框。,13.6数据库的分离和附加,(4)选择
35、要附加的数据库的MDF文件,选择“CJGL.mdf”,然后单击“确定”按钮,返回“附加数据库”对话框。 (5)单击“附加数据库”对话框中的“确定”按钮,开始执行附加数据库操作。附加完成后,刷新“数据库”节点,可以看到刚才附加的数据库。,13.6数据库的分离和附加,通过程序方式附加数据库: 也可以使用存储过程sp_ attach _db进行数据库的分离,语 法格式如下:sp_attach_db dbname= dbname, filename1= filename_n ,.16 ,13.6数据库的分离和附加,【例13.14】通过程序方式附加数据库CJGL。 USE master GO sp_attach_db dbname = CJGL, filename1 = E:SQL DataBasestudentcjgl.mdf, filename2 = E:SQL DataBasestudentcjgl_2.ldf; GO,本章小结,本章首先介绍了数据库备份相关概念,然后重点讨论了数据 库备份和还原的方法及步骤。最后介绍了如何通过程序或图 形界面方式进行数据库的分离与附加。,Thank You !,