第十二章 备份与恢复数据库
- 备份与恢复的概念
备份数据库就是将数据库中的数据以及保证数据库系统正常运行的有关信息保存起来,以备系统出现问题时恢复数据库时使用。- 备份数据库
备份是制作数据库的副本,包括数据库结构、对象和数据。备份数据库的主要目的是为了防止数据丢失。- 造成数据丢失的原因主要包括如下几种情况:
- 存储介质故障
- 用户的操作错误
- 服务器故障
- 由于病毒的侵害而造成的数据丢失或损坏
- 由于自然灾害而造成的数据丢失或损坏
- 造成数据丢失的原因主要包括如下几种情况:
- 恢复数据库
恢复数据库是指数据库系统在出现故障时利用先前建立的几余数据(备份副本)把数据库恢复到某个正确、一致的状态的过程。- 介质故障恢复。介质故障也称为灾难性故障,如磁盘崩溃引发大范围数据库数据的损坏和丢失,应对这类故障的主要方法是还原最近的一个数据库副本,并利用备份日志重做(REDO)已提交事务的操作,使数据库还原到故障前的某个工作状态。
- 非介质故障恢复。非介质故障也称为可修复性故障,很多数据库管理系统解决此类故障的基本方法是由DBMS的某个进程在数据库系统重新启动后,根据检测到的数据库不一致的状况,使用在线日志文件中的信息进行必要的REDO和UNDO操作来恢复数据库。非介质故-般不需要数据库的后备副本,其恢复工作是由数据库管理系统自动完成的。
- 备份数据库
- SQL Server的备份与恢复机制
- 恢复模式
- 简单恢复模式
简单恢复模式可最大限度地减少事务日志的管理开销,因为这种恢复模式不备份事务日志。但如果数据库损坏,则简单恢复模式将面临极大的数据丢失风险。在这种恢复模式下,数据只能恢复到最新备份状态。因此,在简单恢复模式下,备份间隔应尽可能短,以防止数据大量丢失
- 完整恢复模式
完整恢复模式完整地记录所有的事务,并将事务日志记录保留到对其备份完毕为止。
- 大容量日志恢复模式
大容量日志恢复模式只对大容量操作进行最小记录,使事务日志不会被大容量加载操作所填充。
- 查看和更改恢复模式
也可以使用ALTER DATABASE语更改和设置数据库的复模式,其基本格式如下:
ALTER DATABASE database_name SET
RECOVERY | FULL | BULK_LOGGED | SIMPLE
其中.“FULL”为完整恢复模式,“BULK_LOGGED”为大容量日志恢复模式,“SIMPLE”为简单恢复模式
- 简单恢复模式
- 备份内容及时间
- 备份内容:用户数据、系统数据
- 备份时间
- 在进行了下列操作后,最好能立刻对用户数据库进行备份:
- 创建数据库之后,或者在数据库中批量加载了数据之后。
- 创建索引之后。因为创建索引时,系统要重新排列一些数据,这个过程需要消耗时间和系统资源
- 执行了清理事务日志的操作之后。比如在执行了BACKUP LOG WITH TRUNCATION ONLY 或BACKUP LOG WITH NOLOG 语句后,系统会自动清空数据库目志,因此这时应对数库进行一次备份,因为此时的事务目志已经没有了用于恢复数据库的日志信息,因此也就不能通过日志来恢复数据库
- 执行了大容量数据操作之后,比如执行了SELECT INTO语句或BULK INSERT语句批量加载了大量数据
- 在进行了下列操作后,最好能立刻对用户数据库进行备份:
- SQL Server的备份机制
- 备份设备:备份设备即备份数据库的文件,这些文件可以建立在磁带上,也可以建立在磁盘上。备份设备在操作系统一级实际上就是物理存在的磁带或磁盘上的文件。
- 方案一:一种是先建立备份设备,然后再将数据库备份到备份设备上,称这样的备份设备为永久备份设备
- 方案二:另一种是直接将数据库备份到物理文件上,称这样的备份设备为临时备份设备
- 建立备份设备的T-SQL语句:sp_addumpdeviee 系统存储过程
其中各参数含义为:
[@ devtype=]'device_type':备份设备的类型。device_type 可以是下列值之一:
*Disk:备份设备为磁盘上的文件。
*Type:备份设备为Windows支持的任何磁带设备。
说明:在SQLServer的未来版本中将不再支持磁带备份设备。因此应避免在新的开发工作中使用该功能。
[@ logicalname=]'logieal_name':在BACKUP(备份)和RESTORE(恢复)语句中使用的备份设备的逻辑名称。logieal_name无默认值,且不能为NULL。
。[@physicalname=]'physieal_name :备份设备的物理文件名。物理文件名必须遵从操作系统文件名规则或网络设备的通用命名约定,并且必须包含完整路径。physical_name不能为NULL
注意:在远程网络位置上创建备份设备时,注意要确保启动数据库引警时所用的名称对远程计算机有相应的写权限
- 备份类型
- 数据库备份
- 完整数据库备份,完全转储,将备份特定数据库中的所有数据,以及可以恢复这些数据的足够日志,在进行完整备份时,不仅备份数据库的数据文件、日志文件,而且还备份文件的存储位置信息以及数据库中的全部对象。
- 差异数据库备份,差异转储,是备份从最近的完整备份之后数据库的全部变化内容它以前一次完整备份为基准点(称为差异基准),备份完整备份之后变化了的数据文件、日志文件以及数据库中其他被修故的内容。
- 在使用差异数据库备份时,建议遵循以下原则:
- 在每次完整数据库备份后,定期安排差异数据库备份。例如,可以每天执行一次差异数据库备份,对于活动性较高的系统,此频率可以更高。
- 在确保差异备份不会太大的情况下,定期安排新的完整数据库备份。例如,可以每周备份一次完整数据库
- 文件备份
- 文件备份,一个或多个文件或文件组中所有数据的完整备份
- 差异文件备份,差异文件备份包含自每个文件的最新完整备份之后发生了更改的数据区
- 事务日志备份
- 事务日志备份仅用于完整恢复模式和大容量日志恢复模式
- 数据库备份
- 常用备份策略
- 备份策略的制定包括定义备份的类型和频率、备份所需硬件的特性和速度、备份的测试方法以及备份媒体的存储位置和方法。
- 在制定备份和恢复策略时必须考虑各种因素。其中包括:
- 使用数据库的企业对数据库的目标,尤其是对可用性和防止数据丢失的要求。
- 每个数据库的特性,包括大小,使用方式、内容特性以及故障恢复要求等。
- 对资源的约束,例如硬件、人员、备份媒体的存储空间以及所存储媒体的物理安全性等。
- 完整数据库备份策略:完整数据库备份策略适合数据库数据不是很大,而且数据更改不是很频繁的情况。完整备份一般可以几天进行一次或几周进行一次。
- 完整数据库备份加日志备份:如果用户不允许丢失太多的数据,而且又不希望经常进行完整备份(因为完整备份占用的时间比较长),则可以将恢复模式设置为完整恢复模式或大容量日志恢复模式,这样就可在完整备份中间加入若干次日志备份。
- 完整数据库备份加差异数据库备份再加日志备份
- 实现备份
- 备份数据库的实现语句:
其中:
{database_namel@dalabase_name_var:要备份的数据库名
。:指定用于备份操作的逻辑备份设备或物理备份设备。llogical_device_namel:要将数据库备份到的备份设备的逻辑名称。
。IDISKITAPE|= physical_device_name1;指定磁盘文件或磁带设备。如果磁盘设备不存在,也可以在 BACKUP语句中指定它。如果存在物理设备目 BACKUP 语句中未指定INIT 选项,则备份将追加到该设备
·DIFFERENTIAL;表示进行差异数据库备份。默认情况下,BACKUP DATABASE 创建的是完整数据库备份。
。[,··n];可以为一个backup database 指定最多64个备份设备名称
·NAME=backup_sel_name;指定备份集的名称。名称最多可包含128 个字符。如果未指定NAME,它将为空
EXPIREDATE= date:指定备份集到期和允许被覆盖的日期
·RETAINDAYS=days;指定必须经过多少天才可以覆盖该备份媒体集
- 备份文件或文件组的backup 语句的基本格式为:
其中,<file_or_filegroup>[,…n]用于指定要进行备份的数据库文件或文件组
FILE=logical_le_name:要进行备份的文件的逻辑名称。
FILEGROUP=logical _filegroup_name;要进行备份的文件组的逻辑名称。
其他各选项的含义同 BACKUP DATABASE
备份日志的 backup 语何的基本语法格式为:
BACKUP LOG adtabase_name
TO<backup_device>[,…n]
[WITH {<general_WITH_options> | <log-specific_optionspec>} [,…n]]
[:]
<log-specific_optionspec>::=
{NORECOVERY | STANDBY=standby_file_name}
|NO|TRUNCATE
其中:
NORECOVERY:备份日志的尾部并使数据库处于 RESTORING 状态。当执行 RESTORE操作前保存日志尾部时,ORECOVERY 很有用。
STANDBY=standby_file_name:备份日志的尾部并使数据库处于只读和STANDBY状态.使用 STANDBY选项等同于 BACKUP LOG WITH NORECOVERY后跟 RESTORE WITH STANDBY.
NO_TRUNCATE:指定不截断日志,并使数据库引擎不用考虑数据库的状态而执行备份因此,使用 NO_TRUNCATE 执行的备份可能具有不完整的元数据。该选项允许在数据库损坏时备份日志
- 备份数据库的实现语句:
- 备份设备:备份设备即备份数据库的文件,这些文件可以建立在磁带上,也可以建立在磁盘上。备份设备在操作系统一级实际上就是物理存在的磁带或磁盘上的文件。
- SQL Server的恢复机制
- 还原的顺序
- 还原最新完整数据库备份而不恢复数据库
- 如果存在差异备份,则还原最新的差异备份而不恢复数据库
- 从最后一次还原备份后创建的第一个事务日志备份开始,使用NORECOVERY选项依次还原日志
- 恢复数据库,此步骤也可以与还原上一次日志备份结合使用。
- 实现还原
- 还原的顺序
- 恢复模式
- Oracle的备份与恢复机制
- Oracle数据库逻辑备份与恢复
- Oracle数据库物理备份与恢复
- 错题笔记
- 在数据量比较小但是更改非常频繁的数据库中,一般采用减少完整数据库备份次数,增加差异备份和日志备份次数的策略,这样进行数据备份时备份和恢复的速度都比较快,而且当系统出现故障时,丢失的数据也非常少
- WITH DIFFERENTIAL,NOINIT 中DIFFERENTIAL表示进行数据库差异备份,没有该选项表示进行完整数据库备份,NOINIT表示将该次备份内容追加到指定的媒体集上,以保留原有的备份集。
- SQL 2008支持在备份数据库的过程中,可以对数据库数据进行增、删、改等操Seryer作,因此,备份并不影响用户对数据库的操作,而且在备份数据库时还能将在备份过程中所发生的操作也全部备份下来。
- 在备份系统数据库时,tempdb是不需要备份的;master数据库在修改之后一般需要立即被备份;对用户数据库应该采用周期性备份的方法,备份的周期与数据更改频率以及用户需求有关。
- SQL Server 2008支持三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。简单恢复模式只用于测试和开发数据库,或用于主要包含只读数据的数据库(如数据仓库),这种模式并不适合生产系统。大容量日志恢复模式一般只作为完整恢复模式的附加模式,该模式不支持时点恢复。
- SQL Server支持对数据库中的一个数据文件进行还原的操作,在还原过程中数据库自动处于脱机状态,其他的文件都不能进行读写操作,因此将受到一定的影响。
- SQL Server 2008支持三种恢复模式,即简单恢复模式、完整恢复模式和大容量日志恢复模式。
- 简单恢复:无日志备份。自动回收日志空间以减少空间需求,实际上不再需要管理事务日志空间。 最新备份之后的更改不受保护。在发生灾难时,这些更改必须重做。只能恢复到备份的结尾。
- 完整恢复:需要日志备份。数据文件丢失或损坏不会导致丢失工作。可以恢复到任意时点(例如应用程序或用户错误之前)。
- 大容量日志恢复:需要日志备份。是完整恢复模式的附加模式,允许执行高性能的大容量复制操作。通过使用最小方式记录大多数大容量操作,减少日志空间使用量。如果在最新日志备份后发生日志损坏或执行大容量日志记录操作,则必须重做自该上次备份之后所做的更改。否则不丢失任何工作。可以恢复到任何备份的结尾。不支持时点恢复。
- 其中,如果符合下列任一要求,则使用完整恢复模式:您必须能够恢复所有数据;数据库包含多个文件组,并且您希望逐段还原读/写辅助文件组(以及可选地还原只读文件组);您必须能够恢复到故障点;您希望可以还原单个页;您愿意承担事务日志备份的管理开销。因此还原单个数据页是完整恢复模式功能
- master数据库是SQL Server系统里面最重要的数据库,因为它包含了系统中的有关数据库的所有信息。对master数据库只能进行完全数据库备份操作,SQLServer不支持在master数据库上进行差异备份、事务日志备份以及文件备份。
- 在进行数据恢复时,首先恢复完全备份,其次恢复差异备份,最后恢复日志备份。备份日志时使用Norecovery用来备份尾日志,这样备份日志的时候数据库处于恢复状态,别的进程就不能再访问数据库,日志就不会再增加,因此在还原的时候就可以正常恢复。还原备份的时候如果想同时还原之后的日志,必须加上Norecovery才可以还原,如果有多个日志备份,除了最后一个日志备份外,还原其他日志也必须加上Norecovery。
- 文件备份主要是对数据库中数据文件的备份,不对日志文件备份,因此在备份完成之后必须再对日志进行备份。
- 在SQL Server 2008中,有系统数据库master、model、msdb、tempdb和用户数据库。关于系统数据库和用户数据库的备份策略,最合理的是:系统数据库master、model、msdb因为被修改地较少,且对数据库系统影响较大,所以每次修改后应及时备份;而用户自定义的数据库(如学生成绩管理系统中的数据库)在使用过程中会经常不定期的修改,而且每次修改量不大,如果每次修改后重新备份则对系统操作冗余性较大,所以采用定期备份;而tempdb是系统临时文件的数据库,每次启动后都会清空,所以没必要备份。
- 复制数据库的方法有:①使用复制数据库向导在服务器之间复制或移动数据库。②还原数据库备份,若要复制整个数据库,可以使用BACKUP和RESTORE Transact-SQL语句。通常,还原数据库的完整备份用于因各种原因将数据库从一台计算机复制到其他计算机。
- 事务日志备份仅用于完整恢复模式和大容量日志恢复模式,它并不备份数据库本身,只备份日志记录,而且只备份从上次备份之后到当前备份时间发生变化的日志内容。但是不介许对大容量操作日志备份进行时点恢复。结尾日志备份在出现故障时进行,用于防止丢失数据,可以包含纯日志记录或者大容量操作日志记录。纯日志备份只包括一定时间间隔内的事务日志,不包含大容量操作日志记录。
- 当用户创建一个数据库时,系统自动将model数据库中的全部内容复制到新建数据库中。
- 完整数据库备份是所有备份方法中最基本也是最重要的备份,是备份的基础。在进行完整备份时,不仅备份数据库的数据文件、日志文件、而且还备份文件的存储位置信息以及数据库中的全部对象。差异数据库备份(也称为差异转储)是备份从最近的完整备份之后数据库的全部变化内容,在确保差异备份不会太大的情况下,定期安排新的完整数据库备份。在大容量日志恢复模式下可以进行日志备份。
- 清理事务日志的时候,不产生日志备份副本,建议对用户数据库进行备份。执行任一更新数据库的操作后,必须备份model数据库。tempdb数据库与其他任意数据库不同,不仅数据库中的对象是临时的,连数据本身也是临时的,删除用户数据库后,无需对tempdb数据库进行备份。新建数据库用户后,建议对master数据库进行备份。
- 设计良好的备份策略,除了要考虑特定业务要求外,同时还应尽量提高数据的可用性并尽量减少数据的丢失。备份策略的制定包括定义备份的类型和频率、备份所需硬件的特性和速度、备份的测试方法以及备份媒体的存储位置和方法。一般应将数据库和备份放置在不同的设备上,因此备份策略应考虑备份的存放位置和存放设备。