Na solução de problemas por que um aplicativo de banco de dados está funcionando infinitamente melhor no teste do que na produção, me deparei com este fenômeno: não consigo consultar as tabelas X$ em produção.
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
No teste, na verdade recebo a descrição da tabela de volta.
É meu entendimento limitado que eles são realmente definidos fora do banco de dados como estruturas C ou algo assim e são criados na inicialização para preencher as visualizações V$. Se meu banco de dados de produção, especificamente o otimizador, não tiver acesso aos parâmetros ocultos, eu definitivamente poderia ver por que isso poderia ter um impacto negativo no desempenho.
Por que as tabelas X$ não seriam criadas na inicialização? Os problemas com este aplicativo começaram algum tempo depois que ele foi atualizado para 11.2.0.4, então uma atualização mal feita poderia ter feito isso? Quais etapas de solução de problemas posso executar para analisar o problema raiz?
Não existe tal coisa
X_$KSPPI
. ÉX$KSPPI
. Você tem um sinônimo apontando para um objeto inexistente.Esse sinônimo não existe em bancos de dados Oracle, que foi criado por alguém ou outra coisa.
Sua tentativa de
desc sys.x$ksppi;
falhar se você fizer isso com qualquer outro usuário que não sejaSYS
.Se seu banco de dados não pudesse acessar parâmetros, você teria um problema muito maior com sintomas mais óbvios.