【发布时间】:2021-11-21 06:41:12
【问题描述】:
为什么 Oracle “DDL” 语句(如“CTAS”)在执行后不显示在 V$SQL 视图中? 怎样才能得到“SQL_ID”呢?我想在 SQl 计划基线中使用“SQL_ID”。 TNX
【问题讨论】:
标签: sql oracle sql-execution-plan
为什么 Oracle “DDL” 语句(如“CTAS”)在执行后不显示在 V$SQL 视图中? 怎样才能得到“SQL_ID”呢?我想在 SQl 计划基线中使用“SQL_ID”。 TNX
【问题讨论】:
标签: sql oracle sql-execution-plan
CTAS 操作出现在v$sql 视图中
SQL> create table t1 as select * from dba_objects ;
Table created.
SQL> select sql_text,sql_id from v$sql where sql_text like '%create table t1 as select%' ;
SQL_TEXT
--------------------------------------------------------------------------------
SQL_ID
-------------
create table t1 as select * from dba_objects
4j5kv6x7cz5r7
select sql_text,sql_id from v$sql where sql_text like '%create table t1 as selec
t%'
5n4xnjkt3vz3h
SQL 计划基线是 SPM(SQL 计划管理)的一部分
SQL 计划基线。计划基线是一组接受的计划, 允许优化器用于 SQL 语句。在典型的 用例,数据库只接受一个计划进入计划基线 在验证计划执行良好后。在这种情况下,一个计划 包括所有与计划相关的信息(例如,SQL 计划 标识符、提示集、绑定值和优化器环境) 优化器需要重现一个执行计划。
如果您经常使用 CTAS,我猜您是在批处理模式下执行此操作,因此删除表,然后使用上述 CTAS 命令重新创建它。我宁愿尝试看看该语句的 SELECT 本身有什么问题。
但 SQL 基线更侧重于解决可以修复和改进计划的查询,因为优化器并不总是选择最好的。
【讨论】:
selec t%',它应该是select%
V$SQL 仅显示 CTAS 的前 20 个字符。这是 Oracle 数据库 11g 中的一个错误。更多详情请见:(https://stackoverflow.com/questions/27623646/oracle-sql-text-truncated-to-20-characters-for-create-alter-grant-statements/28087571#28087571\)1。
【讨论】: