游标的解析过程
游标的解析过程(产生shared cursor)
解析过程:
A、包含vpd的约束条件:
SQL语句如果使用的表使用了行级安全控制,安全策略生成的约束条件添加到where子句中
B、语法、语义、访问权限检查:
检查SQL语句书写的正确性,对象存在性,用户的访问权限
C、父游标缓存:
将该游标(SQL语句)的文本进行哈希得到哈希值并在library cache寻找相同的哈希值,如不存在则生存父游标且保存在library cache
中,按顺序完成D-F步骤。如果此时存在父游标,则进一步判断是否存在子游标。若存在相同的子游标,则直接调用其子游标的执行计
划执行该SQL语句,否则转到步骤D进行逻辑优化
D、逻辑优化:
使用不同的转换技巧,生成语义上等同的新的SQL语句(SQL语句的改写),一旦该操作完成,则执行计划数量、搜索空间将会相应增长。
其主要目的未进行转换的情况下是寻找无法被考虑到的执行计划
E、物理优化:
为逻辑优化阶段的SQL语句产生执行计划,读取数据字典中的统计信息以及动态采样的统计信息,计算开销,开销最低的执行计划将被
选中。
F、子游标缓存:
分配内存,生成子游标(即最佳执行计划),与父游标关联。可以在v$sqlarea, v$sql得到具体游标信息,父子游标通过sql_id关联
对于仅仅完成步骤A与B的SQL语句即为软解析,否则即为硬解析
shared cursor与session cursor的关系以及软软解析
关系:
一个session cursor只能对应一个shared cursor,而一个shared cursor却可能同时对应多个session cursor