Como usar o sqlplus para conectar-se a um banco de dados Oracle localizado em outro host sem modificar meus próprios tnsnames.ora


80

Quero conectar-me a um banco de dados oracle localizado em outro host usando o sqlplus. Esta página sugeriu a adição de um item em meus tnsnames para coincidir com esse banco de dados

local_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
    (CONNECT_DATA = (SID = remote_SID))
  )

e então use isso no sqlplus

sqlplus user/pass@local_SID

No entanto, nas minhas circunstâncias, modificar os nomes de nomes de domínio locais não é possível. É possível conectar-se a um banco de dados remoto usando o argumento sqlplus sem precisar alterar tnsnames? Algo como

sqlplus user/pass@remote_SID@hostname.network ;( I know, this one is not valid)

1
ainda mais curto - sqlplus ID do usuário / senha @ banco de dados

@ GlennLong - mas na sua versão, databaseainda é um alias do TNS, que deve existir no tnsnames.ora, por isso é o mesmo que Louis estava tentando evitar?
Alex Poole

Respostas:


85
 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))

Talvez, e isso possa depender do ambiente da linha de comando que você está usando, é necessário citar a string, algo como

 sqlplus "user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))"

ou

 sqlplus 'user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname.network)(Port=1521))(CONNECT_DATA=(SID=remote_SID)))'

35

Você pode usar a conexão fácil para isso:

sqlplus usr/pass@hostname.network/remote_service_name

Para permitir uma conexão fácil em sua máquina, você precisa adicioná-lo ao NAMES.DIRECTORY_PATH sqlnet.ora, por exemplo:

NAMES.DIRECTORY_PATH=(EZCONNECT)

Se o seu ouvinte estiver em uma porta não padrão, use ...@hostname.network:port/....

Na verdade, parece que você precisa fornecer um nome de serviço, não um SID; eles podem ser os mesmos, mas caso contrário, você precisará obtê-lo do servidor.


1
Se o nome do serviço for igual ao nome do host, você nem precisará especificar o nome do serviço ao se conectar. (Praticamente ninguém faz isso, mas é bom saber.)
Durette

Dead link .......
Harvey

1
@ Harvey - atualizado, obrigado.
Alex Poole

17

Crie uma cópia do arquivo tnsnames.ora em um diretório no qual você possa gravar, modifique o arquivo adequadamente e defina a variável de ambiente TNS_ADMIN para o local desse diretório.

por exemplo:

cp $ORACLE_HOME/network/admin/tnsnames.ora /tmp/tnsnames.ora
# edit the /tmp/tnsnames.ora file to add your entries

# Set the $TNS_ADMIN environment variable so that sqlplus knows where to look 
export TNS_ADMIN=/tmp

2
Esta é uma muito, resposta muito melhor
Andrew Sledge

Essa abordagem funciona com um sistema que não possui nenhuma infraestrutura Oracle instalada além de um cliente sqlplus. Basta copiar o tnsnames.ora no servidor db e seguir o processo de Phil.
theRiley

3

No sistema Unix / Linux, você pode usar os arquivos de configuração no nível do usuário para substituir as entradas no nível do sistema.

Nível do Usuário - Nível do Sistema 
Arquivo de configuração Arquivo de configuração
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

A configuração de nível de sistema Os arquivos podem ser encontrados no diretório $TNS_ADMIN. Se a variável TNS_ADMINnão está definida, em seguida, eles são pesquisados no diretório $ORACLE_HOME/network/admin.

Os arquivos de configuração no nível do usuário não substituem os arquivos de configuração no nível do sistema como um todo (como o TNS_ADMINdiretório substitui o $ORACLE_HOME/network/admindiretório inteiro ), mas eles adicionam ou alteram entradas dos arquivos de configuração no nível do sistema. Se existir uma entrada em um arquivo de configuração no nível do usuário, este será utilizado, se não existir no arquivo de configuração no nível do usuário, será usada a entrada do arquivo de configuração no nível do sistema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.