TCP/IP连接的基本原理-----连接Oracle

本文介绍了Oracle数据库中客户端如何通过TCP/IP连接服务器的过程。包括TNS连接串的作用、tnsnames.ora文件配置、监听器的功能及共享服务器和专用服务器连接的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  www.grn8.com   绿吧导航网 免费广告换连接。
这里将分析网络上最常见的一种情形:在TCP/IP连接上建立一个基于网络的连接请求。在这种情况下,客户在一台机器上,而服务器驻留在另一台机器上,这两台机器通过一个TCP/IP网络连接。客户率先行动,使用Oracle客户软件(Oracle提供的一组 应用程序接口,或API)建立一个请求,力图连接数据库。例如,客户可以发出以下命令:
这里,客户是程序SQL*Plus, scott/tiger为用户名/密码, ora10g.localdomain是一个TNS服务名。TNS代表 透明网络底层(Transparent Network Substrate),这是 Oracle客户中处理远程连接的“基础”软件,有了它才有可能建立对等通信。TNS连接串告诉Oracle软件如何与远程数据库连接。一般地,你的机器上运行的客户软件会读取一个tnsnames.ora文件。这是一个纯文本的配置文件,通常放在 [ORACLE_HOME]/network/admin 目录下([ORACLE_HOME] 表示Oracle安装目录的完整路径)。如果有以下配置:
根据这个配置信息,Oracle客户软件可以把我们使用的TNS连接串 ora10g.localdomain映射到某些有用的信息,也就是主机名、该主机上“监听器”进程接受(监听)连接的端口、该主机上所连接数据库的 服务名,等等。服务名表示具有公共属性、服务级阈值和优先级的应用组。提供服务的实例数量对应用是透明的,每个数据库实例可以向监听器注册,表示要提供多个服务。所以,服务就映射到物理的数据库实例,并允许DBA为之关联阈值和优先级。
这个串( ora10g.localdomain)还可以用其他方式来解析。例如,可以使用Oracle Internet目录(Oracle Internet Directory,OID),这是一个分布式轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)服务器,其作用就相当于解析主机名的DNS。不过,tnsnames.ora文件通常只适用于大多数小到中型安装,在这些情况下,这个配置文件的副本不算太多,尚可管理。
既然客户软件知道要连接到哪里,它会与主机名为 localhost.localdomain的服务器在端口1521上打开一条TCP/IP socket连接。如果服务器DBA安装并配置了Oracle Net,并且有一个监听器在端口1521上监听连接请求,就会收到这个连接。在网络环境中,我们会在服务器上运行一个称为 TNS 监听器的进程。就是这个监听器进程能让我们与数据库物理连接。当它收到入站连接请求时,它会使用自己的配置文件检查这个请求,可能会拒绝请求(例如,因为没有这样的数据库,或者可能我们的IP地址受到限制,不允许连接这个主机),也可能会接受请求,并真正建立连接。
如果建立一条专用服务器连接,监听器进程就会为我们创建一个专用服务器。在UNIX上,这是通过 fork()和 exec()系统调用做到的(在UNIX中,要在初始化之后创建新进程,惟一的办法就是通过 fork())。这个新的专用服务器进程继承了监听器建立的连接,现在就与数据库物理地连接上了。在Windows上,监听器进程请求数据库进程为连接创建一个新线程。一旦创建了这个线程,客户就会“重定向”到该线程,相应地就能建立物理连接。图2-4显示了UNIX上的监听器进程和专用服务器连接。
图2-4 监听器进程和专用服务器连接
另一方面,如果我们发出共享服务器连接请求,监听器的表现则会有所不同。监听器进程知道实例中运行了哪些调度器。接收到连接请求后,监听器会从可用的调度器池中选择一个调度器进程。监听器会向客户返回连接信息,其中说明了客户如何与调度器进程连接;如果可能的话,还可以把连接“转发”给调度器进程(这依赖于不同的操作系统和数据库版本,不过实际效果是一样的)。监听器发回连接信息后,它的工作就结束了,因为监听器一直在特定主机的特定端口上运行(主机名和端口号大家都知道),而调度器会在服务器上随意指派的端口上接受连接。监听器要知道调度器指定的这些随机端口号,并为我们选择一个调度器。客户再与监听器断开连接,并与调度器直接连接。现在就与数据库有了一个物理连接。这个过程如图2-5 所示。  

图2-5  监听器进程和共享服务器连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值