oracle提供了oci的连接方式,它是一种本地连接,需要在本地操作系统中安装客户端,在windows、linux、solaris下一般可以直接通过安装文件安装oracle 客户端,在linux下面还可以安装oracle client instant(它通常是通过rpm包的形式发布的)
应用程序能否通过oci进行访问,关键是tnsname的设置,这一般有两种方式
- 在程序内指明连接信息
- 使用配置文件指明连接信息,然后在程序内引用配置文件中的服务名
下面通过ruby代码举例说明
1.在程序内部设置,以oci8为例
require 'oci8'
db_def = %[(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(Host=192.168.2.245)
(Port=1522)
)
)
(CONNECT_DATA=
(SERVICE_NAME=oravas)
)
)]
conn = OCI8.new 'sxvas', 'sxvas', db_def
=> #<OCI8:SXVAS>
2.在配置文件中指明,以dbi为例
require 'dbi'
DBI.connect("DBI:OCI8:ORAVAS",'sxvas','sxvas')
=> #<DBI::DatabaseHandle:0xb7985f3c @driver_name="OCI8", @trace_mode=nil, @handle=#<DBI::DBD::OCI8::Database:0xb7985ed8 @attr={}, @handle=#<OCI8:SXVAS>>, @convert_types=true, @trace_output=nil>
在这种方式中,DBI通过ORAVAS这个服务名称访问数据库,而这个名称是在配置文件中设置的——
~$ cat /home/john/etc/tnsnames.ora
ORAVAS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.245)(PORT = 1522))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oravas)
)
)
这里的文件路径是可以配置的,它通过环境变量指定
~$ echo $TNS_ADMIN
/home/john/etc/tnsnames.ora
总的来说,如果依赖本机服务名寻找远程oracle服务器上的服务,依次根据 "环境变量 -> 配置文件 -> 服务名称" 进行访问