Alguns fornecedores nos disseram que não deveríamos usar link de banco de dados entre nosso banco de dados e o deles, pois as consultas executadas em um link de banco de dados não seriam armazenadas em cache nem otimizadas.
Não consigo encontrar nenhuma informação que confirme/infirme isso.
Ingenuamente, não veria por que o Oracle não seria capaz de fazer cache de consulta ao usar um link db.
Existem algumas restrições com links de banco de dados. Você não pode executar DDL remotamente, por exemplo.
As consultas executadas em tabelas remotas não são processadas exatamente da mesma maneira que as tabelas regulares:
Na maioria dos casos, o processo de quebra é adequado e você obterá apenas a sobrecarga esperada do link do banco de dados (atraso de rede entre os bancos de dados, duas análises/processamento de consultas em vez de uma, etc.). As subconsultas remotas serão tratadas como consultas normais pelo banco de dados remoto e os dados entrarão no cache remoto como nas consultas regulares.
Você pode ter problemas de desempenho se tentar unir uma tabela local a uma tabela remota (ou tabelas de dois links de banco de dados distintos), pois os dados devem ser transportados para um único banco de dados para realizar a junção. Nesse caso, você pode querer alterar o processo de separação (por exemplo, realizar uma junção complexa em um banco de dados remoto em vez do banco de dados local).
A documentação detalha várias maneiras de ajustar as consultas distribuídas.
Uma consulta distribuída não pode ser otimizada da mesma forma que as tabelas locais, no entanto, as consultas distribuídas são otimizadas e os caches, portanto, o fornecedor está incorreto .
Você pode ver isso executando algo como o seguinte. Você verá a contagem de execução aumentar a cada execução.
Meu palpite é que o fornecedor deseja que seus dados sejam acessados por meio de serviços da Web e que qualquer junção com os dados de seu próprio banco de dados seja feita em uma camada de aplicativo. O desempenho de tal configuração provavelmente seria muito inferior a uma junção em um link de banco de dados, mesmo que não fosse armazenado em cache.