34.Oracle杂记——Oracle常用动态视图v$sqltext
视图v$sqltext显示SGA中共享sql游标中的 sql语句文本。
视图描述如下:
sys@PDB1> desc v$sqltext;
Name Null? Type
------------------------------------------------------------- ------------------------------------
ADDRESS RAW(8)
HASH_VALUE NUMBER
sql_ID VARCHAR2(13)
COMMAND_TYPE NUMBER
PIECE NUMBER
sql_TEXT VARCHAR2(64)
CON_ID NUMBER
各个列属性如下:
ADDRESS :和HASH_VALUE列唯一确定缓存的游标
HASH_VALUE :和ADDRESS列唯一确认缓存的游标
COMMAND_TYPE:sql语句的类型(SELECT,INSERT等)
PIECE:用于sql文本排序的号(sql语句被分片了,需要需要排序合成)
CON_ID:容器ID
v$sql,v$sqltext,v$sqlarea差异
简单描述如下:
主要是提供library cache中当前缓存的sql语句的信息。都可以提供当前有关sql语句的具体信息,但稍有差异。
游标,包含shared cursor,sessioncursor,一条sql语句对应一个或多个游标,一条sql语句至少解析为一个游标。
当sql语句被解析到shared_pool中之后,会产生相应的游标,如下三种情形,
a、存在可完全共享的父游标
b、父游标存在,但是由于执行环境的变化,不得不生存新的子游标
c、没有父游标存在,需要生成全新的游标
对于情形a,由于存在可共享的父游标,也就是说v$sql中必定已经存在一个对应的sql游标,我们可以查询到,执行之后对应executions及相关列会发生变化。
对于情形b或c,sql语句产生的游标会被添加到v$sql视图,也即是新增游标(b为新增子游标,c为新增父游标)。
注:在shared_pool由于aged out原则后的sql可能无法在该视图查询到,
v$sql存储所有游标,v$sqlarea等同于使用了distinct关键字,仅保留sql语句。v$sqltext提供完整的sql语句。