读书笔记系列01-《收获、不止Oracle》
最近计划将看过的Oracle书籍依次系统的总结下读书笔记。
这本书是我个人觉得写的最有趣的Oracle书籍,也是我接触Oracle后第一本完全精读的Oracle中文书籍。全书主要讲述了Oracle的基本原理(物理体系结构、逻辑体系结构)、表设计、索引原理、多表连接等内容。该书最大特点是利用诙谐的课堂氛围以及将枯燥的技术与有趣多生活故事做类比,培养了读者正确学习和应用技术的意识,达成目标的前提下,尽可能的少做事才能更高效。今后学习一门技术,甚至是一个知识点,都要思考为什么要学它,它是解决什么问题的。这些道理应用广泛,不止局限于学习Oracle技术。

一、Oracle基本原理

1.1 Oracle物理体系
书中通过类比生活实例,小余一家,爸爸开服装店,妈妈在学校旁边开餐饮店,引出Oracle物理体系,趣味性十足。

1区:PGA、2区:Instance(SGA+后台进程)、3区:Database(各类文件)
Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

通过语句执行过程体会Oracle体系结构:
查询语句(select)执行过程:在1区准备,完成用户连接信息的保存和权限保存,生成一个唯一的hash值,进入2区,首先是到共享池处理,此hash值没有,则需要检查语法语义权限解析生成执行计划,然后进入数据缓冲区查询,如果没有,则数据缓冲区从数据文件中查到并带回数据缓冲区,最终呈现给用户。
修改语句(update, insert, delete)执行过程:查询语句有的过程都有,在数据缓冲区找到要修改的块,修改之前生成前镜像(CR块),修改后提交,LGWR进程将log buffer条目写入redo logfile,而至于DBWR进程何时将修改数据写入磁盘,是不确定的。

undo的作用:事物回滚、一致性读(构造CR块)
redo的作用:对数据库所有操作进行记录,日志写优先原则,数据库快速提交,异常断电也不会数据丢失。

思考题:
1)修改语句(update, insert, delete),哪类语句产生的undo最多?哪类语句产生的redo最多?
参考答案:一般来讲,因为undo记录的是反向操作。
insert的反向操作是delete,undo只需要记录delete行的rowid即可,所以insert产生的undo最少;
delete的反向操作是insert,undo需要记录insert所有字段的值,所以delete产生的undo最多;
update介于二者之间。
注意:undo条目也是被redo记录的。

2)ORA-01555原因和解决方案?
参考答案:原因是Oracle查询要保证一致性读,而当查询语句执行时间较长,很可能后面要查询块的undo信息已经被覆盖,导致无法构造一致性读需要的cr块。oracle会抛出ORA-01555错误。
解决方案:

a. 优化该查询SQL,缩短其执行时间;

b. 增加undo_retention值,并且设置该undo表空间为guarantee(alter tablespace undotbs1 retention guarantee;)。

1.2 Oracle逻辑体系
书中通过类比生活实例,王财主的农场(database),出租给不同养殖户(tablespace),每个养殖户又各自养殖牛、羊、猪(segment)等。王财主心中以8平米为最小核算单元(block),谁的养殖空间不