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)
Louis Rhys
fonte
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)))'
René Nyffenegger
fonte
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 [email protected]: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.

Alex Poole
fonte
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
Philᵀᴹ
fonte
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.

miracle173
fonte