问题描述
嗨,汤姆,
我已经检查了用户登录详细信息,因为当我对照sql_id检查sql_text时,我发现一个用户的sql_id是一个,它显示了两个选择语句,它是相同的选择语句。
我检查了sql_id和这个sql_id之间的子目录号,它显示了两个chil_number。所以,我怀疑当一个用户启动查询时,它生成了一个sql_id ,你能不能试着理解我为什么会发生这种事。这背后的原因是什么,以及如何解决这样的问题,以避免针对一个用户/一个sql_id生成相同的多重选择语句。
谢谢
我已经检查了用户登录详细信息,因为当我对照sql_id检查sql_text时,我发现一个用户的sql_id是一个,它显示了两个选择语句,它是相同的选择语句。
我检查了sql_id和这个sql_id之间的子目录号,它显示了两个chil_number。所以,我怀疑当一个用户启动查询时,它生成了一个sql_id ,你能不能试着理解我为什么会发生这种事。这背后的原因是什么,以及如何解决这样的问题,以避免针对一个用户/一个sql_id生成相同的多重选择语句。
谢谢
专家解答
当Oracle解析SQL语句时,它将此语句散列为SQL_ID。如果您执行另一个与第一个完全匹配的语句,它将散列为相同的值。
如果这两个执行的环境之间存在差异,则Oracle将生成一个新的子游标。例如,如果它们由不同的用户进行分析:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4790898600346907048
或者具有不同的绑定值:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9497064796920
有一大堆的原因会发生这种事。v$sql_共享_cursor具有用于显示语句未被共享的原因的标志:
http://docs.oracle.com/database/121/REFRN/GUID-4993A6DE-5658-4745-B43E-F5AD9DB8DCCC.htm#REFRN30254
有关此问题的进一步讨论,请访问:
http://docs.oracle.com/database/121/TGSQL/tgsql_cursor.htm#TGSQL-GUID-8CC2E0D8-4C67-4795-93A8-9F563E7F27C7
如果这两个执行的环境之间存在差异,则Oracle将生成一个新的子游标。例如,如果它们由不同的用户进行分析:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4790898600346907048
或者具有不同的绑定值:
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9497064796920
有一大堆的原因会发生这种事。v$sql_共享_cursor具有用于显示语句未被共享的原因的标志:
http://docs.oracle.com/database/121/REFRN/GUID-4993A6DE-5658-4745-B43E-F5AD9DB8DCCC.htm#REFRN30254
有关此问题的进一步讨论,请访问:
http://docs.oracle.com/database/121/TGSQL/tgsql_cursor.htm#TGSQL-GUID-8CC2E0D8-4C67-4795-93A8-9F563E7F27C7
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




