侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Oracle客户端的安装与远程连接配置方法分享

数据库  /  管理员 发布于 6年前   215

一、Oracle客户端与服务器端的通讯机制

    1、OracleNet协议

   如下图所示,Oracle通过Oracle Net协议实现客户端与服务器端的连接以及数据传递。OracleNet是同时驻留在Oracle数据库服务器端和客户端上的一个软件层,它封装了TCP/IP协议,负责建立与维护客户端应用程序到数据库服务器的连接。

     如下图所示,客户端发出的请求首先通过OracleNet协议转换,转换成可以通过网络传输的信息,通过TCP/IP网络将请求传输到数据库服务器端;服务器端接受到客户请求后要通过OracleNet协议转换,将请求转换成数据库可以解释执行的本地指令,并在服务器端执行(主要是一些输入输出操作),并将结果通过TCP/IP协议和OracleNet协议传输给客户端显示。           

 

   2、客户端与服务器端的连接过程

   在分析客户端与服务器端的连接机制之前,先要定义两个概念,一个是Oracle监听器,一个是Oracle网络服务名。

   Oracle数据库服务器通过一个名为“OracleNet监听器”的组件接收来自客户端的连接请求。监听器是位于服务器端的一个后台进程,发送给数据库的客户端连接请求,首先被服务器端的监听器所侦听,并将请求所转交给对应的数据库实例,从而建立起客户端与服务器的连接。连接建立后,客户端与服务器端就可以直接进行通讯,不再需要监听器参与。

   要实现监听器对客户请求的监听,需要对监听器进行配置,包括监听端口、监听器所在数据库的全局数据库名称、数据库实例等信息。

   Oracle网络服务名是一个标识符,它代表着客户端连接服务器的配置信息(实际上就是连接请求的内容),包括数据库主机地址、监听端口、全局数据库名称等内容((有关全局数据库、数据库实例等,请参考Oracle数据库安装部分)。

 

   如图所示,客户端与服务端的连接过程为:

   (1)首先在服务器端有一个常驻的监听器(监听服务要打开)监听客户端发出的连接请求。
   (2)用户在客户端(企业服务器或SQL工具)输入用户名、口令及网络服务名,或在SQL命令行中输入类似“CONNECTusername/password@net_Service_name”的类似请求。
   (3)客户端查看网络服务配置文件tnsname.ora,将网络服务名映射为包含Oracle服务器地址、监听端口和全局数据库名的连接描述符。
  (4)客户端根据连接描述符定位监听器,并通过网络将连接信息传递给监听器。
   (5)监听器查询监听配置文件listener.ora,找出所要连接的数据库服务器。
   (6)客户机和服务器开始通信。

二、监听器配置

   1、添加和配置监听器

   如下图所示使用Oracle Net Configuration Asistant工具添加并配置服务器的监听器:

 

   监听程序配置完成后,数据库系统会自动启动该监听器。

   添加和配置监听器后也可以使用Oracle NetManager工具查看和修改监听器配置,如监听位置、监听器所服务的全局数据库名称等。如下图所示:


 

   对于本安装,监听器配置信息记录在E:\Oracle_Server\oracle\ora92\network\admin\listener.ora文件中。其主要内容如下:

   LISTENER=
    (DESCRIPTION_LIST =
      (DESCRIPTION =
        (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = tsinghua-p5z3mm)(PORT =1521))
         )
       )
    )

   SID_LIST_LISTENER =
    (SID_LIST=
     (SID_DESC =
       (SID_NAME = PLSExtProc)
         (ORACLE_HOME = E:\Oracle_Server\oracle\ora92)
           (PROGRAM = extproc)
        )
       (SID_DESC =
         (GLOBAL_DBNAME = mydb.bawei)
           (ORACLE_HOME = E:\Oracle_Server\oracle\ora92)
             (SID_NAME = mydb)
          )
        )

三、客户端工具的安装与网络服务的配置

    可以在不同于数据库主机的其它机器安装客户端工具,并通过配置客户端网络服务,连接到数据库服务器。客户端安装与配置过程如下图所示(本安装将客户端安装在了与数据库同一台机器的不同目录中,模拟远程访问数据库的情况):

   在安装了客户端并配置了客户端网络服务名之后就可以从客户端工具登录和访问远端数据库服务器了。对于本安装,客户端网络服务配置记录在E:\Oracle_Client\oracle\ora92\network\admin\tnsnames.ora文件中,其主要内容如下:

    REMOTEDB=
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.6)(PORT =1521))
       )
      (CONNECT_DATA =
        (SERVICE_NAME = mydb.bawei)
       )
    )

   这样,当在客户端工具中输入网络服务名remotedb时,将被解析为数据库地址、端口、全局数据库名等信息,与输入的用户名、密码一起发送到服务器端,由监听器接收,并与监听配置文件对照,将请求转交给相应的数据库实例处理。

   客户端网络服务可以使用客户端的Oracle Net Manager工具进行修改,也可以添加新的客户端网络服务名。

   

   需要指出的是:

   服务器端的客户工具(SQL PLUS、企业管理控制台等)与数据库服务的连接机制与远程客户端连接是一样的。
   在安装完Oracle数据库后,系统默认在数据库服务器本地安装了SQLPLUS等客户端工具,而且在监听配置文件的相同位置E:\Oracle_Server\oracle\ora92\network\admin文件夹中默认提供了服务器端的网络服务连接配置文件tnsnames.ora,其中包含一个与数据库实例SID同名的网络服务名配置,包括数据库所在主机名或ip地址、监听端口、数据库服务名(全局数据库名)等。对于本安装,该tnsnames.ora文件主要内容如下:

  MYDB =
  (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = tsinghua-p5z3mm)(PORT =1521))
    )
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = mydb.bawei)
    )
  )

   当使用数据库服务器端的客户工具时,和从远程客户机连接服务器一样,也是根据输入的用户名、密码及网络服务名(或类似CONNECTusername/password@net_Service_name的SQL命令行),查找tnsnames.ora文件,找到网络连接服务名等于net_Service_name的一项,并获取数据库主机地址、监听端口、全局数据库名等信息。

   该请求信息同样被传输到监听端口,监听器再将该信息与同在文件夹E:\Oracle_Server\oracle\ora92\network\admin中的listener.ora监听器配置文件对照,如果listener.ora监听器配置文件中包含匹配的项,则将该请求转给对应的数据库实例。

   由此可见,服务器端的客户端工具与数据库服务的连接与远程客户端连接一样,执行了相同的的过程。
   实际上,服务器端的客户工具是通过服务器端tnsnames.ora和listener.ora进行验证并建立连接;远程客户端是通过客户端的tnsnames.ora和服务器端的listener.ora执行验证和建立连接。


  • 上一条:
    oracle中lpad函数的用法详解
    下一条:
    oracle客户端PLSQL连接失败解决方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客