在排除为什么数据库应用程序在测试中比在生产中运行得更好时,我遇到了这种现象:我无法在生产中查询 X$ 表。
SQL> desc x$ksppi
ERROR:
ORA-04043: object "SYS"."X_$KSPPI" does not exist
SQL> select * from dba_synonyms where synonym_name = 'X$KSPPI';
OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME
------------------------------ ------------------------------ ------------------------------ ------------------------------
DB_LINK
--------------------------------------------------------------------------------------------------------------------------------
PUBLIC X$KSPPI SYS X_$KSPPI
SQL> desc sys.x$ksppi;
ERROR:
ORA-04043: object sys.x$ksppi does not exist
在测试中,我实际上收到了表格描述。
据我有限的理解,这些实际上是在数据库外部定义为 C 结构或类似的东西,并在启动时创建以填充 V$ 视图。如果我的生产数据库,特别是优化器,无法访问隐藏参数,我肯定能明白为什么它会对性能产生负面影响。
为什么不在启动时创建 X$ 表?此应用程序在升级到 11.2.0.4 一段时间后开始出现问题,那么是否可能是升级失败造成的?我可以采取哪些故障排除步骤来分析根本问题?
没有这样的东西
X_$KSPPI
。它是X$KSPPI
。您有一个指向不存在的对象的同义词。该同义词在 Oracle 数据库中不存在,它是由其他人或其他事物创建的。
desc sys.x$ksppi;
如果您对除 以外的任何其他用户执行该操作,您的尝试将失败SYS
。如果您的数据库无法访问参数,您的问题就会大得多,症状也更明显。