为了防止日渐衰退的记忆力以及到处乱写的笔记,最近一直在研究基础知识,看到盖哥恢复这一章,尚有许多不明确地方,怕以后忘记,做个总结,方便以后查漏补缺。具体编写原因,为何online redo log中为何会有uncommited的数据。只是个人的一些理解及总结,有错误之处欢迎请指出,共同学习。
环境:linux 5.4+oracle 11g
一、备份恢复
1、备份类型:逻辑备份与物理备份
2、逻辑备份:
即通过导出的方法对数据库进行备份。对于故障点与备份点间的数据恢复无能为力。
3、物理类型:热备与冷备。
冷备:是指在数据库关闭的情况下(mount状态下是否也可以),对数据库进行全库拷贝。此时数据库处于一致的状态。恢复的时候,需要将全部文件都恢复即可。
热备:
条件:数据库处于open状态且为归档模式.。
验证过在不归档,mount模式下进行alter tablespace users begin backup,会提示数据库尚未open。
二、为何需要前滚和回滚
首先,commit的时候做了哪些操作。
①、系统为commit生成一个scn。
②、LGWR将在redo log buffer中的redo log entries连同此时的scn写入到online redo log。
官方文档:The log writer(LGWR) process writes remaining redo log entries in the redo log buffer to the online redo log and writes the transaction scn to the online redo log.
③、释放表与行的锁
④、删除savepoints
所以在commit的时候,LGWR会将redo log buffer 中的剩余的redo log entries全部写入到online redo log中,也即说,此刻重做日志中就包含了commit和uncommit的数据。所以在数据库发生crash的时候,在恢复的时候为什么要进行前滚与回滚,因为online redo log中包含了uncommit的数据,这部分数据是不需要 写入到数据文件中的,所以要通过回滚将其去掉。
在commit的操作后,undo segment 的状态会变为inactive,故可在回退中知道哪些数据未提交需回退。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30824085/viewspace-2095930/,如需转载,请注明出处,否则将追究法律责任。