如何使用sqlplus连接到位于另一主机上的Oracle数据库而不修改我自己的tnsnames.ora


80

我想使用sqlplus连接到位于另一台主机上的oracle数据库。该页面建议在我的tnsnames上添加一个项目以连接到该数据库

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

然后在sqlplus中使用它

sqlplus user/pass@local_SID

但是,在我的情况下,无法修改本地tnsname。是否可以仅使用sqlplus参数连接到远程数据库,而不必更改tnsnames?就像是

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

1
甚至更短

@GlennLong-但在您的版本中,database仍然是TNS别名,该别名必须存在于中tnsnames.ora,所以它与Louis试图避免的一样吗?
2014年

Answers:


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

也许,这可能取决于您使用的命令行环境,您需要用引号将字符串引起来,例如

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

要么

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

35

您可以为此使用简单连接

sqlplus usr/pass@hostname.network/remote_service_name

为了在您的机器上启用轻松连接,您需要将其添加到NAMES.DIRECTORY_PATH sqlnet.ora中,例如:

NAMES.DIRECTORY_PATH=(EZCONNECT)

如果您的侦听器在非默认端口上,请使用...@hostname.network:port/...

实际上,您似乎必须提供服务名称,而不是SID。它们可能是相同的,但如果不是,则需要从服务器获取。


1
如果服务名称与主机名相同,则在连接时甚至不需要指定服务名称。(实际上没有人这样做,但是很高兴知道。)
durette

无效链接.......
Harvey

1
@Harvey-更新,谢谢。
Alex Poole

17

在您可以写入的目录中创建tnsnames.ora文件的副本,进行相应的修改,然后将TNS_ADMIN环境变量设置为该目录的位置。

例如:

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
这是一个更好得多的回应
Andrew Sledge 2014年

此方法适用于除sqlplus客户端外未安装任何Oracle基础结构的系统。只需从数据库服务器复制tnsnames.ora,然后按照Phil的过程进行即可。
theRiley

3

在Unix / Linux系统上,您可以使用用户级别的配置文件来覆盖系统级别的条目。

系统级用户级 
配置文件配置文件
------------------ -------------------
sqlnet.ora $ HOME / .sqlnet.ora
tnsnames.ora $ HOME / .tnsnames.ora

可以在目录中找到系统级配置文件$TNS_ADMIN。如果TNS_ADMIN未设置变量,则在目录中搜索它们$ORACLE_HOME/network/admin

用户级配置文件不会整体上替代系统级配置文件(因为TNS_ADMIN目录替代了整个$ORACLE_HOME/network/admin目录),但是它们会添加或更改系统级配置文件的条目。如果在用户级配置文件中存在一项,则使用该条目;如果在用户级配置文件中不存在,则使用系统级配置文件的条目。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.