玩技术,Geeker
一个原创技术文章分享网站

Oracle学习笔记——配置监听

这都是命

从来没有想过,我又要回过头来重新捡起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日 于呼和浩特。

打赏

未经允许不得转载:果冻想 » Oracle学习笔记——配置监听

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    从今天开始,跟着博主的文章一起,开始了解和学习Oracle,共勉~

    Pan.11个月前 (11-08)回复

在这里玩技术,享受技术带来的疯狂

捐赠名单关于果冻