4.5 数据库恢复技术
故障分类
存储器结构
恢复与原子性
基于日志的恢复
并发事务的恢复
缓冲管理
非易失性存储器丢失信息的故障
ORACLE恢复故障分类
事务故障,
– 逻辑错误,因为某些内部错误条件导致事务不能完成
– 系统错误,因为某种错误条件 (如死锁 )导致数据库系统终止一个活跃事务
系统崩溃,停电故障或者其他软硬件故障导致系统崩溃,
– 故障 -停止假设,假设非易失性存储器的内容不会因系统崩溃而破坏
数据库系统通过许多完整性检查来防止磁盘数据被破坏
磁盘故障,磁头损坏或类似的磁盘故障可能破坏全部或部分磁盘存储器
– 假设损坏是可以检测到的,磁盘驱动器使用校验和来检测故障恢复算法
恢复算法是指即使发生故障也能确保数据库一致性和事务原子性及持久性的技术
恢复算法有两个部分
1,在正常事务处理过程中采取行动来确保有足够的信息用于从故障恢复
2,在故障发生后采取行动来将数据库内容恢复到一个确保原子性,一致性和持久性的状态存储器结构
易失性 (Volatile)存储器,
– 不能在系统崩溃后保存下来
– 例如,主存,高速缓存
非易失性 (Nonvolatile)存储器,
– 可以在系统崩溃后保存下来
– 例如,磁盘,磁带,闪存,非易失性 RAM (电池供电 )
稳定 (Stable)存储器,
– 虚构的能够经受任何故障的存储器
– 可用多个非易失性介质存储相同的副本来近似数据库恢复的目标保证 DB完整性、数据正确、一致:
维持事务的原子性;
故障后状态恢复。
恢复的基本原则和方法基本原则:冗余,重复存储。
方法:
( 1) 周期备份后备副本,对整个 DB进行拷贝;
( 2) 建日志,每一次更改作记录;
( 3) 处理:
DB已被破坏,先装入备份,再利用两个状态间的日志作恢复;
如果是错误数据,则可利用日志恢复。
使用日志的数据库恢复技术日志,日志是记录事务对 DB操作的相关信息。
基于记录项日志,一般记录更新操作 ( 插入,删除,
修改 ),包含修改数据项的新值,旧值:
<T,Start>
<T,X,V1,V2> (事务,数据项,旧值,新值 )
<T,Commit>
推迟更新技术
1 日志记录
( 1) 事务所有数据库更新操作推迟到提交时执行,先写日志,最后统一更新;
( 2) 事务所有更新记录必须先写入日志,才能达到提交点。
2 故障后恢复:
( 1) Redo(T)操作:对于 <T,X,V1,V2>日志,
将 X值改为 V2;
幂等性,redo ( redo… redo(T)..)= redo(T)
多次操作和一次操作效果一样。
恢复过程:
( 1) 扫描日志,建立提交事务表,未提交事务表;
( 2) 对于提交事务表中所有事务 T,按在日志中顺序正向执行 redo(T);
( 3)对于未提交事务表中事务 T,放弃 T,从日志中删除。
即时更新技术
1 日志记录
( 1) 先写日志,再更新,边记边写;
( 2)事务所有更新日志均已记录,才允许提交。
2 故障后恢复
( 1) undo(T)操作,满足幂等性,redo逆操作:
反向扫描日志,对于 <T,X,V1,V2>记录,将 X值改为 V1;
对已插入的新记录进行删除操作,对已删除的进行插入操作,对修改的数据恢复旧值。
恢复过程:
( 1) 扫描日志,建立提交事务表,未提交事务表;
( 2) 对提交事务表中所有事务 T,按日志中提交顺序正向执行 redo(T);
( 3)对未提交事务表中所有事务 T,按日志中顺序逆向执行 undo(T)。
缓冲技术
1 日志缓冲
2 数据库缓冲
3 规则:
( 1) 日志记录 <T,Commit>已写入磁盘 ( 永久介质 ),
才能进入提交状态;
( 2) <T,Commit>写入磁盘之前,必须写其它记录入磁盘;
( 3) 数据库中数据只有在相关日志被真正从缓冲区写入永久介质后,才可以真正修改物理存储中数据;
若数据库数据缓存不得不回写磁盘,须从日志缓存中将相关日志取出存入磁盘,再回写数据。
检测点基本概念
1 目标:提高恢复效率;
2 检测点:对应某一数据库状态,CHECKPOINT,作如下操作:
( 1) 所有缓存日志存入磁盘;
( 2) 数据缓冲中的被修改数据块写入磁盘;
( 3)磁盘中记下检测点。
恢复基于检测点共有五类事务:
( 1) 检测点前已经提交的事务;
( 2) 检测点前开始但在检测点还未提交,故障点前提交的事务;
( 3) 检测点前开始但在检测点和故障点尚未提交的事务;
( 4) 检测点后开始,故障点前提交的事务;
( 5)检测点后开始,故障点尚未提交的事务;
恢复
( 1) 检测点已经提交的事务,不需要做恢复工作;
( 2) 检测点之后提交的事务,进行 Redo(T)的操作 ;;
(3) 故障点还未提交的事务,进行 Undo(T)的操作。
Tc Tf
T1
T2
T3
T4
checkpoint system failure
后备副本的建立
( 1) 缓存日志写入磁盘日志文件;
( 2) 数据缓存中的更新数据写入磁盘;
( 3) 数据库数据转储;
在日志中建立一个转储记录。
并发事务的恢复
我们修改基于日志的恢复方案以允许多个事务并发执行,
– 所有事务共享单个磁盘缓冲区和单个日志
– 缓冲块可以具有被一个或多个事务更新的数据项
我们假设使用严格两阶段锁的并发控制
– 即未提交事务所做的更新对其他事务是不可见的
否则如果 T1 更新 A,然后 T2 又更新 A 并提交,最后
T1 必须夭折时,该怎样执行 undo?
日志登记与前面描述的相同,
– 不同事务的日志记录在日志中可能交错分布,
检查点技术及恢复时的操作必须改变
– 因为当执行检查点时可能有多个事务处于激活状态,
检查点的执行基本同前,除了检查点日志记录现在形如
< checkpoint L>
其中 L 是检查点时活跃事务的列表
– 我们假设当执行检查点时没有正在进行的更新操作 (以后对此可放宽 )
当系统从崩溃恢复时,首先做下列动作,
1,初始化 undo-list 和 redo-list 为空
2,从末尾开始反向扫描日志,直至发现第一条 <checkpoint
L> 记录时停止,
对在反向扫描过程中发现的每条记录,
如果是 <Ti commit>,将 Ti 加入 redo-list
如果是 <Ti start>,并且 Ti 不在 redo-list 中,则将 Ti 加入 undo-list
3,对 L 中的每个 Ti,如果 Ti 不在 redo-list 中,则将 Ti 加入
undo-list
至此 undo-list 包含必须取消操作的未完成事务,而 redo-
list 包含必须重做的已完成事务,
现在恢复可以如下继续,
1,从最近的记录开始反向扫描日志,对 undo-list 中的每个 Ti 当遇到 <Ti start> 记录时停止,
扫描过程中,对属于 undo-list 中事务的每条日志记录执行 undo.
2,定位于最近的 <checkpoint L> 记录,
3,从 <checkpoint L>记录开始正向扫描日志,直至日志末尾,
扫描过程中,执行对属于 redo-list 中事务的每条日志记录执行 redo
ORACLE数据库备份与恢复数据库备份数据库恢复数据库备份物理备份、逻辑备份全局备份、部分备份联机备份、脱机备份数据文件的备份、日志文件的备份、控制文件的备份表空间的备份、表的备份、用户的备份全数据库备份:备份所有数据文件和控制文件;
表空间备份:备份单个表空间;
数据文件备份:备份单个数据文件;
控制文件备份:备份控制文件;
存档日志备份:备份存档日志文件。
联机备份(不一致的数据库备份):在进行备份时数据库的一部分正在被修改和写到磁盘;
脱机备份(一致的数据库备份):所有文件在同一时间点一致的备份。
表空间备份,是一种组成表空间的所有数据文件的备份。当在启用介质恢复的情况下操作时,可以完成两种不同类型的表空间备份:
⑴ 联机表空间备份(也叫热表空间备份):是当数据库打开并且表空间联机时完成的一种表空间备份。因为当备份进行时,表空间的数据可以被修改,所以这种备份被称为不一致的。
⑵ 脱机表空间备份:是当数据库打开但表空间脱机时完成的一种表空间备份。如果你使表空间正常地脱机(也就是说,Oracle
能够成功地执行一个表空间检查点并且关闭相关的数据文件),
从脱机表空间备份中生成的备份数据是一致的。
数据文件备份:备份单个数据文件,但通常采用表空间备份;
控制文件备份:
Alter Database Backup Controlfile to ‘location’
存档日志备份:数据库操作在 ARCHIVELOG方式中,
则联机日志被存档到 LOG_ARCHIVE_DEST.
存档日志的频率根据:生成的存档日志的数量和大小;
日志存档到的文件系统的大小。
逻辑数据库备份:
逻辑备份是对应于数据库中的指定模式和模式对象(例如表)的数据库信息的备份。要生成和使用逻辑数据库备份,使用 Oracle
实用工具 Export和 Import。
1、导出工具 ——( Export ):可以逻辑备份 Oracle数据库中的全部数据或数据的一个子集。
2、导入工具 ——( import):可以读取一个导出文件以重建特定的数据库表、模式或一个完整的数据库。
导出 /导入的其他用途:除用于辅助的数据库保护外,还可以用于把数据从一个数据库移动到另一个数据库中。
Export程序提供四种导出方式:
表方式;
用户方式;
表空间方式;
全数据库方式。
脱机数据库全备份
—— 数据文件、日志文件、控制文件和参数文件记录数据库所有文件的路径及文件名用 NORMAL关闭数据库用操作系统命令拷贝数据库所有文件重新启动 ORACLE实例联机数据库全备份:
确保数据库在 ARCHIVELOG模式下操作。
用联机表空间备份方法备份数据库所有表空间。
用控制文件备份方法备份数据库的控制文件。
联机表空间的备份:
确保数据库在 ARCHIVELOG模式下操作。
使要备份的表空间在线。
开始在线表空间的备份用操作系统命令拷贝表空间所对应的数据文件。
结束在线表空间的备份。
数据库恢复实例恢复崩溃恢复介质恢复实例启动时,ORACLE自动执行前面两种恢复 ;
介质恢复需要用户发出命令执行。
( 1)实例恢复:只使用在 Oracle并行服务器配置中,在打开数据库中一个实例发现其他实例崩溃时发生。
( 2)崩溃恢复:在单个实例数据库配置时发生,Oracle完成的自动恢复操作,用以从简单的系统崩溃中恢复。
( 3)介质恢复(磁盘失效恢复):在数据库的一个或多个数据文件丢失以后所进行的必要的恢复操作。在执行一个介质恢复以前,必须从一个备份集中重建一个或多个丢失的数据文件,或者切换到可用的图象拷贝。
数据库恢复包含两个阶段:前滚和回滚恢复阶段在前滚恢复阶段恢复管理器应用必要的事务日志组以
“重做”所有提交的不在数据库当前数据文件中的事务。
在前滚恢复后,Oracle必须执行回滚恢复。在回滚恢复期间,当系统崩溃时,Oracle使用数据库回滚段中的信息
“撤消”由任何打开(未提交的)事务所做的数据库改变。
在回滚恢复完成后,数据库包含到迫使进行恢复操作的问题发生以前的最后一次提交的事务为止所做的全部工作。
实例恢复或崩溃恢复包括以下步骤:
前滚恢复没有记录在数据文件中、但记录在联机重做日志的数据,称为高速缓存恢复;
打开数据库;
将故障时活动的所有事务标记为 DEAD,标记包含这些事务的回滚段为 PARTLY AVAILABLE;
回滚死的事务作为 SMON恢复的一部分;
解决任何未决的分布式事务;
在新事务遇到死事务锁住的行时,可以自动回滚死事务以释放锁。
完全恢复:用于恢复所有已提交事务工作的一种恢复操作。
数据库恢复(封闭式数据库恢复):对数据库的所有数据文件中丢失的工作进行恢复。在数据库已安装但关闭的情况下执行数据库恢复。
表空间恢复(开放式数据库恢复):可以对特定表空间的所有数据文件中丢失的工作进行恢复。你能够在数据库打开并且受损的表空间脱机,或者数据库已安装但关闭的情况下执行一个表空间恢复。
数据文件恢复(开放式数据库恢复):对具体数据文件中丢失的工作进行恢复。你能够在数据库打开并且受损的表空间脱机,或者数据库已安装但关闭的情况下执行一个数据文件恢复。
不完全恢复:仅恢复部分提交事务工作的一种恢复操作。
基于时间的恢复(基于时间点恢复):将数据库中已提交事务的工作恢复到一个特定的时间点为止(例如,恢复到星期一上午 8:05,刚好在用户删除一个重要表之前。
基于改变的恢复:将数据库中已提交事务的工作恢复到一个特定的系统修改序列号( SCN)为止。
基于取消的恢复:将数据库中已提交事务的工作恢复到应用的一个特定日志组为止。
介质故障恢复
重装数据库后备副本文件,恢复到转储时的数据库一致性状态
利用在此之后转储的 REDO日志文件副本将数据库恢复到最近点 (类似于系统故障恢复 )
Import应用程序装入由 Export应用程序卸出的数据。
IMP [username/password] PARFILE = filename
IMP [username/password] 参数 1 参数 2 …,..
思考题:
1.为什么必须先写日志文件,后写数据库?
2.具有检查点的恢复技术有什么优点?
3.ORACLE数据备份的方式有哪几种?
2.简述 ORACLE恢复方法。