来自农村的老实娃
分类: Oracle
2010-11-18 13:41:43
Oracle TNS简述
TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序.
TNS的配置文件包括服务器(安装Oracle数据库的机器)端和客户端两部分.服务器有listener.ora,sqlnet.ora,tnsnames.ora,如果通过OCM(Oracle Connection Manage)和域名服务管理客户端连接,服务器端可能还包括cman.ora等文件;客户端有tnsnames.ora,sqlnet.ora.
listener.ora:监听器配置文件,成功启动后是驻留在服务器端的一个服务.什么是监听器?监听器是用来侦听客户端的连接请求以及建立客户端和服务器端连接通道的一个服务程序.默认情况下Oracle在1521端口上侦听数据库连接请求.
sqlnet.ora:用来管理和约束或限制tns连接的配置,通过在该文件中设置一些参数,可以管理TNS连接.根据参数作用的不同,需要分别在服务器和客户端配置.
tnsnames.ora:配置客户端到服务器端的连接服务,包括客户端要连接到的服务器和数据库的配置信息.
Oracle所有的TNS配置文件都存放在
unix/linux: $ORACLE_HOME/network/admin
windows: %ORACLE_HOME%\network\admin
我们可以手动配置,也可以通过Oracle Net Configuretion Assitant配置.
首先在Oracle server端安装完成之后,因该先着手配置LISTENER,listenerr是进行Oracle通讯的首要组件,紧接着在客户端安装Oracle client,同时配置tnsnames.ora文件.
首先监听器包括两个部分:Oracle要监听的地址、端口、通讯协议;Oracle要监听的数据库实例.非RAC环境下,LISTENER只能监听本服务器的地址和实例,RAC环境下,LISTENER还可以监听远程服务器.每个数据库最少要配置一个监听器
LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc)) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=plsextproc) (ORACLE_HOME=/oracle10g) (PROGRAM=extproc) ) (SID_DESC= (SID_NAME=mayp) (ORACLE_HOME=/oracle10g) ) )
listener部分配置了Oracle要监听的地址信息;SID_LIST_LISTENER部分配置了Oracle需要监听的实例.
HOST参数即可以是hostname,也可以是ip地址.在一个多IP的服务器上可以配置listener同时监听多个地址.比如下面的配置:
LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.10)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.2.1) (PORT=1521)) ) )
或者可以配置多个监听器,分别监听不同的IP地址.
Oracle Net支持的通讯协议有:
■ TCP/IP ■ TCP/IP with SSL ■ Named Pipes ■ SDP
Oracle 9i引入了动态监听服务注册,指的是我们不需要在listener.ora中配置oracle要监听的数据库实例信息,数据库启动的时候, PMON进程可以自动注册当前数据库实例到listener的监听列表.也就是说上面的SID_LIST_LISTENER部分就不用配置了。使用动态监听服务器端必须满足以下条件:
■ 数据库必须设置INSTANCE_NAME和SERVICE_NAME参数;
■ 监听器采用默认的TCP协议并使用1521端口进行监听;
■ 如果在配置监听器时采用了其他通讯协议或者侦听端口,进行以下设置告诉Oracle采用自定义监听器:
1、通过LOCAL_LISTENER参数明确设置当前使用的监听器,
2、在服务器端都tnsnames.ora文件中加入自定义监听器的配置信息.如果采用了OCM,那么还可以在cman.ora中加入监听器的配置信息.
.LOCAL_LISTENER 可以通过ALTER SYSTEM动态设置.
ALTER SYSTEM SET LOCAL_LISTENER=’listener_alias’;
一个动态监听配置的示例:
listener.ora文件的配置:
LISTENER1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) (ADDRESS = (PROTOCOL = IPC)(KEY = extproc)) ) )
LOCAL_LISTENER参数的配置(因为这里采用非1521的端口):
SQL> show parameter local_listener NAME TYPE VALUE ------------------------------------ ------------ ----------- local_listener string listener1
tnsnames.ora的配置:
LISTENER1= (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)(IP = FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
我们说的TNS配置其实就是对tnsnames.ora文件的配置,tnsnames.ora 有客户端的配置,也有服务器端的配置.客户端和服务器端配置的区别是因为服务器端的配置跟LISTENER的配置相关.下面是一个简单的配置示例:
mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
同样tnsnames.ora也包括两部分,ADDRESS_LIST 部分包含了远程数据库服务器的监听地址信息,也就是要告诉TNS远程数据库可通过乃些地址和CLIENT通讯;CONNECT_DATA 定义了CLIENT要连接的数据库,还有数据库的连接方式,(专用或共享)。在一个多ip环境中,TNS也可以配置多个远程IP地址:
mayp = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVICE_NAME = mayp) (SERVER = DEDICATED) ) )
一般在多IP环境中,还可以在TNS端配置load_balance和failover特性.这些特性在RAC环境下比较流行,load_balance特性可以让client在连接数据库是选择任意地址进行连接,是各地址的连接均衡.failover开启Oracle特有的 TAF特性,TAF为Transparent Application Failover的缩写.load_balance可以在客户端配置,也可以在服务器端配置.下面是一个客户端的配置示例:
mayp = (DESCRIPTION = (ADDRESS_LIST = (LOAD_BALANCE=ON) (FAILOVER=ON) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.205.73)(PORT = 1421)) (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.200.64)(PORT = 1421)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MAYP) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) ) ) )
sqlnet.ora是个很重要的配置,他可以控制和管理Oracle连接的属性,根据参数作用的不同决定在客户端配置还是在server端配置.sqlnet.ora的配置是全局性的,也就说sqlnet.ora的配置是对所有的连接起作用,如果想对某个特殊的连接或服务进行约束或限制,可以在TNS配置相应参数.详细参数可以参考:
Oracle® Database Net Services Reference