Oracle 12c - 从视图中获取 IMPORT_TABLE_STATS

Posted

技术标签:

【中文标题】Oracle 12c - 从视图中获取 IMPORT_TABLE_STATS【英文标题】:Oracle 12c - getting IMPORT_TABLE_STATS from view 【发布时间】:2018-05-15 12:22:52 【问题描述】:

我有一些代码在 Oracle 11g 上运行,我们正在迁移到 12c (12.2.0.1.0)。 在其中一个处理过程中调用DBMS_STATS.IMPORT_TABLE_STATS,并在stattab 中提供了视图的参数名称。 该视图是一个表的简单选择查询,一列由解码函数计算,其他列在源列中。调用IMPORT_TABLE_STATS的用户是目标表、视图和视图下表的所有者。 在 11g 中代码正在运行,在 12c 中我收到以下错误:

ORA-20000: 对象不存在或权限不足。

关于理性的任何想法? 12c 版本的DBMS_STATS 实现是否有更改,禁止使用视图作为IMPORT_TABLE_STATS 的源?

【问题讨论】:

出于好奇,如果您将其作为 sysdba 运行,或者授予用户 ANALYZE ANY 权限,它会起作用吗? 在第一次阅读你的问题时,我的反应是:你入侵了DMBS_STATS,发现IMPORT_TABLE_STATS 接受了一个视图而不是官方的CREATE_STAT_TABLE 表,现在很不高兴这个黑客没有不能在 12.2 中工作。话虽如此,我觉得这样的创造力令人印象深刻,当然值得研究一下。 【参考方案1】:

CREATE_STAT_TABLE 在 11.2 和 12.2 中创建的表是不同的。如果您想让IMPORT_TABLE_STATS 吞下它,您的视图至少应该看起来有点像官方表格。

Column    11.2                12.2
statid    VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
type      CHAR(1 CHAR)        CHAR(1 BYTE)
version   NUMBER              NUMBER
flags     NUMBER              NUMBER
c1        VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
c2        VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
c3        VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
c4        VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
c5        VARCHAR2(30 CHAR)   VARCHAR2(128 BYTE)
c6        -                   VARCHAR2(128 BYTE)
n1        NUMBER              NUMBER
n2        NUMBER              NUMBER
n3        NUMBER              NUMBER
n4        NUMBER              NUMBER
n5        NUMBER              NUMBER
n6        NUMBER              NUMBER
n7        NUMBER              NUMBER
n8        NUMBER              NUMBER
n9        NUMBER              NUMBER
n10       NUMBER              NUMBER
n11       NUMBER              NUMBER
n12       NUMBER              NUMBER
n13       -                   NUMBER
d1        DATE                DATE
R1        RAW(32)             RAW(1000)
R2        RAW(32)             RAW(1000)
R3        -                   RAW(1000)
CH1       VARCHAR2(1000 CHAR) VARCHAR2(1000 BYTE)
CL1       CLOB                CLOB
BL1       -                   BLOB

【讨论】:

以上是关于Oracle 12c - 从视图中获取 IMPORT_TABLE_STATS的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 查询转换为 PL/SQL 可以提高 Oracle 12c 中的性能吗? [关闭]

在数据库视图中应用动态 where 条件(oracle - 12c,mysql 5+)

oracle 12c 新特性之不可见字段

从 Oracle 12c 函数返回多个值

Oracle 12C:插入值后返回记录

logstash从oracle12c导入数据到elasticsearch