34.Oracle杂记——Oracle常用动态视图v$sqltext

前端之家收集整理的这篇文章主要介绍了34.Oracle杂记——Oracle常用动态视图v$sqltext前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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列唯一确认缓存的游标

sql_ID:缓存游标的sqlID

COMMAND_TYPE:sql语句的类型(SELECT,INSERT等)

PIECE:用于sql文本排序的号(sql语句被分片了,需要需要排序合成)

sql_TEXT:sql文本的其中一部分

CON_ID:容器ID

v$sql,v$sqltext,v$sqlarea差异

这3个视图:v$sql,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语句。

猜你在找的Oracle相关文章