Oracle 12c-从视图中获取导入表统计信息
我在Oracle 11g上运行了一些代码,我们正在迁移到12c(12.2.0.1.0)。Oracle 12c-从视图中获取导入表统计信息,oracle,view,oracle12c,optimizer-statistics,Oracle,View,Oracle12c,Optimizer Statistics,我在Oracle 11g上运行了一些代码,我们正在迁移到12c(12.2.0.1.0)。 在一个处理过程DBMS\u STATS.IMPORT\u TABLE\u STATS中调用,并在statab中提供视图的参数名称。 该视图是一个来自一个表的简单select查询,一列由decode函数计算,另一列在源列中按原样处理。调用IMPORT\u TABLE\u STATS的用户是目标表、视图和视图下表的所有者。 在11g代码工作时,在12c中我收到以下错误: ORA-20000:对象不存在或权限不足
在一个处理过程
DBMS\u STATS.IMPORT\u TABLE\u STATS
中调用,并在statab
中提供视图的参数名称。该视图是一个来自一个表的简单select查询,一列由decode函数计算,另一列在源列中按原样处理。调用
IMPORT\u TABLE\u STATS的用户是目标表、视图和视图下表的所有者。
在11g代码工作时,在12c中我收到以下错误:
ORA-20000:对象不存在或权限不足
有什么理由吗?在12c版本的DBMS\u STATS
实现中是否有更改,禁止使用视图作为导入表\u STATS
的源?在11.2和12.2中由创建表创建的表是不同的。如果您希望IMPORT\u table\u 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
出于好奇,如果您以sysdba的身份运行它,或者允许用户进行任何分析,它会起作用吗?在第一次阅读您的问题时,我的反应是:您入侵了DMBS\u STATS
,发现IMPORT\u TABLE\u STATS
接受了一个视图,而不是官方的CREATE\u statu TABLE
TABLE,现在,我们对12.2版本中的黑客程序不起作用感到不满。话虽如此,我觉得这种创造力令人印象深刻,当然值得进行一些调查。