我正在Oracle SQL Developer中执行一个查询,并最终调用
SELECT * FROM TABLE ( dbms_xplan.display );才能给人留下甲骨文刚才所做的印象。输出中有一个列名,用于说明操作中使用的索引的名称或要访问的表的名称。
每隔一段时间,它就会说一些类似SYS_TEMP_0FD9D6B47_384FBF5的话。我不知道是怎么回事。我猜这是一个由WITH子句创建的临时表。我如何才能看到这个表后面的内容或SQL代码?
发布于 2020-10-21 18:50:17
正如@pmdba所提到的,无法查看该表,如果可以的话,它可能是某种奇怪格式的原始数据。但是,如果您想了解更多细节,请查找有关语句的SQL_ID (例如,通过v$session和v$sql ),然后查询列OTHER_XML的v$sql_plan表。为了在SQL*Plus中运行,您需要包含注意到的set命令来查看输出。
set long 65000
set linesize 200
select sql_id, other_xml from v$sql_plan where sql_id='26upzh3jd5fd7'
and other_xml is not null;你会看到各种各样有趣的东西,如果你耐心地把它重新格式化成可读的东西。请注意,信息基本上是调用SQL时使用的提示;实际发生的情况可能与此匹配,也可能不匹配。
现在,如果您想了解实际发生的事情,包括Oracle优化器在实际运行查询之前所做的“猜测”,您需要(假设您拥有DBA权限),打开会话的SQL跟踪,运行SQL,然后关闭SQL跟踪。然后转到诊断目录,并找到与会话关联的*.trc文件。确保附近有食物。那里有很多数据,但它帮助我多次修复了长期运行的查询。简短的例子:
execute DBMS_SESSION.SESSION_TRACE_ENABLE(binds=>true);
-- invoke your SQL after a brief SQL to help you find it later in the trace
select 'HEY my sql start' from dual;
-- your select query goes here
select 'HEY my sql stop' from dual;
execute DBMS_SESSION.SESSION_TRACE_DISABLE;跟踪文件将位于Linux中可能命名为以下内容的目录中
/u01/app/oracle/diag/rdbms/${ORACLE_SID}/${ORACLE_SID}/tracehttps://dba.stackexchange.com/questions/278212
复制相似问题