Oracle 静态监听和动态监听

什么是注册?
  注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名
就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。
  在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务)
  相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

静态监听
如果知道数据库的信息,可以先在监听文件里面配置好要监听的数据库的实例名,并配置server名称,这种就是静态监听,因为这个监听服务器是由监听程序发起的,所以状态一直是UNKNOWN,且数据库关闭后这个监听还会存在。
静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。
静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。

静态监听是通过文件中指定的instancename,端口可任意设置,数据库可关闭
必须配置listener.ora
这一句可注释掉,非必须 (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

动态监听
监听文件没有配置监听数据库的信息,但是当数据库启动的时候,会自动将instance_name,service_names两个参数将实例和服务动态注册到listener中,这种监听就是动态监听,因为这个监听是从数据库发起的,这个时候监听肯定是由对应的数据库的,所以显示的状态是READY,当数据库关闭后这个监听也就消失了

有没有此文件都不影响开启动态监听
/u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora

动态监听的原理
监听在启动时,会从$ORACLE_HOME/network/admin/listener.ora读取监听配置,如果该文件不存在,则监听会在主机名对应的IP和1521端口上进行监听。(所以在启用非默认监听端口时,必须配置listener.ora)
动态注册不需要显示的配置listener.ora文件,实例启动的时候,PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。

// 查看全局数据库名
// 此参数是数据库标识类参数,用service_name表示。数据库如果有域,则数据库服务名就是全局数据库名;如果没有,则数据库服务名就是数据库名
SQL> select * from global_name;
SQL> show parameter service_name;

// 查看数据库名
SQL> select name from v$database;
SQL> show parameter db_name

// 查看数据库域名
SQL> select value from v$parameter where name='db_domain';
SQL> show parameter domain;

默认情况下监听的端口是1521,有时候出自于安全或区别的考虑监听的端口就会用非默认的端口,SAP数据库使用的端口就是用1527的,所以为了保证数据库和监听能够建立连接,就需要配置静态监听或让数据库进行动态注册;

pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,要想让pmon动态注册listener,需要设置local_listener参数。

// 因为listener.ora中port是1522而非默认的1521,因此此时pmon不会动态注册监听
// 如果想让pmon动态注册prot以外的监听,此时需要设置参数 local_listener=listener
SQL> alter system set local_listener=listener;
alter system set local_listener=listener
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-00119: invalid specification for system parameter LOCAL_LISTENER
ORA-00132: syntax error or unresolved network name 'LISTENER'

// 错误的原因是设置参数local_listener时需要把下面内容增加到服务器端的tnsnames.ora中,因为pmon在动态注册监听时要从tnsnames.ora中读取相关信息
LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = s1115.example.com)(PORT = 1522))
  )

// 再次尝试修改local_listener参数,修改成功
SQL> alter system set local_listener=listener;

System altered.
 
// 或者直接把下面内容下到local_listener参数中(因此可以自动注册到多个端口)
SQL> alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=s1115.example.com)(PORT=1522))';

System altered.

什么是TNS?
透明网络底层(Transparent Network Substrate)
A foundation technology, built into the Oracle Net foundation layer that works with any standard network transport protocol.


TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC。如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序。


在Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。


TNS有那些配置文件?
TNS的配置文件包括服务器(安装Oracle数据库的机器)端和客户端两部分
服务器端有listener.orasqlnet.oratnsnames.ora,如果通过OCM(Oracle Connection Manage)和域名服务管理客户端连接,服务器端可能还包括cman.ora等文件
客户端有tnsnames.orasqlnet.ora
listener.ora:监听器配置文件,成功启动后是驻留在服务器端的一个服务。什么是监听器?监听器是用来侦听客户端的连接请求以及建立客户端和服务器端连接通道的一个服务程序。默认情况下Oracle在1521端口上侦听数据库连接请求
sqlnet.ora:用来管理和约束或限制tns连接的配置,通过在该文件中设置一些参数,可以管理TNS连接。根据参数作用的不同,需要分别在服务器和客户端配置
tnsnames.ora:配置客户端到服务器端的连接服务,包括客户端要连接到的服务器和数据库的配置信息


Oracle 9i引入了动态监听服务注册,指的是我们不需要在listener.ora中配置oracle要监听的数据库实例信息,数据库启动的时候,PMON进程可以自动注册当前数据库实例到listener的监听列表
使用动态监听服务器端必须满足以下条件:
1.数据库必须设置INSTANCE_NAME和SERVICE_NAME参数
2.监听器采用默认的TCP协议并使用1521端口进行监听
3.如果在配置监听器时采用了其他通讯协议或者侦听端口,进行以下设置告诉Oracle采用自定义监听器:
1).通过LOCAL_LISTENER参数明确设置当前使用的监听器
2).在服务器端都tnsnames.ora文件中加入自定义监听器的配置信息。如果采用了OCM,那么还可以在cman.ora中加入监听器的配置信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值