dur*_*tte 3 oracle oracle-11g-r2 dml view
我对 ERP 应用程序进行编程、管理和支持。我更常见的任务之一是了解数据的来源,找到应用程序中特定报告字段与其数据输入字段之间的链接。为此,我必须手动检查一个或多个视图的 DDL SQL 以了解表列,以便将一个视图的表列与另一个视图的表列进行匹配。此手动任务可能需要检查四个或五个抽象层。
是否有一种更快的方法来检查元数据以查找如何从其基表列计算视图列?有没有办法检查 Oracle 的执行计划以查看重写的查询,跳过对中间视图的手动检查?
从 12c 开始,我们有DBMS_UTILITY.EXPAND_SQL_TEXT。
您基本上通过第一个输入参数传递查询文本,并通过第二个输出参数接收重写的查询。
但是由于您使用的是 11.2,因此您还不能使用它。但是,您可以收集优化器跟踪。如果您已经运行了您的查询,并且有它的 sql_id:
begin
dbms_sqldiag.dump_trace
(
p_sql_id=>'1a2b3c4d5e6f',
p_child_number=>0,
p_component=>'optimizer',
p_file_id=>'optimzer_trace'
);
end;
/
Run Code Online (Sandbox Code Playgroud)
或者,如果您不知道 sql_id 并且之前没有运行查询:
alter session set events 'trace[rdbms.sql_optimizer.*]';
-- run your query here, no need to wait for results, it just need to be hard parsed
alter session set events 'trace[rdbms.sql_optimizer.*] off';
Run Code Online (Sandbox Code Playgroud)
这些将生成一个跟踪文件,您可以阅读该文件并在其中找到最终的、重写的查询。
老实说,一旦你有一些复杂的查询,所有方法产生的输出可能很难阅读,获取它们的方法也不是那么简单,所以我通常最终手动阅读和“解析”DDL语句......