第11章:备份与恢复本章内容备份的概念备份的类型备份设备类型备份的策略与规划执行数据库备份执行数据库恢复问题由于硬件或其它因素系统崩溃了,重要数据没有了怎么办?系统要升级,要把数据从一台机器移到另一台机器,如何做到?数据备份的重要性进行数据备份的主要目的是为了防止数据丢失造成数据损失的主要因素:介质故障用户的错误操作服务器的彻底崩溃备份的重要性介质故障介质故障称为硬故障(HardCrash)。硬故障指外存故障,如:磁盘损坏;磁头碰撞;瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。备份的重要性用户的错误操作用户无意或恶意地在数据库上进行大量的非法操作,如删除了某些重要的数据、表格,甚至删除了整个数据库,使数据库系统处于难于使用和管理的混乱局面。备份的重要性服务器的彻底崩溃数据库服务器彻底瘫痪计算机病毒计算机病毒是具有破坏性、可以自我复制的计算机程序。备份的重要性不可预料因素自然灾害、电源故障、盗窃等。备份的概念对数据库或事务日志进行拷贝,数据库备份记录了进行备份操作时数据库中所有数据的状态。主要由DBA完成日志文件——用来记录所有更新事务的文件。任一事务任一次对数据库的更新,都必须在日志文件中登入一条记录。日志文件日志文件的格式和内容不同数据库系统采用的日志文件格式并不完全一样。对于以记录为单位的日志文件,其内容主要包括:各个事务的开始(BEGINTRANSACTION)标记更新操作的类型(插入、删除或修改)操作对象更新前数据的旧值(对插入操作而言,此项为空值)更新后数据的新值(对删除操作而言,此项为空值)各个事务的结束(COMMIT或ROLLBACK)标记日志文件在数据库恢复中起着非常重要的作用。可用来进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。重装后备副本只能将数据库恢复到备份时的状态,要想恢复到故障发生时的状态,必须重新运行自备份以后的所有更新事务。备份的概念备份设备的类型磁盘设备磁带设备命名管道设备SQLServer使用物理设备或逻辑设备两种方式来标识备份设备。逻辑备份设备是物理备份设备的别名,更能简单有效地描述备份设备的特征。例:物理备份设备名称C:\Backups\Accounting\Full.bak逻辑备份设备名称Accounting_Backup备份策略与规划SQLServer2000中备份对话框的四个选项完全数据库备份差异数据库备份事务日志备份文件和文件组备份备份的概念备份策略(P265)(1)只备份数据库数据库回复到上次备份结束时的状态优点:操作和规划简单正常运行TaTbTf备份继续运行事务故障发生点恢复重装副本(2)备份数据库和事务日志可使数据库回复到意外发生前的状态正常继续运行事务故障运行备份并登记日志文件发生点TaTbTf恢复继续运行并登记日志利用日志恢复事务重装副本可考虑使用备份数据库和事务日志策略的情况数据至关重要,如银行的取款系统可以备份数据库的资源相对有限要求精确恢复数据库状态到意外发生前的某一时刻数据库更新比较频繁(3)增量备份仅备份上次全面备份以来,数据库又发生的一系列变化。增加备份速度,减少备份时间。增量备份无法将数据库恢复到出现意外前某一指定时刻,只能将数据库恢复到上一次增量备份结束的时刻。为了减少数据损失,建议用户在进行增量备份之间的时间间隔内执行事务日志备份。综合数据备份方案综合使用数据库备份策略,可大大提高数据库系统的安全性。进行数据库备份根据系统运行的实际情况,周期性地对数据库进行全面备份在每两次全面备份之间间隔性地进行数据库的增量备份在每两次增量备份之间进行事务日志的备份进行数据库恢复利用最近的全面数据库备份恢复系统利用最近的数据库增量备份恢复数据库利用最近一次进行过数据库增量备份后的事务日志恢复数据库系统创建数据库备份设备对数据库进行备份执行数据库备份创建备份设备创建永久备份设备的原因为将来的备份重复使用备份文件自动化备份任务利用系统存储过程sp_addumpdevice创建备份设备指定逻辑名称系统表sysdevices中存储逻辑名称和物理名称USEmasterEXECsp_addumpdevice'disk','mybackupfile','c:\temp\mybackupfile.bak'创建不具备永久设备的备份文件创建不具备永久设备的备份文件的原因执行一次性备份测试用户准备自动化的备份操作利用BACKUPDATABASE语句创建临时备份文件指定媒体类型(磁盘、磁带或命名管道)指定完全路径名和文件名USEmasterBACKUPDATABASENorthwindTODISK='C:\Temp\Mycustomers.bak'备份数据库简单语法(详细可参见联机帮助)BACKUPDATABASEdatabase_nameTObackup_device[,...n][WITHDIFFERENTIAL]例:备份mydb1数据库到设备mybackupfilebackupdatabasemydb1tomybackupfile进行增量备份备份数据库(续)备份一个事务日志:BACKUPLOGdatabase_nameTObackup_device[,...n][WITHNO_TRUNCATE]备份特定的文件或文件组:BACKUPDATABASEdatabase_name|file_or_filegroup[,...n]TObackup_device[,...n]……(例子参见P273)不清空原有的日志数据通过企业管理器进行数据库备份通过企业管理器创建数据库备份设备通过企业管理器对数据库进行备份执行数据库恢复还原数据库RESTOREDATABASEdatabase_name[FROMbackup_device[,...n]][WITH[[,]{NORECOVERY|RECOVERY}][[,]REPLACE]例:RESTOREDATABASEMYDB1FROMmybackupfile执行数据库恢复(续)还原事务日志RESTORELOGdatabase_name[FROMbackup_device[,...n]][WITH[[,]{NORECOVERY|RECOVERY}][[,]STOPAT=datetime]](例子参见P275)通过企业管理器进行数据库恢复(P274)