一、实例恢复概述:
实例恢复就是将online redo log里的记录应用到数据文件上,用来重新创建从最近的一次检查点以后发生的改变。
当管理员尝试打开一个非一致性关闭的数据库时自动发生。
二、实例恢复目的及相关概念:
1.目的:
由于oracle数据库管理数据库改变的工作原理,数据库实例失败后,数据库的文件有可能处于非一致状态。oracle实例恢复就是用来确保发生实例失败后,数据库仍然处于一致性状态。
2.redo thread概念:
一个redo thread是实例产生的所有改变的记录集。单实例数据库有一个redo thread,但RAC数据库有多个redo thread,每个实例对应一个redo thread。
3.实例失败造成数据不一致的根本原因:
当一个事务提交的时候,LGWR将遗留在内存中的记录和事务的SCN写入到online redo log中。但是,DBWR是在其方便的时候将修改的数据块写入 到数据文件中。因此,没提交的改变,有可能会暂时留在数据文件中,或者已提交的改变在数据文件中不存在,造成数据的不一致。
4.实例失败可能造成结果
如果一个open状态的数据库实例失败,不管是因为SHUTDOWN ABORT语句还是因为其他的非正常关闭,都有可能造成以下结果:
(1)事务提交的数据块只存在online redo log中,并没有写入到数据文件中。这些改变需要重新应用到数据库上。
(2)当实例失败的时候,数据文件中包含了没有提交的改变。这些改变必须回滚以保证事务级一致性。
三、什么时候进行实例恢复?
1.是否需要进行实例恢复依赖于redo thread。
2.当数据库实例在读写状态下被打开,redo thread会在控制文件中被标记成open状态。
3.当数据库实例被一致性关闭,redo thread会在控制文件中被标记成关闭。
4.如果实例启动,正常来说redo thread在控制文件中应该是关闭状态,此时若发现状态为open,则需要进行实例恢复。
5.数据库会在以下情况自动进行实例恢复:
(1)单实例数据库失败或者RAC所有实例失败后,第一次打开数据库。这种形式的实例恢复也叫crash recovery。oracle数据库将在实例恢复的同 时恢复在线redo thread。
(2)RAC环境下部分实例失败,会自动的通过配置中的可用的实例来进行实例恢复。
四、谁负责进行实例恢复?
SMON后台进程负责进行实例恢复,自动应用online redo。不需要人工的干预。
五、检查点在实例恢复中的重要性
1.检查点位置在实例恢复中决定了哪些改变需要应用到数据文件上。因为检查点位置可以保证所有SCN值比检查点SCN值小的改变,都已经保存到了数据文件 上。
2.检查点位置由CKPT进程来维护,CKPT定时查看DBWn对检查点队列上的脏块写入进度,确认完最后写入数据文件的脏块后,进行检查点位置更新为最后写入数据文件中的脏块 。
3.检查点位置决定了实例恢复的起点。而实例恢复的终点为online redo log中最后写入的记录(end of redo thread)
六、实例恢复的阶段
1:该阶段称为缓存恢复或者前滚,即将online redo log里的变化全部重新应用到数据文件上,该阶段结束后,数据文件中同时存在已提交和未 提交的数据。
2:该阶段称为回滚或事务恢复,即将失败前还未提交的变化,进行回滚,保证该阶段结束后,数据文件中只存在已提交的数据。
七、注意
1.实例恢复只需要online redo log和当前的在线数据文件来同步数据,以此保证他们的一致性。
2.若online redo log损坏,则无法进行实例恢复。
3.若undo 数据损坏,则实例恢复的 事务恢复阶段将会失败。
实例恢复就是将online redo log里的记录应用到数据文件上,用来重新创建从最近的一次检查点以后发生的改变。
当管理员尝试打开一个非一致性关闭的数据库时自动发生。
二、实例恢复目的及相关概念:
1.目的:
由于oracle数据库管理数据库改变的工作原理,数据库实例失败后,数据库的文件有可能处于非一致状态。oracle实例恢复就是用来确保发生实例失败后,数据库仍然处于一致性状态。
2.redo thread概念:
一个redo thread是实例产生的所有改变的记录集。单实例数据库有一个redo thread,但RAC数据库有多个redo thread,每个实例对应一个redo thread。
3.实例失败造成数据不一致的根本原因:
当一个事务提交的时候,LGWR将遗留在内存中的记录和事务的SCN写入到online redo log中。但是,DBWR是在其方便的时候将修改的数据块写入 到数据文件中。因此,没提交的改变,有可能会暂时留在数据文件中,或者已提交的改变在数据文件中不存在,造成数据的不一致。
4.实例失败可能造成结果
如果一个open状态的数据库实例失败,不管是因为SHUTDOWN ABORT语句还是因为其他的非正常关闭,都有可能造成以下结果:
(1)事务提交的数据块只存在online redo log中,并没有写入到数据文件中。这些改变需要重新应用到数据库上。
(2)当实例失败的时候,数据文件中包含了没有提交的改变。这些改变必须回滚以保证事务级一致性。
三、什么时候进行实例恢复?
1.是否需要进行实例恢复依赖于redo thread。
2.当数据库实例在读写状态下被打开,redo thread会在控制文件中被标记成open状态。
3.当数据库实例被一致性关闭,redo thread会在控制文件中被标记成关闭。
4.如果实例启动,正常来说redo thread在控制文件中应该是关闭状态,此时若发现状态为open,则需要进行实例恢复。
5.数据库会在以下情况自动进行实例恢复:
(1)单实例数据库失败或者RAC所有实例失败后,第一次打开数据库。这种形式的实例恢复也叫crash recovery。oracle数据库将在实例恢复的同 时恢复在线redo thread。
(2)RAC环境下部分实例失败,会自动的通过配置中的可用的实例来进行实例恢复。
四、谁负责进行实例恢复?
SMON后台进程负责进行实例恢复,自动应用online redo。不需要人工的干预。
五、检查点在实例恢复中的重要性
1.检查点位置在实例恢复中决定了哪些改变需要应用到数据文件上。因为检查点位置可以保证所有SCN值比检查点SCN值小的改变,都已经保存到了数据文件 上。
2.检查点位置由CKPT进程来维护,CKPT定时查看DBWn对检查点队列上的脏块写入进度,确认完最后写入数据文件的脏块后,进行检查点位置更新为最后写入数据文件中的脏块 。
3.检查点位置决定了实例恢复的起点。而实例恢复的终点为online redo log中最后写入的记录(end of redo thread)
六、实例恢复的阶段
1:该阶段称为缓存恢复或者前滚,即将online redo log里的变化全部重新应用到数据文件上,该阶段结束后,数据文件中同时存在已提交和未 提交的数据。
2:该阶段称为回滚或事务恢复,即将失败前还未提交的变化,进行回滚,保证该阶段结束后,数据文件中只存在已提交的数据。
七、注意
1.实例恢复只需要online redo log和当前的在线数据文件来同步数据,以此保证他们的一致性。
2.若online redo log损坏,则无法进行实例恢复。
3.若undo 数据损坏,则实例恢复的 事务恢复阶段将会失败。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30167136/viewspace-1487151/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/30167136/viewspace-1487151/