log bu ffer 及日志管理深入分析及性能调整 1
log bu ffer 的概念 1
1 log bu ffer 概述 数据库在运行过程中,不可避免的要遇到各种能够导致数据块库损坏的情况
比如突然断电、oracle 或者操作系统的程序 bu g 导致数据库内部逻辑结构损坏、磁盘介质损坏等,都有可能造成数据库崩溃,从而导致数据丢失的现象发生
为了避免,或者说为了修复这些状况所导致的数据丢失现象,oracle 引入了日志缓冲区和日志文件的概念
所谓日志,就是将所有数据库中所有改变数据块的操作,都原原本本的记录下来
这些改变数据块的操作不仅包括对数据表的DML 或者对数据字典的DDL,还包括对索引的改变、对回滚段数据块的改变、对临时表空间的临时段的改变等
只有将数据库中所有的变化都记录下来,当发生数据库损坏时,才能够从损坏时的那一点开始,将之后数据库中的变化重新运用一遍,从而达到恢复数据库的目的
既然是要记录,那就必然引出一个问题,就是如何记录这些变化
比较容易想到的有两种方式
第一种是使用逻辑的记录方式,也就是用描述性的语句来记录整个变化过程
比如对于某个u pdate 更新操作来说来说,可以记录为两条语句:delete 旧值以及insert 新值
这种方式的优点是非常节省空间,因为对每个操作,只需要记录几条逻辑上的语句即可
但是缺点也很明显,就是一旦需要进行恢复,就会非常消耗资源
设想一下,某个 u pdate 操作更新了非常多的数据块,由于 bu ffer cache 内存有限,很多脏数据块都已经写入了数据文件
但就在更新快结束时,突然发生断电,所做的更新丢失
那么重新启动实例时,oracle 需要应用日志文件里的记录,于是重新发出 delete 旧值以及insert 新值的语句
这个过程需要重新查找数据文件中符合条件的数据块,然后再挑出来进行更新