备份与恢复是我们使用数据库中不可缺少的部分也是我们在使用数据库时会经常碰到的问题当我们使用一个数据库时总希望数据库的内容是可靠的正确的但由于计算机系统的故障(硬件故障软件故障网络故障进程故障和系统故障)影响数据库系统的操作影响数据库中数据的正确性甚至破坏数据库使数据库中全部或部分数据丢失因此当发生上述故障后希望能重新建立一个完整的数据库该处理称为数据库恢复恢复子系统是数据库管理系统的一个重要组成部分恢复处理随所发生的故障类型所影响的结构而变化
恢复数据库所使用的结构
ORACLE数据库使用几种结构对可能故障来保护数据数据库后备日志回滚段和控制文件
数据库后备是由构成Oracle数据库的物理文件的操作系统后备所组成当介质故障时进行数据库恢复利用后备文件恢复毁坏的数据文件或控制文件
日志每一个Oracle数据库实例都提供记录数据库中所作的全部修改一个实例的日志至少由两个日志文件组成当实例故障或介质故障时进行数据库部分恢复利用数据库日志中的改变应用于数据文件修改数据库数据到故障出现的时刻数据库日志由两部分组成在线日志和归档日志
每一个运行的Oracle数据库实例相应地有一个在线日志它与Oracle后台进程LGWR一起工作立即记录该实例所作的全部修改在线日志由两个或多个预期分配的文件组成以循环方式使用
归档日志是可选择的一个Oracle数据库实例一旦在线日志填满后可形成在线日志的归档文件归档的在线日志文件被唯一标识并合成归档日志
回滚段用于存储正在进行的事务(为未提交的事务)所修改值的老值该信息在数据库恢复过程中用于撤消任何非提交的修改
控制文件一般用于存储数据库的物理结构的状态控制文件中某些状态信息在实例恢复和介质恢复期间用于引导Oracle
在线日志
一个Oracle数据库的每一实例有一个相关联的在线日志一个在线日志由多个在线日志文件组成在线日志文件填入日志项日志项记录的数据用于重构对数据库所作的全部修改后台进程LGWR以循环方式写入在线日志文件当当前的在线日志文件写满后LGWR写入到下一可用在线日志文件当最后一个可用的在线日志文件的检查点已完成时即可使用如果归档不实施一个已填满的在线日志文件一当包含该在线日志文件的检查点完成该文件已被归档后即可使用在任何时候仅有一个在线日志文件被写入存储日志项它被称为活动的或当前在线日志文件其它的在线日志文件为不活动的在线日志文件
Oracle结束写入一在线日志文件并开始写入到另一个在线日志文件的点称为日志开关日志开关在当前在线日志文件完全填满必须继续写入到下一个在线日志文件时总出现也可由DBA强制日志开关每一日志开关出现时每一在线日志文件赋给一个新的日志序列号如果在线日志文件被归档在归档日志文件中包含有它的日志序列号
检查点机制当检查点出现时检查点后台进程记住写入在线文件的下一日志行的位置并通知数据库写后台进程将SGA中修改的数据库缓沖区写入到磁盘上的数据文件然后由CKPT修改全部控制文件和数据文件的标头反映该最后检查点当检查点不发生DBWR当需要时仅将最近最少使用的数据库缓沖区写入磁盘为新数据准备缓沖区
归档日志
Oracle要将填满的在线日志文件组归档时则要建立归档日志或称离线日志其对数据库后备和恢复有下列用处
数据库后备以及在线和归档日志文件在操作系统或磁盘故障中可保证全部提交的事务可被恢复
在数据库打开时和正常系统使用下如果归档日志是永久保持在线后备可以进行和使用
如果用户数据库要求在任何磁盘故障的事件中不丢失任何数据那么归档日志必须要存在归档已填满的在线日志文件可能需要DBA执行额外的管理操作
归档机制决定于归档设置归档已填满的在线日志组的机制可由Oracle后台进程ARCH自动归档或由用户进程发出语句手工地归档当日志组变为不活动日志开关指向下一组已完成时ARCH可归档一组可存取该组的任何或全部成员完成归档组在线日志文件归档之后才可为LGWR重用当使用归档时必须指定归档目标指向一存储设备它不同于个有数据文件在线日志文件和控制文件的设备理想的是将归档日志文件永久地移到离线存储设备如磁带
数据库可运行在两种不同方式下NOARCHIVELOG方式或ARCHIVELOG方式数据库在NOARCHIVELOG方式下使用时不能进行在线日志的归档在该数据库控制文件指明填满的组不需要归档所以一当填满的组成为活动在日志开关的检查点完成该组即可被LGWR重用在该方式下仅能保护数据库实例故障不能保护介质(磁盘)故障利用存储在在线日志中的信息可实现实例故障恢复
数据库后备
不管为ORACLE数据库设计成什么样的后备或恢复模式数据库数据文件日志文件和控制文件的操作系统后备是绝对需要的它是保护介质故障的策略部分操作系统后备有完全后备和部分后备
完全后备一个完全后备将构成ORACLE数据库的全部数据库文件在线日志文件和控制文件的一个操作系统后备一个完全后备在数据库正常关闭之后进行不能在实例故障后进行在此时所有构成数据库的全部文件是关闭的并与当前点相一致在数据库打开时不能进行完全后备由完全后备得到的数据文件在任何类型的介质恢复模式中是有用的
部分后备
部分后备为除完全后备外的任何操作系统后备可在数据库打开或关闭下进行如单个表空间中全部数据文件后备单个数据文件后备和控制文件后备部分后备仅对在ARCHIVELOG方式下运行数据库有用因为存在的归档日志数据文件可由部分后备恢复在恢复过程中与数据库其它部分一致
数据库恢复
实例故障的恢复
当实例意外地(如掉电后台进程故障等)或预料地(发出SHUTDOUM ABORT语句)中止时出现实例故障此时需要实例恢复实例恢复将数据库恢复一故障之前的事务一致状态如果在在线后备发现实例故障则需介质恢复在其它情况Oracle在下次数据库起动时(对新实例装配和打开)自动地执行实例恢复如果需要从装配状态变为打开状态自动地激发实例恢复由下列处理
()为了解恢复数据文件中没有记录的数据进行向前滚该数据记录在在线日志包括对回滚段的内容恢复
()回滚未提交的事务按步重新生成回滚段所指定的操作
()释放在故障时正在处理事务所持有的资源
()解决在故障时正经历一阶段提交的任何悬而未决的分布事务