A execução de várias instâncias no mesmo servidor é possível e, em alguns casos, necessária. O oratab foi projetado especificamente para lidar com o gerenciamento de várias instâncias. Nos casos em que você possui vários aplicativos independentes, pode ser preferível ter uma instância para cada aplicativo.
Ter memória suficiente é fundamental. O Oracle constrói o SGA na memória compartilhada. Se você não tiver memória suficiente, o SGA ou os processos começarão a ser trocados. Isso é conhecido como thrashing e resulta em uma penalidade de desempenho significativa.
Pode ser possível ajustar as instâncias para executar com um SGA menor. A Oracle fornece ferramentas para ajudar a ajustar o tamanho da SGA. Se alguma das instâncias tiver um SGA excessivamente grande, penalizará todas as instâncias.
Outro uso importante da memória é o espaço no buffer. Isso atua como cache secundário e pode eliminar E / S de leitura significativa.
A execução sar
(assumindo que o Unix tenha base no sistema operacional) pode fornecer bons diagnósticos sobre onde está o problema. Os problemas prováveis são a troca ou a saturação de E / S do disco. A adição de RAM provavelmente solucionará um desses problemas.
A saturação de E / S de disco também pode ser tratada movendo alguns espaços de tabela para outros discos. Geralmente, configuro o Oracle para que a E / S seja distribuída pelo maior número possível de discos.
EDIT: Estes são alguns casos que podem exigir instâncias separadas.
- É sempre necessário se você executar versões diferentes do Oracle no mesmo servidor. Os aplicativos nem sempre são certificados ou capazes de trabalhar com a versão mais recente.
- Você pode querer instâncias que podem ser revertidas automaticamente para um ponto no tempo. (Embora eu o desencoraje, usei isso para um ambiente de teste automatizado.)
- Se você tiver referência de esquema codificada nos aplicativos, poderá precisar de instâncias diferentes para lidar com colisões de namespace.
- Pode ser mais fácil lidar com os requisitos de segurança usando instâncias separadas. Pode ser apropriado usar servidores diferentes nesse caso.
- A execução de versões diferentes do mesmo banco de dados (desenvolvimento, teste, aceitação do usuário, treinamento e produção) no mesmo servidor é mais segura com instâncias separadas. Eu não executaria todos esses ambientes no mesmo servidor, mas geralmente executaria dois ou mais no mesmo servidor.