未指定主机名/端口时SAS如何连接Oracle?含官方案例疑问
哈哈,这个问题我之前帮不少人理清楚过——SAS连接Oracle时不用写主机名和端口,本质都是借助Oracle客户端的配置或者特定连接机制,咱们一个个说:
问题1:没指定主机名时,SAS怎么连Oracle?
常见的有两种实现方式:
- 靠本地Oracle客户端的TNS配置兜底:如果你机器上装了Oracle客户端,肯定有个
tnsnames.ora文件(一般在ORACLE_HOME/network/admin目录下),里面已经把Oracle实例的主机、端口、服务名这些信息打包成了一个别名。SAS连接时只要指定这个别名,客户端就会自动去读背后的连接参数,不用你再写一遍主机和端口。比如代码可能是这样:
libname my_oracle_lib oracle user=my_username password=my_secret path='MY_ORCL_ALIAS';
这里的MY_ORCL_ALIAS就是tnsnames.ora里提前配好的条目,相当于给连接信息起了个外号,SAS用这个外号就能找到对应的数据库。
- 本地数据库的默认实例连接:如果你的SAS和Oracle数据库装在同一台机器上,Oracle默认会有一个本地实例(比如默认的
ORCL),这时候SAS可以通过本地IPC(进程间通信)连接,完全不用走网络,自然也就不需要主机名和端口,直接指定实例名就行。
问题2:官方案例里为啥不用写主机名和端口?
官方案例的核心就是用了上面说的TNS别名或者本地默认实例。比如案例里的代码可能是:
libname orcl oracle user=scott password=tiger path='ORCL';
这里的ORCL要么是tnsnames.ora里已经配置好的别名,要么是本地机器上的默认Oracle实例。Oracle客户端会自动帮你补全主机、端口这些细节,所以案例里不用显式写出来。
另外还有个小情况:Oracle的EZ Connect(简易连接)支持简化写法,如果是本地主机+默认端口1521,甚至可以直接写path='ORCL',这时候客户端会自动用localhost:1521来补全连接信息,看起来也像是没写主机和端口。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

