第一篇博文---OCM考试经验---监听

来源:互联网 发布:舵手医药软件 编辑:程序博客网 时间:2024/06/04 18:34
2014年只剩下一两天了,2015年是一个新的开始,而且注定会是不安分的一年,各种技能的提升为了未来更好地生活,本想在2015年的第一天完成首篇博文,因为考(fan)试(lan),一拖再拖拖到今天;) 也许物质方面需要靠机会的把握,但个人的升华则是为了积攒抓住机会的资本,作为从小就喜欢电脑的人,开技术博客的时间确实是太晚了,但晚来总比不来强。之前已经考完OCM考试,并顺利通过,期间总结了很多数据库知识,监听作为外界与数据库联系的第一道关卡,所以以它作为博客的第一篇文章。



*********************c*****u*****t*****************************

OCM考试经验---数据库监听


首先是三个重要的配置文件listener.ora(服务器端)、sqlnet.ora(客户端)、tnsnames.ora(客户端) 
都是放在$ORACLE_HOME\network\admin目录下

   重点:三个文件的作用和使用

 1、 sqlnet.ora-----作用类似于linux或者其他unix的nsswitch.conf文件,通过这个文件来决定以什么方式查找一个连接中出现的连接字符串:
      例如我们客户端输入 sys/oracle@orcl
      1、假如我的sqlnet.ora是下面这个样子:
  NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
 那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
 
  2、如果我是这个样子:
  NAMES.DIRECTORY_PATH= (TNSNAMES)
       那么客户端就只会从tnsnames.ora查找orcl的记录

  #------------------------
  
 2、 Tnsnames.ora------用于提供@后的连接字符串(@prod) tnsname到主机名或者ip的对应,同样包括共享与专用连接方式
       配置在本地主机上
       只有当sqlnet.ora中类似NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有TNSNAMES是,才会尝试使用这个文件。
         
  例子中有两个,ORCL 对应的本机,SALES对应的另外一个IP地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说
  #你所要连接的时候输入得TNSNAME:
  ORCL =
  (DESCRIPTION =
  (ADDRESS_LIST =
  #下面是这个TNSNAME对应的需要登录数据库所在主机,监听的端口,协议方式
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
  (CONNECT_DATA =
  #使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式
  #自动调节
  (SERVER = DEDICATED)
  #对应service_name,SQLPLUS>show parameter service_name;
  #进行查看
  (SERVICE_NAME = orcl)  该名称如果对应静态监听需要,需要与sid_list中global_dbname相同,
                                                 如果是动态监听则需与数据库service_names相同
  )
  )
  #----------------------
  
  客户端完了我们来看服务器端
  
  listener.ora------listener监听器进程的配置文件10g需要注意格式问题,11g无此问题
    listener.ora 指定监听程序(进程)在哪台主机和哪个端口监听所需远程连接数据库,如果为动态监听,则监听所有向该端口申请链接该主机上一个数据库的请求,如果为静态监听,则配置sid_list相应globa_ dbname(对外服务名,可任意)和需监听数据库的对应的sid_name(实例名) 
     关于listener进程就不多说了,接受远程对数据库的接入申请并转交给oracle的服务器进程。所以如果不是使用的远程的连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。
  
  Listener.ora文件的例子
  #下面定义LISTENER进程为哪个实例提供服务
  #这里是ORCL,并且它对应的ORACLE_HOME和GLOBAL_DBNAME
  #其中GLOBAL_DBNAME不是必需的除非使用HOSTNAME做数据库连接 
  SID_LIST_LISTENER =     如配置sid_list_XXXX则该监听为静态监听
  (SID_LIST = 
  (SID_DESC =
  (GLOBAL_DBNAME = boway)
  (ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)
  (SID_NAME = ORCL)
  )
  )
  #监听器的名字,一台数据库可以有不止一个监听器
  #再向下面是监听器监听的协议,ip,端口等,这里使用的tcp1521端口,并且使#用的是主机名
  LISTENER =
  (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))
  )
  上面的例子是一个最简单的例子,但也是最普遍的。一个listener进程为一个instance(SID)提供服务。

静动态监听解析
所谓动态注册,oracle通过PMON进程根据参数instance_name和service_names中的内容,把oracle数据库的信息注册到默认的1521端口的监听器上。不管服务器端有几个监听程序,oracle默认都是注册到1521端口的监听器,也就是说,对于其他端口的监听器来说,如果想要正常的识别远程客户端提供的信息,需要做出配置,也就是静态注册。在lsnrctl命令下,通过services命令可以观察到是静态注册还是动态注册。如果是静态注册的话,oracle显示的服务的状态是unknown,如果是动态注册的话,服务的状态显示是ready。不过,如果用户想要修改动态注册的端口,这也是可以实现的,可以通过设置数据库的local_listener参数来实现。

当监听为动态监听时,须在服务器端配置相应tnsname.ora文件, 应为PMON需要靠本机tnsnames.ora配置来解析动态注册与动态监听ADDRESS相同的NET_SERVICE_NAME(监听名),如果更改需重新指定
另,动态监听需要制定数据库参数local_listerner,设置为服务器端的tnsnames的动态监听的连接字符串,并在设置后手动注册 alter system register

系统推荐使用静态监听,动态监听时将数据库作为程序注册到监听,自动将实例名instance_name与serv_name注册到listener中,
没有serv_name将db_name与db_domain拼接,serv_name可以有多个,默认注册到1521监听中。

监听常用命令

启动监听    

     $ lsnrctl start

停止监听器的命令为

     $ lsnrctl stop

监测监听器当前状态的命令为

     $ lsnrctl status               静态监听状态永远为unknown,   动态监听状态在动态注册后为READY

当 lsnrctl status 命令有如下输出结果

     STATUS of the LISTENER

     ------------------------

     Alias                  LISTENER

     Version                 TNSLSNR for Linux: Version 8.1.7.4.0 - Production

     Start Date               17-JAN-2004 19:00:08

     Uptime                  31 days 15 hr. 27 min. 59 sec



-转载补充

listener启动时候根据listener.ora配置的信息静态注册可用的服务,同时数据库实例启动以后(PMON)会把

service_names,db_name的值动态的注册到Listener。

例如,如果service_names的值为orcla,orclb,db_name的值为orcl,在listener.ora里有如下配置:

    (SID_DESC =
      (GLOBAL_DBNAME = orclst) 
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (SID_NAME = orcl)
    )

则在Tnsname.ora中可以作为SERVICE_NAME的值为orcla,orclb,orcl,orclst

通过lsnrct status 可以看到这些服务的信息: status READY的为动态注册的(因为是在实例启动之后才注册到listener的,所以状态为ready),status UNKNOWN的为静态注册的(因为是listener启动的时候根据配置启动的,这是实例是否启动是不知道的,所以为unknown)



0 0
原创粉丝点击