Citação de @DAC
Resumindo:SID =o nome exclusivo do seu banco de dados, ServiceName =o alias usado ao conectar
Não estritamente verdadeiro. SID =nome exclusivo da INSTÂNCIA (por exemplo, o processo oracle em execução na máquina). A Oracle considera o "Banco de Dados" como os arquivos.
Nome do serviço =alias para uma INSTANCE (ou várias instâncias). O objetivo principal disso é se você estiver executando um cluster, o cliente pode dizer "conecte-me a
SALES.acme.com
", o DBA pode alterar rapidamente o número de instâncias disponíveis para SALES.acme.com
solicitações ou até mesmo mover SALES.acme.com
para um banco de dados completamente diferente sem que o cliente precise alterar nenhuma configuração.