数据库启动之后想要提供网络服务还需要启动数据库的监听器(配置文件通常为listener.ora),其缺省端口是1521,接收来自客户端的访问请求(客户端请求通过tnsnames.ora文件定义发送)。
一、客户端的TNSNAMES.ORA文件配置
这个配置文件位于$ORACLE_HOME/network/admin目录下,典型的配置如下:
CLAUDE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = claude.com.cn)
)
)
这里的ADDRESS部分包含了服务器的地址及监听端口信息,CONNECT_DATA部分包含了链接信息,用于定义目标服务的名称。SERVER_NAME在这里用于识别访问的数据库服务。
配置完成之后,可以通过tnsping工具进行连通性测试:
[oracle@claude ~]$ tnsping claude
Used parameter files:
/home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = claude.com.cn)))
OK (0 msec)
在服务器端数据库中存在一个初始化参数SERVICE_NAME,这个参数用于客户端请求的数据库服务名。SERVICE_NAMES为实例所连接的数据库定义一个或多个服务名,可以通过定义多个服务名将不同的用户连接区分开来。
二、服务器端的监听器文件LISTENER.ORA配置
这个配置文件同样位于$ORACLE_HOME/network/admin目录下,典型的配置如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=orcl)
)
)
监听器文件主要包括两个部分:
- 第一部分LISTENER信息,这部分包含了监听的协议、地址以及端口等信息。
- 第二部分SID_LIST_LISTENER信息,这部分信息用于提供对外的数据库服务列表。
设置服务名的参数为GLOBAL_DBNAME,当处理客户端连接请求时,监听器首先尝试将GLOBAL_DBNAME和客户端请求中的SERVICE_NAME相匹配;如果客户端连接请求的是SID信息,则Oracle不检查GLOBAL_DBNAME设置,而是对监听器中设置的SID_NAME进行匹配。
三、通过不同服务器名对数据库的访问
客户端的配置示范:
SALES =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales.claude.com)
)
)
NEWS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = news.claude.com)
)
)
通过这两个服务名都可以顺利地访问到数据库:
SQL> connect claude/claude@news;
Connected.
SQL> show parameter service_names;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string sales.claude.com, news.claude.
com
SQL> connect claude/claude@sales;
Connected.
SQL> show parameter service_names;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string sales.claude.com, news.claude.
com
四、动态监听器注册服务
所谓动态注册时指当前实例启动之后,由后台进程PMON在监听器中注册数据库服务信息。在动态注册机制下,原来监听器中的SID_LIST部分将不再需要。
如果监听器具有非缺省配置,则需要设置LOCAL_LISTENER参数。例如监听器端口为1522,可以设置初始化参数为:
LOCAL_LISTENER=listener1;
对于共享服务器模式,可以设置为:
DISPATCHERS="(PROTOCOL=tcp)(LISTENER=listener1)"
在tnsnames.ora文件中listener1可以按如下方式解析:
listener1=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=prod-server)(PORT=1522)))