我想用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
然而,在我的情况下,修改本地tnsnames是不可能的。是否有可能只通过sqlplus参数连接到远程数据库,而不需要修改tnsnames?比如说
sqlplus user/pass@[email protected] ;( I know, this one is not valid)
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)))'
你可以使用easy connect来做这个。
sqlplus usr/[email protected]/remote_service_name
要在你的机器上启用easy connect,你需要将其添加到sqlnet.ora中的NAMES.DIRECTORY_PATH
中,例如。
NAMES.DIRECTORY_PATH=(EZCONNECT)
如果你的监听器在一个非默认的端口上,使用[email protected]:port/...
。
事实上,你必须提供一个服务名称,而不是一个SID;它们可能是一样的,但如果不是,你需要从服务器上获得。
在一个你可以写入的目录中创建一份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