在排除为什么数据库应用程序在测试中比在生产中运行得更好时,我遇到了这种现象:我无法在生产中查询 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 一段时间后开始出现问题,那么是否可能是升级失败造成的?我可以采取哪些故障排除步骤来分析根本问题?