事务与数据库恢复原理(二)

2014-11-24 15:53:30 · 作者: · 浏览: 5
户只能看到修改之前的数据。
隔离性解决了:
脏读(一个事务读取到了另一个事务中的、还没有提交的、更改过的数据);
不可重复读(当一个事务读取了某些数据后,另一个事务修改了这些数据并进行了提交。当再次读取这些数据时,发现这些数据被修改了。)
幻向 (当一个事务读取了某些数据后,另一个事务又插入或删除了符合查询条件的某些行,当再次查询时发现符合查询条件的记录多了或少了。)
4、 持久性 (Durability)
即一个事务一旦提交成功,它对数据库中的数据所做的修改也就永久性的保存下来了。
ORACLE 是利用保存在撤销段中的信息为语句或事务提供对一致性视图。在撤销段中保存了所有未提交的事务和最近提交的事务修改之前的数据即“前映像”。
读一致性实现机制(执行原理):
查询语句进入执行状态时,ORACLE会为它分配以个当前的SCN。该查询语句在数据缓冲区中搜索所需的数据块时,只会读取SCN小于或等于该SCN的数据块。如果所需的数据块的SCN大于该SCN,则该查询语句就会从撤销段中获得对应的数据块的原始版本,并且该版本的SCN同样需要小于或等于该SCN,这样通过对数据块SCN的比较,该查询语句就只会返回在它开始之前就语句提交的数据。保证了不会读取到未提交事务所产生的脏数据块,也不会读取到该查询语句开始执行之后才提交的数据块。
事务与数据库恢复原理
数据库恢复的基本单位就是事务。数据库的恢复机制包括一个恢复子系统和一条特定的数据结构。实现可恢复性的基本原理就是重复存储数据,即数据冗余(data redundancy).
数据转储
即手动地火借助实用工具将部分或整个数据库导出或复制到指定的盘符或介质上保存起来的过程。被转储后得到的文件被称为备份或副本。
按转储时的状态分为:静态转储和动态转储
静态转储:在没有事务运行的情况下进行转储,即在数据库处于一致性状态下操作。得到的副本一定是一致性的。但是会降低数据库的可用性。因为在转储期间不能运行任何事务。
动态转储:即不需要等待事务停止就可以执行转储操作。得到的副本不能保证一致性。转储的副本加上转储后的事务日志文件才能够把数据恢复到一定时刻的一致性状态。
按转储的方式分为:海量转储和增量转储
海量转储:即将整个数据库全部每次转储。
增量转储:指每次只转储自上次转储以来修改过的数据。
日志文件是用来在数据文件之外记录事务对数据库的修改操作的文件。数据文件记录的是操作结果。而日志文件记录的是事务及其操作。
日志文件中一般记录以下重要信息:
1、 事务的标识。(开始标记、结束标记、或自动产生的唯一性标识号);
2、 操作的类型(增、删、改);
3、 操作的对象;
4、 修改前的数据(块)(对插入而言,该项为空);
5、 修改后的数据(块)(对删除而言,该项为空);
故障的种类与恢复策略
故障分类:事务故障、系统故障、介质故障
恢复数据库的基本策略:定期转储数据库、登记日在文件、针对不同故障采用不同的方法、考虑数据丢失对业务的影响。
事务故障及恢复策略
事务故障是指事物在运行到正常结束之前被中止的故障。
恢复方式是ORACLE系统自动恢复的。即反向扫描日在文件,查找故障事务的一个修改操作。对该事务的该修改操作执行逆操作,直到事务的开始标记。
系统故障及恢复策略
是指造成DBMS停止运行的任何事件,使得需要重新启动DBMS。
恢复方式是ORACLE系统自动恢复的。即正向扫描日志文件,查找在故障发生前已经提交的事务,将其事务标记为重做(redo)队列;同时查找在故障发生时还没有完成的事务,将其事务标记为撤销(undo)队列;然后对重做队列中的各个事务进行重做处理(即正向扫描日志文件,对每个需要重做的事务重新执行在日志文件中登记的操作,然后将操作后的结果写入数据文件)。最后对撤销队列中的各个事务进行撤销处理(即反向扫描日志文件,对其中的各个事务的各个修改操作执行逆操作。)。
介质故障及恢复策略
介质故障是指硬件上的故障(磁盘损坏、电路故障等)。
恢复方式是:先重新安装数据库,然后重做所有已完成的事务(即 1、装入离故障发生时刻最近的转储副本。对于动态转储的情况,还需要装入转储开始时的日志文件副本,利用恢复系统故障的方法,这样才能恢复到转储开始时刻的数据库一致性状态。2、装入离故障发生时刻最近的日志文件副本,利用恢复系统故障的方法,将数据库恢复到转储该日志文件时的一致性状态。 3、重新运行自最近转储日志文件时刻到发生故障时刻的所有修改数据的事务。即可将数据库恢复到发生故障时刻的一致性状态)。
具有检查点的数据库恢复技术
具有检查点的数据库恢复技术就是在日志文件中增加了一类新的记录(检查点记录),并增加了一个重新开始文件。DBMS会动态地去维护日志文件,主要所做的工作有:
1、 暂时中止现有的事务的执行;
2、 将内存中的当前日志缓冲区中的日志记录写入到日志文件中;
3、 把内存中的当前数据缓冲区中的数据写入数据文件中;
4、 在日志文件中写入检查点记录(内容为:发生检查点事件时所有正在执行的事务清单;这些事务的最近一个日志记录的地址;),并将该检查点记录在日志文件中的位置写入重新开始文件中;
5、 重新开始执行现有的事务。
具有检查点的数据库恢复步骤;
1、 从重新开始文件中找到最后一个检查点记录在日志文件中的地址,再由该地址在日志文件中找到最后一个检查点记录;
2、 由该检查点记录得到在检查点时刻所有正在执行的事务清单;
3、 从检查点时刻开始,正向扫描日志文件,如果有新开始的事务(即在检查点时刻还有没有提交的事务,或在检查点之后才启动的事务),就将其放入撤销队列中。如果该新事务在故障发生之前已经被提交过,就将其从撤销队列放入重做队列中。
4、 由该检查点记录得到事务最近一个日志记录的地址,从而得到日志记录的内容;
5、 按日志记录的内容,对撤销队列中的事务执行UNDO操作,对重做队列中的事务执行REDO操作。
ORACLE 数据库的备份及恢复概要
物理备份(Physical Backups) :将要备份的文件即数据文件、日志文件、初始化参数文件、重做日志文件、控制文件等从一个位置复制到另一个位置。
逻辑备份(Logical Backups) :利用数据泵(EXPDP)等工具或命令,将数据库中的数据读出,然后再写入一个文件。
数据库的恢复分为:数据库修复、数据库恢复
数据库修