第11章数据库的日常维护与管理本章学习目标l熟练进行数据库的备份与还原操作l灵活运用各种数据导入导出方式11.1数据库备份与还原11.1.1数据库备份1.数据库备份概述数据库备份是指制作数据结构、对象和内容的拷贝。与备份对应的是还原。数据库备份与还原可以在系统发生意外故障时修复数据,保护数据库中的关键数据(重要的数据信息,并不一定是所有数据)免遭破坏。SQLServer提供了一套功能强大的数据备份和还原工具,用户可以选择以下几种方式备份数据库:(1)全库备份制作数据库中所有内容的副本,所以占用的空间和时间较多。(2)差异备份只备份最后一次全库备份以来被修改的数据,占用的时间和空间较少。(3)事务日志备份只备份最后一次日志备份以来所有的事务日志记录。备份所用的时间和空间更少。利用事务日志备份进行恢复时,可以指定恢复到某一个事务。如用户正在对XSCJ数据库中的“成绩表”进行修改时因病毒干扰而无法再次打开某些记录,此时可利用事务日志备份将“成绩表”恢复到破坏性操作执行前的状态。这是全库备份和差异备份所不能做到的。(4)文件和文件组备份即备份某个数据库文件或文件组。这种备份应该与事务日志备份结合起来才有意义。如某数据库中有两个数据文件,一次仅备份一个文件,而且在每个数据文件备份后,都要进行日志备份。在恢复数据时,可使用事务日志使所有的数据文件恢复到同一个时间点。2.备份数据库在SQLServer中,可以使用三种方法备份数据库,它们是使用备份向导备份数据库;使用企业管理器备份数据库;使用Transact-SQL语句备份数据库。(1)使用备份向导备份数据库【例11-1】使用备份向导备份实例数据库XSCJ。①在企业管理器中展开服务器组,然后展开一个服务器。②展开【数据库】文件夹,单击要备份的数据库,如XSCJ。③从【工具】菜单中选择【向导】命令,打开如图11-1所示的【选择向导】对话框。④单击【管理】节点,选择【备份向导】选项,出现【欢迎使用创建数据库备份向导】对话框。⑤单击【下一步】按钮,出现如图11-2所示的【创建数据库备份向导】对话框。⑥选择要备份的数据库XSCJ,单击【下一步】按钮,出现【键入备份的名称和描述】对话框,如图11-3所示。在该对话框中输入备份的名称和描述信息,然后单击【下一步】按钮,出现如图11-4所示的对话框。⑦选择一种备份方法之后,单击【下一步】按钮,出现如图11-5所示的【选择备份设备和属性】对话框。⑧在【选择备份设备】选项中选择【文件】方式,其中文件名和路径自定义。在【属性】选项中选择备份属性。如果要将此次备份追加到原有备份数据的后面,可以选择【追加到备份媒体】选项;如果要用此次备份的数据覆盖原有备份数据,可以选择【重写现有媒体】选项。单击【下一步】按钮,出现如图11-6所示的【备份验证和调度】对话框。图11-1【选择向导】对话框图11-2选择要备份的数据库图11-3【键入备份的名称和描述】对话框图11-4【选择备份类型】对话框图11-5选择备份设备和属性图11-6备份验证和调度⑨单击【更改】按钮,确定备份的计划,然后单击【下一步】按钮,出现备份向导的【完成】对话框,如图11-7所示。在该对话框中显示用户所设置的各个属性,单击【完成】按钮,即开始进行数据备份,之后出现【备份成功】对话框,如图11-8所示。此时,使用向导完成了数据库的备份,并在用户指定的位置生成了扩展名为.BAK的备份文件。图11-7【完成创建数据库备份向导】对话框图11-8【成功备份】对话框(2)使用企业管理器备份数据库【例11-2】使用企业管理器备份实例数据库XSCJ。①在企业管理器中,展开服务器组,然后展开当前服务器。②展开【数据库】文件夹,右击要备份的数据库如XSCJ,在弹出的快捷菜单中选择【所有任务】,在子菜单中选择【备份数据库】命令,如图11-9所示。图11-9在【所有任务】中选择【备份数据库】命令③当出现如图11-10所示的【SQLServer备份】对话框时,在【数据库】框中选择要备份的数据库,如XSCJ,在【名称】框中输入数据库备份集的名称。如果需要,也可以在【描述】框中输入一些说明文字,在【备份】区中选择备份方法。④指定备份目的地。在【目的】区域中单击【添加】按钮,并在如图11-11所示的【选择备份目的】对话框中指定一个备份文件或备份设备,出现如图11-10所示的对话框,在此对话框的【备份到】列表中给出了默认路径。一般为“\ProgramFiles\MicrosoftSQLServer\MSSQL\BACKUP\”,还应指定文件名,此处指定为“c:\XSCJ\XSCJ_Bak1”。注:在一次备份操作中可以指定多个目标设备或文件,这样可以将一个数据库备份到多个文件或设备中。图11-10【SQLServer备份】对话框图11-11【选择备份目的】对话框⑤在【重写】区域中选择备份方式:l若要将此次备份追加在原有备份数据的后面,则选择【追加到媒体】选项。l若要以此次备份的数据覆盖原有备份数据,则选择【重写现有媒体】选项。⑥在【调度】区域中制定备份日程。如果希望按照一定周期对数据库进行备份,可以选取【调度】复选框,单击按钮,并在如图11-12所示的【编辑调度】对话框中安排备份数据库的执行时间。图11-12【编辑调度】对话框⑦返回到【数据库备份】对话框以后,单击【确定】按钮,即开始执行备份操作,此时出现相应的提示信息。⑧当看到【备份操作已顺利完成】的提示信息时,单击【确定】按钮,结束备份操作。(3)使用Transact-SQL语句备份数据库使用Transact-SQL语句备份数据库时,一般先使用系统存储过程sp_addumpdevice创建备份设备,然后再使用BACKUPDATABASE命令备份数据库。①用系统存储过程sp_addumpdevice创建一个备份设备语法格式如下:sp_addumpdevice'设备类型','逻辑名称','物理名称'其中:l'设备类型'指备份设备的类型。备份设备即用来存放备份数据的物理设备,包括磁盘、磁带和命名管道,分别用‘DISK’、‘PIPE’和‘TAPE’表示。l'逻辑名称'备份设备的逻辑备份名称。l'物理名称'备份设备的物理备份名称。当建立一个备份设备时,通常要给该设备分配一个逻辑备份名称和一个物理备份名称,物理备份名称是计算机操作系统所能识别的该设备所使用的名字,如用磁盘做为备份介质时,那用户可以把物理路径设置为本地硬盘或网络上的物理名称;逻辑名称是物理设备名称的一个别名,存储在SQLServer的系统表sysdevices中,用于管理SQLServer备份设备,好处是比物理名称简单好记。【例11-3】在本地硬盘上创建一个备份设备,其逻辑名称为“data_backup”,物理名称为E:\back\data.bak】。相应的语句为:USEMASTERGOEXECUTEsp_addumpdevice'disk','data_backup','e:\back\data.bak'②用BACKUPDATABASE语句备份数据库使用BACKUPDATABASE语句同样可以对数据库进行全库备份、差异备份、日志备份或文件或文件组备份。全库备份语法格式为:BACKUPDATABASE数据库名TO备份设备名[WITH[NAME=‘备份名称’][,INIT|NOINIT]]其中:INIT参数表示新备份的数据覆盖当前备份设备上的每一项内容;NOINIT参数表示新备份的数据添加到备份设备上已有内容的后面。差异备份语法格式为:BACKUPDATABASE数据库名TO备份设备名WITHDIFFERENTIAL[,NAME=‘备份的名称’][,INIT|NOINIT]其中:DIFFERENTIAL子句的作用是,通过它可以指定只对在创建最新的数据库备份后数据库中发生变化的部分进行备份。日志备份的语法格式为:BACKUPLOG数据库名TO备份设备名[WITH[NAME=‘备份的名称’][,INIT|NOINIT]]文件与文件组备份的语法格式为:BACKUPDATABASE数据库名FILE=‘文件的逻辑名称’|FILEGROUP=‘文件组的逻辑名称’TO备份设备名[WITH[NAME=‘备份的名称’][,INIT|NOINIT]]其中如果备份的是文件,则写做[FILE=‘文件的逻辑名称’]的方式;如果备份的是文件组,则写做[FILEGROUP=‘文件组的逻辑名称’]的方式。如【例11-3】对XSCJ数据库做一次全库备份,备份设备为在本例中创建的data_backup本地磁盘设备,代码如下:BACKUPDATABASEXSCJTODISK='data_backup'WITHINIT,NAME='XSCJWQBEIFEN'【例11-4】对上例数据库进行差异备份,备份设备为在【例11-3】中创建好的data_backup本地磁盘设备。代码如下:BACKUPDATABASEXSCJTODISK='data_backup'WITHDIFFERENTIAL,NOINIT,NAME='XSCJBEIFEN'【例11-5】对XSCJ数据库进行日志备份,备份设备为在【例11-3】中创建好的data_backup本地磁盘设备。代码如下:BACKUPLOGXSCJTODISK='data_backup'WITHNOINIT,NAME='XSCJWQBEIFEN'【例11-6】将XSCJ数据库的XSCJ_DATA文件备份到本地磁盘设备data_backup。代码如下:BACKUPDATABASEXSCJFILE='XSCJ_DATA'TODISK='data_backup'11.1.2数据库还原1.使用企业管理器还原数据库【例11-7】使用企业管理器将数据库XSCJ还原至原来的状态。①展开服务器组,展开【数据库】。②右击XSCJ数据库,选择【所有任务】子菜单,然后单击【还原数据库】命令,出现图11-13所示的【还原数据库】对话框。图11-13【还原数据库】对话框③在【还原为数据库】下拉列表中选择XSCJ数据库。④在还原选项中选中【数据库】。⑤在【要还原的第一个备份】列表中,选择要还原的备份集。从下拉列表可以看到前面做过的两次备份,选择最新的备份文件,单击【确定】按钮开始还原。注:还原数据库前应将其他任何与要还原的数据库有关的操作结束。2.使用Transact-SQL语句还原数据库语法格式为:RESTOREDATABASE数据库名FROM备份设备[WITHMOVE‘逻辑文件名’to‘操作系统文件名’]【例11-8】使用RESTOREDATABASE语句,利用【例11-3】的数据库备份还原数据库。RESTOREDATABASEXSCJFROMdisk='e:\back\data.bak'【例11-9】还原完整数据库备份和差异备份。下例还原完整数据库备份后还原差异备份。RESTOREDATABASEXSCJFROMdata_backupWITHNORECOVERYRESTOREDATABASEXSCJFROMdata_backupWITHFILE=1【例11-10】还原数据库并将文件移动至C:\下的指定位置USEMASTERGORESTOREDATABASEXSCJFROMdatbackupWITHNORECOVERY,MOVE'XSCJ_data'TO'c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\XSCJ_data.mdf',MOVE'XSCJ_log'TO'c:\ProgramFiles\MicrosoftSQLServer\MSSQL\Data\XSCJ_log.ldf'RESTORELOGXSCJFROMdata_backupWITHRECOVERY11.2数据的导入与导出数据的导入、导出是指将文本文件或外部数据库(ACCESS,FOXPRO,EXCEL等)的数据转换成SQLServer格式或将SQLServer数据库转换为其他数据格式的过程。11.2.1数据转换服务DTSDTS是DataTra