--sql语句的执行过程 1.连接方式 2.查询语句的执行过程 1)语句解析 a)检查库缓存,有无执行过相同的sql语句 没有,进入b) 有,进入2) b)检查语法:关键字 c)检查语义:表名,列名 d)获得解析锁 e)核对访问权限 f)确定执行计划(explain plan) g)保存执行计划到缓存区 2)语句执行 a)检查缓存中有无数据块; 没有:进入b) 有:进入3) b)查询获取目标数据文件 3)返回结果到客户端 3.DML的执行过程 1)语句解析 a)检查库缓存,有无执行过相同的sql语句 没有,进入b) 有,进入2) b)检查语法:关键字 c)检查语义:表名,列名 d)获得解析锁 e)核对访问权限 f)确定执行计划(explain plan) g)保存执行计划到缓存区 2)语句执行 a)检查缓存区有无要修改的数据 没有:从数据文件装载到缓存 b)在要修改的数据记录上加锁。防止在事务期间其他事务修改这些数据 c)把旧数据放到undo segment中,新数据放在数据块对应的缓存中 3)返回结果到客户端,返回影响的记录数 4.事务提交:commit 1)redo log buffer. scn 2)LGWR启动,redo log buffer 写入到redo log files 3)通知客户端事务已提交 4)Oracle Server标示这个事务已完成 其他:DBWR把脏数据写入数据文件,示范数据记录上的锁 5.事务回滚:rollback 1)把undo segment中的数据写回 2)释放undo segment中被占用的空间