IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Oracle学习笔记——配置监听

    果冻想发表于 2015-05-18 13:46:47
    love 0

    这都是命

    从来没有想过,我又要回过头来重新捡起Oracle。还记得那是大学的时候,非常羡慕我的Oracle数据库老师,各种问题都能搞定,以至于在大学的时候,学习Oracle记了N多的笔记,各种学习心得,不过那个时候傻得不知道写博客,到今天总结的笔记也不知道去哪里了。

    从大城市回到了家乡小城市,大城市互联网公司几乎没有用Oracle这种东西的,基本都是MySQL等,而回家以后,这里几乎没有互联网公司,都是传统的IT企业,用的都是Oracle数据库,如我现在的东家。

    重新捡起Oracle,真的是感慨万千,几分熟悉,又是几分陌生。知识就是在你一段时间不用以后,就会慢慢的变的陌生起来。以至于今天再看Oracle,仅仅是似曾相识。从这篇文章起,就开始我学习Oracle的漫长之旅。希望有搞Oracle的朋友一起作伴,一同交流。

    我遇到的问题

    搞Oracle,第一件事就是客户端连接网络上的Oracle数据库。一般我们用的客户端都是 PL/SQL Developer。现在问题来了,我安装完PL/SQL Developer以后,死活就是连不上。好吧,我承认,不Google,我搞不定。根据对应的错误提示,Google之后,就有了这篇文章。

    监听是什么?

    如果你做过网络开发,对于监听listen就比较熟悉了,监听是什么,在网络开发中,就是监听某个端口,等待客户端的连接。同理,在Oracle中,监听的意思也和这差不多。

    在Oracle数据库服务器中,通过一个叫“监听器”的组件接收来自客户端的连接请求,它是客户端和 服务器端中间的桥梁。监听器虽然在Oracle服务器端,但是它和Oracle主进程并不绑定,它是一个独立运行在服务器端的后台进程,独立于数据库运行。它负责对客户端传入的连接请求进行监听,并且对服务器端的连接负荷进行调整。当客户端准备建立一个到服务器端的连接时,监听器接收客户端的连接请求, 然后再将这个客户端连接请求交给服务器进行处理,一旦客户端和服务器建立连接,客户端和服务器以后就直接进行通信,而不再需要监听器的参与,这就好比师傅 领进门,修行靠个人。就如下图所示:

    监听器

    1. 客户端向服务器端发出连接请求,监听器监听到客户端的连接请求;
    2. 监听器把客户端的连接请求交给数据库服务器进行处理;
    3. 经过监听器建立连接以后,客户端与服务器端就可以直接进行通信,而不再需要监听器的参与了。

    以上就是监听器干的活,也就是说,你对数据库服务器的第一次,肯定会给监听器,如果监听器没有配好,你就甭想连数据库了。那么,怎么才能配好监听器呢?

    listener.ora、sqlnet.ora和tnsnames.ora文件

    说到配监听器,就不得不先来说说listener.ora、sqlnet.ora和tnsnames.ora这三个文件,这三个文件别看后缀名是ora,其实就是一文本文件,可以使用记事本打开看看。

    • listener.ora文件
      打开listener.ora文件看看,贴上一部分有代表性的内容。
      #这是一个名为LISTENER1的监听器
      #监听的协议是TCP协议
      #监听的主机IP是127.0.0.1
      #监听的端口是1521端口
      LISTENER1 =
          (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      )
      
      #记录了监听器LISTENER1服务的全局数据库名、数据库路径和数据库实例名
      SID_LIST_LISTENER1 =
          (SID_LIST =
              (SID_DESC =
                  (GLOBAL_DBNAME = ORCL)
                  (ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
                  (SID_NAME = ORCL)
              )
          )
      

      只有我们在服务器端配置好了监听,客户端才有可能连上数据库服务器,至于客户端是如何连数据库服务器的,稍后再讲。

    • sqlnet.ora文件
      打开sqlnet.ora文件看看,内容如下:
      SQLNET.AUTHENTICATION_SERVICES= (NTS)
      NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
      

      这个sqlnet.ora文件实际上就是一个配置文件,主要是和接下来说的tnsnames.ora配合使用。关于sqlnet.ora的具体作用,请参见这篇《Oracle学习笔记——详解sqlnet.ora的作用》。

    • tnsnames.ora文件
      tnsnames.ora文件存放于客户端机器上,和sqlnet.ora文件配合使用。可以简单的看看tnsnames.ora文件中的内容。
      #ORCL是个别名
      #这条信息记录了我们使用TCP协议,去连接IP地址为127.0.0.1,端口号为1521的数据库主机上服务名为orcl的数据库
      ORCL =
          (DESCRIPTION =
              (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
              (CONNECT_DATA =
                  (SERVER = DEDICATED)
                  (SERVICE_NAME = orcl)
              )
          )
      

      以后,我们还会配置更多的数据库连接信息,比如我要连接192.168.10.2主机上的数据库,我们只需要在tnsnames.ora中继续追加新的连接信息即可,比如:

      STDB =
          (DESCRIPTION =
              (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.2)(PORT = 1521))
              (CONNECT_DATA =
                  (SERVER = DEDICATED)
                  (SERVICE_NAME = stdb)
              )
           )
      

      看到这里,你可能觉的你已经明白了tnsnames.ora文件的作用了,推荐你继续阅读以下这篇《Oracle学习笔记——详解sqlnet.ora的作用》,更好的理解sqlnet.ora与tnsnames.ora文件是如何搭配工作的。

    服务器端配置

    好了,配置监听主要就是配置listener.ora、sqlnet.ora和tnsnames.ora这三个文件,而在服务器端,只需要我们搞定listener.ora文件就可以了。

    • 我们可以直接使用Oracle自带的配置工具——Net Manager来配置,作为一名Geeker,绝对不会去使用那么难用的工具的,还是直接修改listener.ora来的快,来的省事,如果你非要使用Net Manager去配置,请去Google吧;
    • 直接编辑listener.ora,就像下面这样,配置一个新的监听器:
      LISTENER =
          (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
      )
      
      SID_LIST_LISTENER =
          (SID_LIST =
              (SID_DESC =
                  (GLOBAL_DBNAME = ORCL)
                  (ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
                  (SID_NAME = ORCL)
              )
          )
      

    你想在哪个数据库上配置一个新的监听,就修改对应的内容即可。

    上面也说了,监听器是一个独立的进程,那么配置好了监听,就需要启动监听程序,那么如何启动呢?请阅读下面的【常用命令】一节。

    客户端配置

    客户端配置就更简单了,在【listener.ora、sqlnet.ora和tnsnames.ora文件】一节中,介绍tnsnames.ora文件时,就进行了举例说明,这里就不再多说了。

    解决我的问题

    哦,说了这么多了,该回到我的问题上来了,我就是连不上远程的数据库,归根到底就是没有在客户端配置远程数据库信息,这个问题很简单,但是如果你不懂得这中间的原理的话,你就不会了解这个问题的本质。

    很多时候,一个问题就是很简单,就是一个很简单的知识点,今天多总结一点,就为明天少挖一个坑,或者就会帮别人多填一个坑。

    常用命令

    上面也说了,服务器配置完成以后,如何启动监听进程,查看监听器的状态,停止监听进程呢?在工作中,我们会经常用到下面的一些命令:

    • 启动监听器
      lsnrctl start <监听器的名字>
      
      // 启动名为LISTENER的监听器
      lsnrctl start LISTENER
      

      当我们不指定监听器的名字时,就默认启动LISTENER监听器;

    • 关闭监听器
      lsnrctl stop <监听器的名字>
      
      // 关闭名为LISTENER的监听器
      lsnrctl stop LISTENER
      

      当我们不指定监听器的名字时,就默认关闭LISTENER监听器;

    • 查看监听器的状态
      lsnrctl status <监听器的名字>
      
      // 查看名为LISTENER的监听器的运行状态
      lsnrctl status LISTENER
      

      当我们不指定监听器的名字时,就默认查看LISTENER监听器的状态。

    现在服务器端的监听进程已经启动起来了,客户端也已经配置好了,那么如何进行连通性测试呢?

    1. 使用tnsping命令
      tnsping <客户端配置的别名>
      
      // 判断是否连通ORCL别名对应服务器上的数据库
      tnsping ORCL
      
    2. 使用客户端SQLPLUS连接数据库
      打开SQLPLUS连接一下远程数据库,就可以进行测试;
    3. 使用PL/SQL Developer连接数据库

    总结

    好了,总结完毕,一个小小的知识点,背后却是隐藏着这么多的内容。以谦虚的态度去学习每一个知识点。从这篇文章开始,开始Oracle学习的漫长之旅。有任何问题,请留言,希望和Oracle爱好者一起学习交流。

    Stay hungry,Stay foolish!!!

    2015年4月20日 于呼和浩特。



沪ICP备19023445号-2号
友情链接