9404803 发表于 2015-11-9 13:15:11

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

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               TNSLSNRfor Linux: Version 8.1.7.4.0 - Production
   Start Date               17-JAN-200419:00:08
   Uptime                  31days 15 hr. 27 min. 59 sec



         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: 第一篇博文---OCM考试经验---监听