3、获取数据集合
SQL语句是一种集合操作语言。返回的结果都是以集合的形式给出。但Oracle操作的最小数据单位是block数据块,要从数据块中把数据行提取出来。
首先,Server Process是获取数据块的最直接主体。首先,他会到SGA的数据块缓存区buffer cache中,找目标数据块是否被缓存,在缓存区内。
如果数据块没有在缓存区内,Server Process会自己到物理硬盘上读取相应文件。最后找到合适的数据块。读入到Buffer Cache里面。Oracle初始化参数中,有一个db_file_multiblock_read_count,表示一次进行物理读获取的最多数据块个数。
SQL> show parameter multiblock
NAME TYPE VALUE
------------------------------------ -----------------------
db_file_multiblock_read_count integer 16
缓存到buffer cache中的数据块,归属在buffer cache管理之中。目前Oracle管理的方式是使用LRU算法,根据数据块的访问频率,buffer在以不同的频率age out出缓存。
数据行的标记rowid,是唯一表示数据行物理位置的内容。可以定位到一行的信息。rowid是一个多信息构成的数据串,包括对象编号、文件号、数据块号和slot行号几部分构成。获取到rowid,就可以最快的定位到一行记录。
4、断开连接
session是有active和inactive的状态。当一个session没有响应、崩溃的时候,Oracle会自主的做善后工作。
包括,将对应的Server Process终止,回滚事务,释放PGA空间和释放对象上的锁。这些工作主要由PMON完成。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17203031/viewspace-683199/ ,如需转载,请注明出处,否则将追究法律责任。