首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >见Oracles解释中临时表的内容

见Oracles解释中临时表的内容
EN

Database Administration用户
提问于 2020-10-16 16:55:12
回答 1查看 132关注 0票数 1

我正在Oracle SQL Developer中执行一个查询,并最终调用

代码语言:javascript
复制
SELECT * FROM TABLE ( dbms_xplan.display );

才能给人留下甲骨文刚才所做的印象。输出中有一个列名,用于说明操作中使用的索引的名称或要访问的表的名称。

每隔一段时间,它就会说一些类似SYS_TEMP_0FD9D6B47_384FBF5的话。我不知道是怎么回事。我猜这是一个由WITH子句创建的临时表。我如何才能看到这个表后面的内容或SQL代码?

EN

回答 1

Database Administration用户

发布于 2020-10-21 18:50:17

正如@pmdba所提到的,无法查看该表,如果可以的话,它可能是某种奇怪格式的原始数据。但是,如果您想了解更多细节,请查找有关语句的SQL_ID (例如,通过v$sessionv$sql ),然后查询列OTHER_XML的v$sql_plan表。为了在SQL*Plus中运行,您需要包含注意到的set命令来查看输出。

代码语言:javascript
复制
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文件。确保附近有食物。那里有很多数据,但它帮助我多次修复了长期运行的查询。简短的例子:

代码语言:javascript
复制
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中可能命名为以下内容的目录中

代码语言:javascript
复制
/u01/app/oracle/diag/rdbms/${ORACLE_SID}/${ORACLE_SID}/trace
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/278212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档