Oracle SQL中能否查看生成指定表数据的CTAS语句?
Oracle查询CTAS原始语句可行性说明
Oracle默认不会持久化存储CTAS(CREATE TABLE AS SELECT)语句中的SELECT查询逻辑,无法直接从系统表/视图中获取完整的原始CTAS语句,仅可通过以下路径尝试检索:
- 获取基础表结构DDL(不含CTAS的SELECT部分)
使用DBMS_METADATA.GET_DDL函数可以拿到目标表的结构定义语句,可作为基础参考:
SELECT DBMS_METADATA.GET_DDL('TABLE', '目标表名', '所属Schema名') FROM DUAL;
- 从SQL执行缓存/历史快照中检索
如果CTAS操作执行时间较近,且语句还未被从共享池淘汰、或AWR快照仍保留了执行记录,可通过以下语句尝试检索原始SQL:
-- 查当前共享池中的SQL记录(需要DBA权限) SELECT SQL_FULLTEXT FROM V$SQL WHERE SQL_TEXT LIKE '%CREATE TABLE%AS SELECT%<目标表名>%'; -- 查历史AWR快照中的SQL记录(需要DBA权限,且AWR保留策略覆盖CTAS执行时间) SELECT SQL_TEXT FROM DBA_HIST_SQLTEXT WHERE SQL_TEXT LIKE '%CREATE TABLE%AS SELECT%<目标表名>%';
可结合DBA_OBJECTS中目标表的CREATED创建时间字段,对上述查询结果过滤,缩小检索范围提高命中率。
- 通过日志挖掘检索
如果数据库开启了归档模式、且CTAS执行时间的归档日志/重做日志未被覆盖,可使用Oracle LogMiner工具解析日志,提取当时执行的完整CTAS语句。
内容的提问来源于stack exchange,提问作者Giuseppe
相关产品推荐
相关产品推荐

