第十一章数据库的备份11.1 概述数据库的备份和恢复是数据库管理员的重要职责之一。
不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,从而引起数据库中的数据遭到破坏,当数据库中的数据遭到破坏时,数据库管理员必须尽快从数据备份中恢复数据,从而将损失减少到最小,保证用户的正常使用。
数据库的备份对成功恢复数据是非常关键的,数据库管理员必须根据企业的需要,制定出良好的备份和恢复策略,并认真实施它。
11.1.1 Oracle备份的概念数据库的备份是数据库的拷贝。
当原来的数据丢失时,可以使用备份重建丢失的信息(组成Oracle数据库的物理文件)。
该拷贝包括数据库的重要部分,如控制文件、存档日志和数据文件等。
备份包括物理备份和逻辑备份,物理备份是所采用的最主要的备份方式,是物理数据库文件的拷贝。
如果发生物理数据库丢失或崩溃,物理备份用于保证数据库在最小的数据丢失或没有数据丢失的情况下得到恢复。
它实际上进行上的是物理文件的拷贝,包含拷贝构成数据库的文件而不管其逻辑内容,进行物理备份可以采用两种方法:¾使用恢复管理器(Recovery Manager,简称RMAN)程序;¾操作系统文件备份命令,也叫做文件系统备份。
Oracle 支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup)。
相应的逻辑备份用于实现数据库对象(比如数据库表或存储过程)的恢复并且它是一个全面备份策略的必要的组成部分,它通常采用Oracle的Export程序将逻辑数据导出并以二进制的方式存储。
一般来说我们使用逻辑备份作为物理备份的必要补充。
11.1.2 Oracle数据库系统故障类型不管数据库系统如何精心设计、配置和优化,它们都难免出现系统或硬件故障,语句和进程故障。
这些故障大致可以分为以下几大类:1. 介质故障在读或写要求操作数据库的文件时可能会出现错误,这种故障就叫做介质故障,因为在读或写存储介质上的文件时会出现物理问题。
一个常见的介质故障的例子是磁头的碰撞会引起磁盘驱动器上所有文件的丢失。
介质故障是数据库数据的最大威胁。
介质问题主要有:¾磁盘磁头故障使磁盘驱动器上所有文件丢失。
¾数据文件、控制文件、联机或归档重做日志文件被意外删除、覆盖或损坏。
从介质故障中恢复的合适策略取决于受到影响的文件。
介质故障是备份与恢复策略所需494要重点考虑的问题,当数据库中的数据遭到损坏时,数据库管理员必须要尽快从数据备份中恢复数据,从而将损失减少到最小,保证用户的正常使用。
2. 用户或应用程序故障作为一个系统管理员,你很难阻止用户错误的发生,比如偶然Drop(删除)了一张表,当然我们可以通过加强数据库培训以及制定一些应用规则来减少这些事情的发生,另外还可以制定管理特权来避免用户错误。
象这类的用户错误可以要求数据库被恢复到发生错误前的某时间点。
Oracle提供了精确的及时点恢复,如数据库及时点恢复,表空间及时点恢复(tablespace point-in-time recovery,简称为TSPITR)。
例如,用户意外的删除某表,数据库可以恢复到删除表前的瞬间。
3. 数据库实例故障:当某些问题的发生导致Oracle实例不能继续运行时就出现了数据库的实例故障。
发生实例故障的原因可能是硬件问题,比如电源损耗;软件问题也可能导致实例故障,比如操作系统崩溃。
当发出SHUTDOWN ABORT或STARTUP FORCE语句时也可能会引起实例故障。
4. 语句故障:在Oracle程序中语句处理有逻辑错误时发生语句故障,例如某个表的范围已经全部被分配出去,而且装满了数据,这时候一个有效的INSERT语句不能插入一行数据,因为已经没有空间了,因此这个语句失效。
如果发生语句故障,则Oracle软件或操作系统返回错误代码。
语句故障通常不需要动作或恢复步骤:Oracle通过回滚语句的结果自动纠正语句故障,返回控制到应用程序。
当问题被更正后,用户可以简单的重新执行该语句。
例如,没有足够的范围被分配,那么系统管理员需要分配更多的范围,以便用户的语句能执行。
5. 进程故障:进程故障是数据库实例的用户、服务器或后台进程中的故障,如异常断开或进程异常终止。
当进程故障发生时,该进程及其子进程不可以继续工作,但是数据库实例的其它进程可以继续。
Oracle的后台进程PMON自动侦测失败的Oracle进程,如果失败的进程是用户进程或服务进程,PMON通过回滚失败进程的当前事务和释放进程正在使用的资源来解决该故障。
失败的用户和服务进程的恢复是自动的。
如果失败的进程是后台进程,实例通常不能正常的进行工作。
因此必须关闭和重新启动该实例。
6. 网络故障:在系统使用网络,例如局域网和电话线去连接客户端工作站和数据库服务器,或连接几个数据库服务器组成一个分布式数据库系统时,网络故障(如电话连接失败或网络通信软件故障)可能中断数据库系统的正常操作。
如:¾网络故障可能中断客户应用程序的正常执行,引起进程故障,这时候后台进程PMON 按前面介绍的方法为断开的用户进程侦测和解决失败的服务进程。
¾网络故障可能中断分布式事务的两阶段提交。
在网络故障解决后,每个有关数据库的后台进程RECO自动解决在分布式数据库系统中的所有节点上的仍未解决的任何分布式事务。
11.2 用于数据库备份与恢复的数据结构Oracle数据库的几个结构用于保护数据,防止受可能故障的影响。
这些结构对于成功的495进行备份和恢复是至关重要的,这些结构包括:¾重做日志¾回滚和撤消(UNDO)段¾控制文件11.2.1 重做日志联机重做日志记录对Oracle数据库的全部修改。
数据库的联机重做日志包括至少两个重做日志文件,日志文件是和数据文件分开存储的。
作为实例故障或介质故障恢复的一部分,Oracle 根据数据库的重做日志对数据文件进行适当的修改,它可以恢复数据库的数据到故障发生的瞬间。
每个数据库必须至少有两个联机重做日志组,每个联机重做日志组至少包括一个联机重做日志成员,它是一个包含重做记录的物理文件。
为了保护数据库(包括重做日志本身),Oracle 允许重做日志是多元的,也就是说Oracle可以在不同磁盘上维护重做日志的多个拷贝。
Oracle采用循环的方式使用这些重做日志文件来记录数据库的变化。
Oracle当前正在写的日志文件叫做现在联机重做日志。
后台进程LGWR通过相关的实例把所有的数据库变化记录到现在联机重做日志文件中去。
每个重做记录包含老的值和新的值,Oracle也会把老的值写到一个取消块中,这个取消块或者是在回滚段(工作在手工撤消管理方式下)或在取消表空间(工作在自动撤消管理方式下)。
我们可以配置Oracle数据库去归档已经写满了的联机重做日志的备份。
这种类型的日志叫做归档重做日志。
一个归档日志通过重做线程号和日志序列号被唯一的确定。
通过归档已满的联机重做日志文件,老的重做日志数据被保留以便介质恢复时使用。
通过备份恢复的数据文件,或者是非干净关闭系统时,可能都不是最新的数据。
在进行恢复时,数据文件必须通过应用联机重做日志和归档重做日志来更新。
11.2.2 回滚和取消段数据库可以工作在两种互斥的方式下:手工撤消管理(UNDO Management)方式或自动撤消管理方式。
在前一种情况下,必须创建和管理回滚段。
在后一种情况下,要创建一个包括系统管理的取消段的undo表空间。
回滚和取消段用于Oracle数据库的许多功能。
通常数据的回滚段保存正在进行的事务(未提交的事务)修改的数据的旧值。
在数据库恢复期间,回滚或取消段中的信息根据重做日志应用到数据文件中,用来撤消任何未提交的修改。
因此若数据库的恢复是必须的,则在回滚或用于从数据文件中去处所有未提交的数据后,数据处于一致状态。
11.2.3 控制文件一般来说,数据库的控制文件存储数据库的物理结构的状态。
控制文件对数据库的运行是非常重要的,它包括(但不限于)下列类型的信息:¾数据库信息¾线程检查点的状态496¾表空间和数据文件记录(文件名,数据文件检查点,读/写状态,脱机范围)¾重做线程(现在联机重做日志)¾日志记录(序列号,每个日志的SCN范围)¾RMAN备份和拷贝记录控制文件的状态信息,比如数据库检查点,现在联机重做日志文件等在进行崩溃恢复、实例恢复或介质恢复时保护Oracle数据库。
11.3 数据库的归档方式数据库可运行在两种不同方式下:NOARCHIVELOG方式(介质恢复无效)或ARCHIVELOG方式(介质恢复有效)。
数据库的运行方式对数据库的备份和恢复策略具有重要的影响。
归档日志对数据库备份和恢复有下列用处:¾数据库后备以及联机和归档日志文件,在操作系统和磁盘故障中可保证全部提交的事务可被恢复。
¾在数据库打开和正常系统使用下,如果归档日志是永久保存,联机后备可以进行和使用。
11.3.1 NOARCHIVELOG 方式数据库在NOARCHIVELOG方式下使用时,不能进行联机重做日志的归档。
控制文件中的信息指出不需要对已经填满的成员进行归档,因此只要填满的成员变为不活动的,那么LGWR进程就可以重新使用这个日志组中的成员。
NOARCHIVELOG方式只能保护数据库免受实例故障的影响,而不能免于介质故障。
只有最近的存储于联机重做日志组的中的数据库的修改才可以用于实例或崩溃恢复。
这些修改都足够用于进行崩溃恢复和实例恢复,因为Oracle不会覆盖联机重做日志文件,直到它的修改被写到了数据文件中。
然而它不可能通过使用归档重做日志进行介质恢复。
11.3.2 ARCHIVELOG 方式如果数据库在ARCHIVELOG方式下运行,可实施联机重做日志的归档。
控制文件中的信息指出一个已经填满的日志组成员不能被LGWR进程重写,直到这个成员被归档。
ARCHIVELOG方式下允许从磁盘故障和实例故障下的完全恢复,因为所有对数据库的修改已经被永久的保存到归档重做日志中了。
数据库在ARCHIVELOG方式下运行,可以设置为自动归档(Automatic Archiving)或手工归档(Manual Archiving),下面分别介绍这两种工作方式:1. 自动归档和归档后台进程在Oracle系统中,可以给Oracle实例配置一个附加的后台进程,归档进程(ARC n),它在每个组的联机重做日志文件变为不活动重做日志后进行自动归档。
自动归档使系统管理员不必手动的跟踪、归档已填满的日志组成员。
因为自动归档的便利性,自动归档已经是数据库系统工作在ARCHIVELOG方式下的最主要的选择了。