1、第8章 备份与恢复,8.1 备份和恢复概述,8.2 备份操作和备份命令,8.3 恢复操作和恢复命令,8.4 复制数据库,8.5 附加数据库,8.1 备份和恢复概述,8.1.1 备份和恢复需求分析 数据库中的数据丢失或被破坏可能是由于以下原因: (1)计算机硬件故障。由于使用不当或产品质量等原因,计算机硬件可能会出现故障,不能使用。如硬盘损坏会使得存储于其上的数据丢失。 (2)软件故障。由于软件设计上的失误或用户使用的不当,软件系统可能会误操作数据引起数据破坏。 (3)病毒。破坏性病毒会破坏系统软件、硬件和数据。 (4)误操作。如用户误用了诸如DELETE、UPDATE等命令而引起数据丢失或被破
2、坏。 (5)自然灾害。如火灾、洪水或地震等,它们会造成极大的破坏,会毁坏计算机系统及其数据。 (6)盗窃。一些重要数据可能会遭窃。,8.1.2 数据库备份的基本概念,1备份内容 数据库中数据的重要程度决定了数据恢复的必要性与重要性,也就决定了数据是否需要备份及如何备份。数据库需备份的内容可分为数据文件(又分为主要数据文件和次要数据文件)、日志文件两部分。其中,数据文件中所存储的系统数据库是确保SQL Server 2008系统正常运行的重要依据,无疑,系统数据库必须完全备份。 2由谁做备份 在SQL Server 2008中,具有下列角色的成员可以做备份操作: (1)固定的服务器角色sysad
3、min(系统管理员)。 (2)固定的数据库角色db_owner(数据库所有者)。 (3)固定的数据库角色db_backupoperator(允许进行数据库备份的用户)。 3备份介质 备份介质是指将数据库备份到的目标载体,即备份到何处。在SQL Server 2008中,允许使用两种类型的备份介质。 (1)硬盘:是最常用的备份介质,可以用于备份本地文件,也可以用于备份网络文件。 (2)磁带:是大容量的备份介质,磁带仅可用于备份本地文件。,8.1.2 数据库备份的基本概念,4何时备份 (1)系统数据库。当系统数据库master、msdb和model中的任何一个被修改以后,都要将其备份。 maste
4、r数据库包含了SQL Server 2008系统有关数据库的全部信息,即它是“数据库的数据库”。如果master数据库损坏,那么SQL Server 2008可能无法启动,并且用户数据库可能无效。当master数据库被破坏而没有master数据库的备份时,就只能重建全部的系统数据库了。 (2)用户数据库。当创建数据库或加载数据库时,应备份数据库。当为数据库创建索引时,应备份数据库,以便恢复时大大节省时间。 当清理了日志或执行了不记日志的T-SQL命令时,应备份数据库,这是因为若日志记录被清除或命令未记录在事务日志中,日志中将不包含数据库的活动记录,因此不能通过日志恢复数据。不记日志的命令有BA
5、CKUP LOG WITH NO_LOG、WRITETEXT、UPDATETEXT、SELECT INTO、命令行实用程序、BCP命令等。,8.1.2 数据库备份的基本概念,5限制的操作 SQL Server 2008在执行数据库备份的过程中,允许用户对数据库继续操作,但不允许用户在备份时执行下列操作:创建或删除数据库文件;创建索引;不记日志的命令。 若在系统正执行上述操作中的任何一种时试图进行备份,则备份进程不能执行。 6备份方法 数据库备份常用的两类方法是完全备份和差异备份。完全备份每次都备份整个数据库或事务日志,差异备份则只备份自上次备份以来发生过变化的数据库的数据。差异备份也称为增量备
6、份。,8.1.2 数据库备份的基本概念,SQL Server 2008中有两种基本的备份:一是只备份数据库,二是备份数据库和事务日志,它们又都可以与完全或差异备份相结合。另外,当数据库很大时,也可以进行个别文件或文件组的备份,从而将数据库备份分割为多个较小的备份过程。这样就形成了以下4种备份方法: (1)完全数据库备份。这种方法按常规定期备份整个数据库,包括事务日志。当系统出现故障时,可以恢复到最近一次数据库备份时的状态,但自该备份后所提交的事务都将丢失。 完全数据库备份的主要优点是简单,备份是单一操作,可按一定的时间间隔预先设定,恢复时只需一个步骤就可以完成。 (2)数据库和事务日志备份。这
7、种方法不需很频繁地定期进行数据库备份,而是在两次完全数据库备份期间,进行事务日志备份,所备份的事务日志记录了两次数据库备份之间所有的数据库活动记录。当系统出现故障后,能够恢复所有备份的事务,而只丢失未提交或提交但未执行完的事务。 执行恢复时,需要两步:首先恢复最近的完全数据库备份,然后恢复在该完全数据库备份以后的所有事务日志备份。,8.1.2 数据库备份的基本概念,(3)差异备份。差异备份只备份自上次数据库备份后发生更改的部分数据库,它用来扩充完全数据库备份或数据库和事务日志备份方法。对于一个经常修改的数据库,采用差异备份策略可以减少备份和恢复时间。差异备份比全量备份工作量小而且备份速度快,对
8、正在运行的系统影响也较小,因此可以更经常地备份。经常备份将减少丢失数据的危险。 使用差异备份方法,执行恢复时,若是数据库备份,则用最近的完全数据库备份和最近的差异数据库备份来恢复数据库;若是差异数据库和事务日志备份,则需用最近的完全数据库备份和最近的差异备份后的事务日志备份来恢复数据库。 (4)数据库文件或文件组备份。这种方法只备份特定的数据库文件或文件组,同时还要定期备份事务日志,这样在恢复时可以只还原已损坏的文件,而不用还原数据库的其余部分,从而加快了恢复速度。,8.1.3 数据库恢复概念,1准备工作 数据库恢复的准备工作包括系统安全性检查和备份介质验证。在进行恢复时,系统先执行安全性检查
9、、重建数据库及其相关文件等操作,保证数据库安全地恢复,这是数据库恢复必要的准备,可以防止错误的恢复操作。例如,用不同的数据库备份或用不兼容的数据库备份信息覆盖某个已存在的数据库。当系统发现出现了以下情况时,恢复操作将不进行: (1)指定要恢复的数据库已存在,但在备份文件中记录的数据库与其不同; (2)服务器上数据库文件集与备份中的数据库文件集不一致; (3)未提供恢复数据库所需的所有文件或文件组。,8.1.3 数据库恢复概念,安全性检查是系统在执行恢复操作时自动进行的。在恢复数据库时,要确保数据库的备份是有效的,即要验证备份介质,得到数据库备份的信息。这些信息包括: 备份文件或备份集名及描述信
10、息。 所使用的备份介质类型(磁带或磁盘等)。 所使用的备份方法。 执行备份的日期和时间。 备份集的大小。 数据库文件及日志文件的逻辑和物理文件名。 备份文件的大小。 2执行恢复数据库的操作 可以提供使用图形向导方式或T-SQL语句执行恢复数据库的操作。具体的恢复操作步骤将在8.3节进行详细的介绍。,8.2 备份操作和备份命令,8.2.1 创建备份设备 1创建永久备份设备 若使用磁盘设备备份,那么备份设备实际上就是磁盘文件;若使用磁带设备备份,那么备份设备实际上就是一个或多个磁带。 创建该备份设备有两种方法:使用图形向导方式或使用系统存储过程sp_addumpdevice。 (1)使用系统存储过
11、程创建命名备份设备。执行系统存储过程sp_addumpdevice可以在磁盘或磁带上创建命名备份设备,也可以将数据定向到命名管道。 创建命名备份设备时,要注意以下几点: SQL Server 2008将在系统数据库master的系统表sysdevice中创建该命名备份设备的物理名和逻辑名。 必须指定该命名备份设备的物理名和逻辑名,当在网络磁盘上创建命名备份设备时要说明网络磁盘文件路径名。,8.2.1 创建备份设备,语法格式: sp_addumpdevice devtype = device_type , logicalname = logical_name , physicalname = p
12、hysical_name 【例8.1】 在本地硬盘上创建一个备份设备。 USE master GO EXEC sp_addumpdevice disk, mybackupfile,E:datamybackupfile.bak 上例所创建的备份设备的逻辑名是mybackupfile。所创建的备份设备的物理名是E:datamybackupfile.bak。 【例8.2】 在磁带上创建一个备份设备。 EXEC sp_addumpdevice tape, tapebackupfile, .tape0,8.2.1 创建备份设备,(2)使用对象资源管理器创建永久备份设备。在SSMS中创建备份设备,步骤如下
13、。 启动SQL Server Management Studio,在对象资源管理器中展开“服务器对象”,选择“备份设备”,在“备份设备”的列表上可以看到上例中使用系统存储过程创建的备份设备,右击鼠标,在弹出的快捷菜单中选择“新建备份设备”菜单项。 在打开的“备份设备”窗口中分别输入备份设备的名称和完整的物理路径名,单击“确定”按钮,完成备份设备的创建。 当所创建的“命名备份设备”不再需要时,可用图形向导方式或系统存储过程sp_dropdevice删除它。在SQL Server Management Studio中删除“命名备份设备”时,若被删除的“命名备份设备”是磁盘文件,那么必须在其物理路径
14、下用手工删除该文件。 用系统存储过程sp_dropdevice删除命名备份文件时,若被删除的“命名备份设备”的类型为磁盘,那么必须指定DELFILE选项,但备份设备的物理文件一定不能直接保存在磁盘根目录下。例如, EXEC sp_dropdevice mybackupfile , DELFILE,8.2.1 创建备份设备,2创建临时备份设备 例如,如果只要进行数据库的一次性备份或测试自动备份操作,那么就用临时备份设备。 在创建临时备份设备时,要指定介质类型(磁盘、磁带)、完整的路径名及文件名称。可使用T-SQL的BACKUP DATABASE语句创建临时备份设备。对使用临时备份设备进行的备份,
15、SQL Server 2008系统将创建临时文件来存储备份的结果。 语法格式: BACKUP DATABASE database_name | database_name_var TO , n 其中, := backup_file_name | backup_file_name_evar | DISK | TAPE = temp_file_name | temp_file_name_evar 【例8.3】 在磁盘上创建一个临时备份设备,它用来备份数据库PXSCJ。 USE master GO BACKUP DATABASE PXSCJ TO DISK= E:datatmppxscj.bak,8
16、.2.1 创建备份设备,3使用多个备份设备 SQL Server可以同时向多个备份设备写入数据,即进行并行的备份。并行备份将需备份的数据分别备份在多个设备上,这多个备份设备构成了备份集。图8.1显示了在多个备份设备上进行备份以及由备份的各组成部分形成备份集。,图8.1 使用多个备份设备及备份集,8.2.1 创建备份设备,在用多个备份设备进行并行备份时,要注意: (1)设备备份操作使用的所有设备必须具有相同的介质类型。 (2)多设备备份操作使用的设备其存储容量和运行速度可以不同。 (3)可以使用命名备份设备与临时备份设备的组合。 (4)从多设备备份恢复时,不必使用与备份时相同数量的设备。,8.2
17、.2 备份命令,1备份整个数据库 语法格式。 【例8.4】 使用逻辑名test1在E盘中创建一个命名的备份设备,并将数据库PXSCJ完全备份到该设备。 USE master GO EXEC sp_addumpdevice disk , test1, E:datatest1.bak BACKUP DATABASE PXSCJ TO test1,8.2.2 备份命令,本例的执行结果如图8.2所示。,图8.2 使用BACKUP语句进行完全数据库备份,8.2.2 备份命令,【例8.5】 将数据库PXSCJ备份到多个备份设备。 USE master GO EXEC sp_addumpdevice dis
18、k,test2,E:datatest2.bak EXEC sp_addumpdevice disk,test3,E:datatest3.bak BACKUP DATABASE PXSCJ TO test2, test3 WITH NAME = pxscjbk,8.2.2 备份命令,2差异备份数据库 对于需频繁修改的数据库,进行差异备份可以缩短备份和恢复的时间。只有当已经执行了完全数据库备份后才能执行差异备份。在进行差异备份时,SQL Server将备份从最近的完全数据库备份后数据库发生了变化的部分。 语法格式: BACKUP DATABASE database_name | database_
19、name_var READ_WRITE_FILEGROUPS , FILEGROUP = logical_filegroup_name | logical_filegroup_name_var ,.n TO , n MIRROR TO ,.n .next-mirror WITH , DIFFERENTIAL /*其余选项与数据库的完全备份相同*/ ,8.2.2 备份命令,SQL Server执行差异备份时需注意下列几点: (1)若在上次完全数据库备份后,数据库的某行被修改了,则执行差异备份只保存最后一次改动的值; (2)为了使差异备份设备与完全数据库备份设备区分开来,应使用不同的设备名。 【例
20、8.6】 创建临时备份设备并在所创建的临时备份设备上进行差异备份。 BACKUP DATABASE PXSCJ TODISK =E:datapxscjbk.bak WITH DIFFERENTIAL,8.2.2 备份命令,3备份数据库文件或文件组 当数据库非常大时,可以进行数据库文件或文件组的备份。 语法格式: BACKUP DATABASE database_name | database_name_var ,.f /*指定文件或文件组名*/ TO ,.n MIRROR TO ,.n .next-mirror WITH , DIFFERENTIAL /*选项与数据库的完全备份相同*/ 其中,
21、 :=FILE = logical_file_name | logical_file_name_var | FILEGROUP = logical_filegroup_name | logical_filegroup_name_var ,8.2.2 备份命令,使用数据库文件或文件组备份时,要注意以下几点: (1)必须指定文件或文件组的逻辑名; (2)必须执行事务日志备份,以确保恢复后的文件与数据库其他部分的一致性; (3)应轮流备份数据库中的文件或文件组,以使数据库中的所有文件或文件组都定期得到备份; 【例8.7】 设TT数据库有2个数据文件t1和t2,事务日志存储在文件tlog中。将文件t1
22、备份到备份设备t1backup中,将事务日志文件备份到tbackuplog中。 EXEC sp_addumpdevice disk, t1backup, E:datat1backup.bak EXEC sp_addumpdevice disk, tbackuplog, E:datatbackuplog.bak GO BACKUP DATABASE TTFILE =t1 TO t1backup BACKUP LOG TT TO tbackuplog,8.2.2 备份命令,4事务日志备份 当进行事务日志备份时,系统进行下列操作: (1)将事务日志中从前一次成功备份结束位置开始,到当前事务日志结尾处
23、的内容进行备份。 (2)标识事务日志中活动部分的开始,所谓事务日志的活动部分指从最近的检查点或最早的打开位置开始至事务日志的结尾处。 进行事务日志备份使用BACKUP LOG语句。语法格式: BACKUP LOG database_name | database_name_var /*指定被备份的数据库名*/ TO ,.n /*指定备份目标*/ MIRROR TO ,.n .next-mirror WITH NORECOVERY | STANDBY = undo_file_name | NO_TRUNCATE |/*其余选项与数据库的完全备份相同*/ ,8.2.2 备份命令,下面讨论三个专用于
24、事务日志备份的选项。 NO_TRUNCATE选项:若数据库被损坏,则应使用NO_TRUNCATE选项备份数据库。使用该选项可以备份最近的所有数据库活动,SQL Server将保存整个事务日志。使用此选项进行数据库备份,当执行恢复时,可以恢复数据库和采用了NO_TRUNCATE选项创建的事务日志。 NORECOVERY选项:该选项将数据备份到日志尾部,不覆盖原有的数据。 STANDBY选项:该选项将备份日志尾部,并使数据库处于只读或备用模式。其中的undo_file_name是要撤销的文件名,该文件名指定了容纳回滚(roll back)更改的存储。如果随后执行RESTORE LOG操作,则必须撤
25、销这些回滚更改。如果指定的撤销文件名不存在,SQL Server将创建该文件;如果该文件已存在,则SQL Server将重写它。 【例8.8】 创建一个命名的备份设备PXSCJLOGBK,并备份PXSCJ数据库的事务日志。 USE master GO EXEC sp_addumpdevice disk , PXSCJLOGBK , E:datatestlog.bak BACKUP LOG PXSCJ TO PXSCJLOGBK,8.2.2 备份命令,该语句的执行结果如图8.3所示。,图8.3 事务日志备份,8.2.3 使用对象资源管理器进行备份,以备份PXSCJ数据库为例,在备份之前先在E盘根
26、目录下创建一个备份设备,名称为PXSCJBK,备份设备的文件名为pxscjbk.bak。 在SQL Server Management Studio中进行备份的步骤如下。 第1步:启动SQL Server Management Studio,在对象资源管理器中选择“管理”,右击鼠标,如图8.4所示,在弹出的快捷菜单上选择“备份”菜单项。,图8.4 选择备份功能,8.2.3 使用对象资源管理器进行备份,第2步:在打开的“备份数据库”窗口(如图8.5所示)中选择要备份的数据库名,如PXSCJ;在“备份类型”栏选择备份的类型,有3种类型:完整、差异、事务日志,这里选择完整备份。,图8.5 “备份数据
27、库”对话框,8.2.3 使用对象资源管理器进行备份,第3步:选择了数据库之后,窗口最下方的目标栏中会列出与PXSCJ数据库相关的备份设备。可以单击“添加”按钮在“选择备份目标”对话框中选择另外的备份目标(即命名的备份介质的名称或临时备份介质的位置),有两个选项:“文件名”和“备份设备”。选择“备份设备”选项,在下拉框中选择需要将数据库备份到的目标备份设备,如mybackupfile,如图8.6所示,单击“确定”按钮。当然,也可以选择“文件名”选项,然后选择备份设备的物理文件来进行备份。,图8.6 “选择备份目标”对话框,第4步:在“备份数据库”窗口中,将不需要的备份目标选择后单击“删除”按钮删
28、除,最后备份目标选择为“mybackupfile”,单击“确定”按钮,执行备份操作。备份操作完成后,将出现提示对话框,单击“确定”按钮,完成所有步骤。,8.3 恢复操作和恢复命令,8.3.1 检查点 在SQL Server运行过程中,数据库的大部分页存储于磁盘的主数据文件和辅数据文件中,而正在使用的数据页则存储在主存储器的缓冲区中,所有对数据库的修改都记录在事务日志中。日志记录每个事务的开始和结束,并将每个修改与一个事务相关联。 SQL Server系统在日志中存储有关信息,以便在需要时可以恢复(前滚)或撤销(回滚)构成事务的数据修改。日志中的每条记录都由一个唯一的日志序号 (LSN)标识,事
29、务的所有日志记录都链接在一起。 SQL Server系统对修改过的数据缓冲区的内容并不是立即写回磁盘,而是控制写入磁盘的时间,它将在缓冲区内修改过的数据页存入高速缓存一段时间后再写入磁盘,从而实现优化磁盘写入。将包含被修改过但尚未写入磁盘的数据的缓冲区页称为脏页,将脏缓冲区页写入磁盘称为刷新页。对被修改过的数据页进行高速缓存时,要确保在将相应的内存日志映像写入日志文件之前没有刷新任何数据修改,否则将不能在需要时进行回滚。,8.3.1 检查点,为了保证能恢复所有对数据页的修改,SQL Server采用预写日志的方法,即将所有内存日志映像都在相应的数据修改前写入磁盘。只要所有日志记录都已刷新到磁盘
30、,则即使在被修改的数据页未被刷新到磁盘的情况下,系统也能够恢复。这时系统恢复可以只使用日志记录,进行事务前滚或回滚,执行对数据页的修改。 SQL Server系统定期将所有脏日志和数据页刷新到磁盘,这就称为检查点。检查点从当前数据库的高速缓冲存储器中刷新脏数据和日志页,以尽量减少在恢复时必须前滚的修改量。 SQL Server恢复机制能够通过检查点在检查事务日志时保证数据库的一致性,在对事务日志进行检查时,系统将从最后一个检查点开始检查事务日志,以发现数据库中所有数据的改变。若发现有尚未写入数据库的事务,则将它们对数据库的改变写入数据库。,8.3.2 数据库的恢复命令,(1)进行安全检查。安全
31、检查是系统的内部机制,是数据库恢复时的必要操作,它可以防止由于偶然的误操作而使用了不完整的信息或其他数据库备份来覆盖现有的数据库。 当出现以下几种情况时,系统将不能恢复数据库: 使用与被恢复的数据库名称不同的数据库名去恢复数据库; 服务器上的数据库文件组与备份的数据库文件组不同; 需恢复的数据库名或文件名与备份的数据库名或文件名不同,例如,当试图将northwind数据库恢复到名为accounting的数据库中,而accounting数据库已经存在时,那么SQL Server将拒绝此恢复过程。 (2)重建数据库。当从完全数据库备份中恢复数据库时,SQL Server将重建数据库文件,并把所重建
32、的数据库文件置于备份数据库时这些文件所在的位置,所有的数据库对象都将自动重建,用户无须重建数据库的结构。 在SQL Server中,恢复数据库的语句是RESTORE。,8.3.2 数据库的恢复命令,1恢复数据库的准备 (1)使用图形界面方式查看所有备份介质的属性。 启动SQL Server Management Studio,在对象资源管理器中展开“服务器对象”,在其中的“备份设备”里面选择欲查看的备份介质,右击鼠标,(如图8.7所示),在弹出的快捷菜单中选择“属性”菜单项。,图8.7 查看备份介质的属性,8.3.2 数据库的恢复命令,在打开的“备份设备”窗口中单击“媒体内容”选项卡,如图8.
33、8所示,将显示所选备份介质的有关信息,例如备份介质所在的服务器名、备份数据库名、备份类型、备份日期、到期日及大小等信息。,图8.8 查看备份介质的内容并显示备份介质的信息,8.3.2 数据库的恢复命令,(2)使用RESTORE HEADONLY、RESTORE FILELISTONLY、RESTORE LABEL ONLY等语句可以得到有关备份介质更详细的信息。 例如,RESTORE HEADERONLY语句的执行结果是在特定的备份设备上检索所有备份集的所有备份首部信息。 语法格式: RESTORE HEADERONLY FROM /*指定还原时要使用的逻辑或物理备份设备*/ WITH CHE
34、CKSUM | NO_CHECKSUM , CONTINUE_AFTER_ERROR | STOP_ON_ERROR , FILE = file_number , MEDIANAME = media_name | media_name_variable , MEDIAPASSWORD = mediapassword |mediapassword_variable , PASSWORD = password | password_variable , REWIND , UNLOAD | NOUNLOAD ;,8.3.2 数据库的恢复命令,2使用RESTORE语句进行数据库恢复 使用RESTORE
35、语句可以恢复用BACKUP命令所做的各种类型的备份,但是需要引起注意的是:对于使用完全恢复模式或大容量日志恢复模式的数据库,在大多数情况下,在完整恢复模式或大容量日志恢复模式下,SQL Server 2008要求先备份日志尾部,然后还原当前附加在服务器实例上的数据库。 “尾日志备份”可捕获尚未备份的日志(日志尾部),是恢复计划中的最后一个相关备份。除非RESTORE语句包含WITH REPLACE或WITH STOPAT子句,否则,还原数据库而不先备份日志尾部将导致错误。,8.3.2 数据库的恢复命令,与正常日志备份相似,尾日志备份将捕获所有尚未备份的事务日志记录,但尾日志备份与正常日志备份在
36、下列几个方面有所不同: 如果数据库损坏或离线,则可以尝试进行尾日志备份。仅当日志文件未损坏且数据库不包含任何大容量日志更改时,尾日志备份才会成功。如果数据库包含要备份的、在记录间隔期间执行的大容量日志更改,则仅在所有数据文件都存在且未损坏的情况下,尾日志备份才会成功。 尾日志备份可使用COPY_ONLY 选项独立于定期日志备份进行创建。仅复制备份不会影响备份日志链。事务日志不会被尾日志备份截断,并且捕获的日志将包括在以后的正常日志备份中。这样就可以在不影响正常日志备份过程的情况下进行尾日志备份,例如,为了准备进行在线还原。,8.3.2 数据库的恢复命令,如果数据库损坏,尾日志可能会包含不完整的
37、元数据,这是因为某些通常可用于日志备份的元数据在尾日志备份中可能会不可用。使用CONTINUE_AFTER_ERROR进行的日志备份可能会包含不完整的元数据,这是因为此选项将通知进行日志备份,而不考虑数据库的状态。 在创建尾日志备份时,也可以同时使数据库变为还原状态。使数据库离线可保证尾日志备份包含对数据库所做的所有更改,并且随后不对数据库进行更改。当需要对某个文件执行离线还原以便与数据库匹配时,或按照计划故障转移到日志传送备用服务器并希望切换回来时,会用到此操作。,8.3.2 数据库的恢复命令,(1)恢复整个数据库。当存储数据库的物理介质被破坏,或整个数据库被误删除或被破坏时,就要恢复整个数
38、据库。在恢复整个数据库时,SQL Server系统将重新创建数据库及与数据库相关的所有文件,并将文件存放在原来的位置。 语法格式。 其他选项与之前介绍的BACKUP语句意义类似。 【例8.9】 使用RESTORE语句从一个已存在的命名备份介质PXSCJBK1中恢复整个数据库PXSCJ。 首先创建备份设备PXSCJBK1: USE master GO EXEC sp_addumpdevice disk, PXSCJBK1,E:dataPXSCJBK1.bak 使用BACKUP命令对PXSCJ数据进行完全备份: BACKUP DATABASE PXSCJTO PXSCJBK1,8.3.2 数据库的
39、恢复命令,恢复数据库的命令如下: RESTORE DATABASE PXSCJFROM PXSCJBK1WITH FILE=1, REPLACE 执行结果如图8.9所示。,图8.9 恢复整个数据库,8.3.2 数据库的恢复命令,(2)恢复数据库的部分内容。应用程序或用户的误操作如果无效更新或误删表格等,往往只影响到数据库的某些相对独立的部分。在这些情况下,SQL Server提供了将数据库的部分内容还原到另一个位置的机制,以使损坏或丢失的数据可复制回原始数据库。 语法格式: RESTORE DATABASE database_name | database_name_var ,.n /*指定需
40、恢复的逻辑文件或文件组的名称*/ FROM ,.n WITH PARTIAL, NORECOVERY , ,.n | , ,.n ; 其中, := FILE = logical_file_name_in_backup | logical_file_name_in_backup_var | FILEGROUP = logical_filegroup_name | logical_filegroup_name_var | READ_WRITE_FILEGROUPS ,8.3.2 数据库的恢复命令,(3)恢复特定的文件或文件组。若某个或某些文件被破坏或被误删除,则可以从文件或文件组备份中进行恢复,而
41、不必进行整个数据库的恢复。 语法格式: RESTORE DATABASE database_name | database_name_var ,.n FROM ,.n WITH RECOVERY | NORECOVERY , ,.n ,.n ;,8.3.2 数据库的恢复命令,(4)恢复事务日志。使用事务日志恢复,可将数据库恢复到指定的时间点。 语法格式: RESTORE LOG database_name | database_name_var ,.n FROM ,.n WITH RECOVERY | NORECOVERY | STANDBY = standby_file_name | sta
42、ndby_file_name_var | , ,.n | , | , ,.n ;,8.3.2 数据库的恢复命令,其中, := | STOPAT = datetime | datetime_var | STOPATMARK = mark_name | lsn:lsn_number AFTER datetime | STOPBEFOREMARK = mark_name | lsn:lsn_number AFTER datetime 执行事务日志恢复必须在进行完全数据库恢复以后。以下语句是先从备份介质PXSCJBK1进行完全恢复数据库PXSCJ,再进行事务日志事务恢复(假设已经备份了PXSCJ数据库
43、的事务日志到备份设备PXSCJLOGBK1中)。 RESTORE DATABASE PXSCJFROM PXSCJBK1WITH NORECOVERY, REPLACE GO RESTORE LOG PXSCJFROM PXSCJLOGBK1,8.3.2 数据库的恢复命令,(5)恢复到数据库快照。可以使用RESTORE语句将数据库恢复到创建数据库快照时的状态。此时恢复的数据库会覆盖原来的数据库。 语法格式: RESTORE DATABASE database_name | database_name_var FROM DATABASE_SNAPSHOT = database_snapshot_
44、name 【例8.10】 创建PXSCJ数据库的快照,并将数据库恢复到创建该快照时的状态。 首先创建PXSCJ数据库的快照: CREATE DATABASE PXSCJ_1ON(NAME=PXSCJ,FILENAME=E:dataPXSCJ_1.mdf) AS SNAPSHOT OF PXSCJ GO 接着对数据库做一些修改,以确定数据库是否恢复。恢复数据库的语句如下: USE master GO RESTORE DATABASE PXSCJ FROM DATABASE_SNAPSHOT=PXSCJ_1,8.3.3 使用图形向导方式恢复数据库,第1步:启动SQL Server Manageme
45、nt Studio,在对象资源管理器中展开“数据库”,选择需要恢复的数据库。 第2步:如图8.10所示,选择“PXSCJ”数据库,右击鼠标,在弹出的快捷菜单中选择“任务”菜单项,在弹出的“任务”子菜单中选择“还原”菜单项,在弹出的“还原”子菜单中选择“数据库”菜单项,进入“还原数据库-PXSCJ”窗口。,图8.10 选择还原数据库,8.3.3 使用图形向导方式恢复数据库,第3步:如图8.11所示,这里单击“源设备”后面的按钮,在打开的“指定备份”窗口中选择备份媒体为“备份设备”,单击“添加”按钮。在打开的“选择备份设备”对话框中,在“备份设备”栏的下拉菜单中选择需要指定恢复的备份设备。,图8.
46、11 “还原数据库”窗口的“常规”选项卡,8.3.3 使用图形向导方式恢复数据库,如图8.12所示,单击“确定”按钮,返回“指定备份”窗口,再单击“确定”按钮,返回“还原数据库-PXSCJ”窗口。,图8.12 指定备份设备,8.3.3 使用图形向导方式恢复数据库,第4步:选择完备份设备后,“还原数据库-PXSCJ”窗口的“选择用于还原的备份集”栏中会列出可以进行还原的备份集,在复选框中选中备份集,如图8.13所示。,图8.13 选择备份集,8.3.3 使用图形向导方式恢复数据库,第5步:在如图8.13所示窗口中单击最左边“选项”页,在窗口右边勾选“覆盖现有数据库”项,如图8.14所示,单击“确
47、定”按钮,系统将进行恢复并显示恢复进度。,图8.14 还原数据库,8.4 复制数据库,启动SQL Server配置管理器的方法在第1章中已经介绍。进入SQL Server配置管理器后,双击SQL Server代理服务,弹出SQL Server代理的属性框,如图8.15所示,单击“启动”按钮,启动该服务后就可以使用“复制数据库向导”了。,图8.15 启动SQL Server Agent服务,8.4 复制数据库,也可以直接在对象资源管理器中启动SQL Server 代理服务:在“对象资源管理器”窗口中右击“SQL Server代理”,选择“启动”选项,如图8.16所示。在弹出的“确认”对话框中单击
48、“是”按钮即可。,图8.16 在“对象资源管理器”窗口中启动SQL Server代理服务,8.4 复制数据库,使用“复制数据库向导”复制数据库的具体步骤如下。 第1步:启动SQL Server Management Studio,在“对象资源管理器”窗口中右击“管理”,选择“复制数据库”选项,打开“欢迎使用复制数据库向导”窗口,单击“下一步”按钮。 第2步:进入“选择源服务器”窗口,如图8.17所示,还可以选择身份验证方式,这里按照默认设置,单击“下一步”按钮。,图8.17 选择源服务器,8.4 复制数据库,第3步:进入“选择目标服务器”窗口,目标服务器默认为本地服务器,也可以单击文本框后的按钮,在弹出的目标服务器窗口中选择网络服务器。这里不做修改,单击“下一步”按钮。 第4步:进入“选择传输方法”窗口,这里选择默认的方法,单击“下一步”按钮。,