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

1、Oracle Net协议

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

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

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

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

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

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

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

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

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

二、监听器配置

1、添加和配置监听器

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

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

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

对于本安装,监听器配置信息记录在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数据库后,系统默认在数据库服务器本地安装了SQL PLUS等客户端工具,而且在监听配置文件的相同位置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)
    )
  )

当使用数据库服务器端的客户工具时,和从远程客户机连接服务器一样,也是根据输入的用户名、密码及网络服务名(或类似CONNECT username/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执行验证和建立连接。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-1198165/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29654823/viewspace-1198165/

oracle 客户端与服务器端的关系相关推荐

  1. PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的。 检查Oracle服务器端字符编码,用 sel

    PLSQL Developer 插入中文 乱码问题,如图 这个是由于oracle服务器端字符编码 和 Oracle 客户端 字符编码不一致引起的. 检查Oracle服务器端字符编码,用 select ...

  2. 深入Atlas系列:Web Sevices Access in Atlas示例(6) - 在客户端隐藏服务器端类型信息...

    如果要在客户端指定服务器端Web Service方法所接收的参数类型,就必须在客户端通过"__type"来指定,但是这就暴露了服务器端的具体类型了,这可不太好.现在我们就来看一下应 ...

  3. 现存问题以及解决方案:在ASP.NET AJAX中从客户端向服务器端传送DataTable

    摘要 在<现存问题以及解决方案:在ASP.NET AJAX客户端得到服务器端的DataTable>这篇文章中,我给出了一个在ASP.NET AJAX中从服务器端得到客户端DataTable ...

  4. oracle 客户端访问数据库,ORACLE数据库客户端连接访问服务器

    数据库客户端连接访问服务器 oracle客户端访问服务器是通过Listener/Tnsnames协议机制.Listener负责再服务器上监听来自远端的连接请求,而Tnsnames则是远端的连接协议.用 ...

  5. ORACLE客户端与服务器连接

    对于初学者,关于客户端工具与数据库服务器的连接总是会存在如下的疑问: 我一定要在本地机器上面安装Oracle数据库吗? 如果我在本地安装了Oracle数据库,为什么还要配置一个TNS来连接数据库呢,它 ...

  6. sqlldr 导入乱码,Oracle客户端字符集问题

    2019独角兽企业重金招聘Python工程师标准>>> 1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, value$ ...

  7. 如何处理Oracle客户端查询乱码问题

    From: http://archive.cnblogs.com/a/2074122/ 1,查Oracle数据库创建时候的字符集: Oracle服务器端执行 SQL> select name, ...

  8. oracle客户端三种连接,客户端连接ORACLE的几种方法

    一.HOSTNAME方法 对于网络结构比较单一,Oracle服务器比较少的情况下,可以使用HOSTNAME方法.不过这种方法有几个限制: 1. 必须使用TCP/IP协议 2. 不能使用高级管理工具,比 ...

  9. Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用....

    1. 同事反馈登录最新的oracle12.2 的数据库时登录不上报错: 2. 记得当时查过资料, Oracle 在12.2 增加了客户端连接数据库的加密级别 比较早的oracle客户端比如11.2.0 ...

最新文章

  1. 洛谷P1919 【模板】A*B Problem升级版(FFT)
  2. SAP QM 执行事务代码QP01,系统报错 -Material type FOOD is not defined for task list type Q-
  3. JS关于时间的一些计算与获取
  4. 使用git 添加远程仓库 或者 从远程仓库克隆的两种实现
  5. [XMOVE自主设计的体感方案] XMove Studio管理系统(二)应用开发API简要介绍
  6. WPF 菜单栏滚动到顶部后固定的两种方法
  7. hana数据库导入mysql_【SAP HANA】新建表以及操作数据(3)
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 11丨产品销售分析 II【难度简单】
  9. 佩斯大学计算机科学世界排名,美国佩斯大学留学推荐 计算机科学专业
  10. 柱形图无数据可选中_Excel---多层柱形图来了!让领导看呆
  11. 开发本无趣,看 Unity 如何为其绽放精彩!
  12. java 错误码设计_关于Java中异常的设计
  13. Docotic.Pdf New Crack by Crackdung
  14. dhtmlxgantt pro 7.1.10 | dhtmlxgantt 专业版 7.1.10
  15. unity使用videoplayer播放视频黑屏问题解决方案
  16. Touchbar Pet 0.8.2 最新版 (Touch Bar触控栏养宠物)
  17. python上楼梯问题_python解决上楼梯问题
  18. 用python画一个蜡笔小新
  19. TVS (瞬态二极管)
  20. UninstallPKG for Mac(PKG文件卸载)

热门文章

  1. Redis set 类型 查询命令
  2. 【CheatEngine】关于BCR的内存分析
  3. corr()函数的用法
  4. C语言:L1-039 古风排版 (20 分)
  5. flac格式如何转mp3,3招帮你搞定
  6. 助力服装智造!这家企业携手美创实现全流程数据安全保障
  7. MATLBA基础图像处理算法之四叉树分割法
  8. SwiftUI AVKit 之合并和叠加音频mp3 wav 并输出(教程含源码)
  9. MySQL查询语句练习题(50题版)
  10. LeetCode day15 2014/11/3