客户端如何连接服务器(4)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 专用服务器进程和共享服务器进程的任务是一样 的:要处理提交的所有SQL,当向数据库提交一 个 • Select * from emp查询时,会有专用的或共享的 服务器进程解析这个查询,并把它放入共享池中, 这个进程要提出查询计划,如果有必要,还要执 行这个查询计划,可能在缓冲区中找到必要的数 据,或者将数据从磁盘读入缓冲区缓存中。 • 这些服务器进程是干重活的,执行排序、汇总、 联结等工作。
• 服务器端的监听要设置@后面的链接符对 应的服务,然后重新启动
本地命名(tnsnames或local naming )
• 通过各自客户端的配置信息进行解析
配置tnsnames.ora文件
• TNS(transparent network substrate)—透明 网络底层 • 我们就理解TNS为客户端处理与远程连接 的基础软件,有了它,客户端才有可能与 服务器建立对等通信。 • TNS连接串告诉客户端软件如何与远程服 务器连接
监听器
注册
• 注册就是将数据库作为一个服务注册到监 听器。 • 在数据库服务器启动过程中,数据库服务 器会向监听程序注册响应的服务(无论何 时启动一个数据库,默认都有两条信息注 册到监听器中:数据库服务器对应的实例 和服务)
静态注册
• 静态注册就是监听进程启动时读取 listener.ora文件的配置,将实例和服务注册 到监听程序 • 静态注册时,listener.ora中的 GLOBAL_DBNAME向外提供服务名, listener.ora中的SID_NAME提供注册的实 例名。
• 在网络环境中,我们会在服务器上运行一 个称为TNS监听器的进程。就是这个监听 器进程让我们的客户端与数据库物理连接。
当监听器收到连接请求时,它会使用自己的配置文件检查这个请求, 可能会拒绝请求(可能没有对应的数据库,或者IP地址受限, 不允许连接该主机),也可能接受请求,并真正建立连接。

Oracle 客户端如何连接服务器
• 服务器进程就是代表客户会话完成工作的 进程,客户端的应用向数据库发送的SQL 语句最后就要由这些服务器进程接收并执 行。
• Oracle 服务器处理客户的请求有两种方式 • 专用服务器连接(dedicated server) • 共享服务器连接(shared server)或(multi – threaded server MTS)
主机 命名(hostname)
• 主机命名:在一ቤተ መጻሕፍቲ ባይዱ连接中,一个主机名被 当做标识一个数据库的全局数据库名
NAMES.DIRECTORY_PATH= (HOSTNAME, TNSNAMES)
Sqlnet.ora文件中保存了网络服务名的解析路径 C:\windows\system32\driver\ect\host
• • • • •
了解专用服务器连接和共享服务器连接后, 是否有以下疑问: 怎样才能连接呢? 谁来启动这服务器呢? 怎么与调度联系?
• 连接的过程与平台有关系,我们这里介绍 一般的过程。 • TCP/IP的连接原理
TCP/IP连接的基本原理
客户在一台机器上,而服务器驻留在另一台 机器上,这两台机器通过一个TCP/IP网络 连接。 客户率先行动,使用oracle客户软件建立请求, 力图连接数据库。
oracle internet directory
• 管理许多oracle服务器的复杂网络时有优势, 管理员可以在一个比较集中的位置上配置 和管理。
External naming
• 使用非oracle工具管理和解析oracle服务名 称。
总结三个文件
客户端的两个文件 Sqlnet.ora Tnsnames.ora
EZCONNECT
• • • • 该方法只有在oracle 10g以上的版本使用 要想使用该解析方法 在sqlnet.ora中必须设置 NAMES.DIRECTORY_PATH=(EZCONNE CT,TNSNAMES)
connect scott/tiger@hostname:port/servicesname connect scott/tiger@//hostname/servicesname
• 动态注册默认只注册到默认的监听器上 (名称为listener,端口1521,协议tcp)
非默认的动态注册
• Pmon 默认只会注册到port=1521 的listener 如果想让pmon动态注册到以外的监听,需 要设置参数 • local_listener=listener1 • Alter system set local_listener=listener1 • 但这样不能成功,设置local_listener时需要 将下面的内容增加到服务器端的 tnsnames.ora中,因为 pmon在动态注册时 要从tnsnames.ora中读取相关信息
• 2、listener.ora • 监听进程的配置文件,在服务器端接受远 程连接的申请,如果不使用远程连接, listener进程不是必须的, • 关闭llistener进程并不影响已经存在的数据 库连接
• 服务器监听的关闭
配置监听器
• Oracle net manager • Oracle net configuration assistant • 手工配置listener.ora
对开发者而言,两种连接方式没有区别
客户连接向调度器发送一个请求,调度器首先将这个 请求放在SGA中的请求队列中(1),第一个可用的共享 服务器从请求队列中取出这个请求(2)并处理。共 享服务器的处理结束后,再把响应(返代码、数据等) 放到响应队列(3),接下来调度器拿到这个响应(4), 传给用户。
动态注册
• 动态注册时instance启动的时候pmon进程 根据参数文件中的instance_name, service_names两个参数将实例和服务动态 的注册到listener中。
• 注册到监听器中的实例值从参数文件中的 instance_name参数获得,如果该参数没有 设定值,那么它将取参数文件的db_name 值。 • 注册到监听器中的服务值从参数文件中的 service_names取得。如果该参数没有设定 值,数据库将拼接参数文件中的db_name 和db_domain的值来注册自己。
监听器一直在特定主机的特定端口上运行,而调度 器会在服务器上随意指派的端口上接受连接,监听器知 道调度器指定的随机端口号,并为客户选择一个调度器, 客户再与监听器断开连接,并与调度器直接连接,然后 客户端就与数据库有了一个物理的连接。
• 现在我们大致了解了客户端是如何连接服 务器了。 • 现在来看一些具体的设置
服务器端的文件 Listener.ora
• Connect sys/zhao@orcl as sysdba • 1、oracle net首先通过sqlnet.ora来决定怎样找连 接中出现的网络服务名orcl • 假如sqlnet.ora是下面的设置 • Names.directory_path=(tnsnames,hostname) • 客户端就首先在tnsnames.ora中找orcl的记录, 如果没有,则尝试把orcl当做一个主机名,通过网 络途径将该主机名解析为对应的IP,然后连接。
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = E:\oracle\product\10.2.0\db_2) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = E:\oracle\product\10.2.0\db_2) (SID_NAME = ORCL) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = AAAA)(PORT = 1521)) ) )
• 如果建立一条专用服务器连接,监听器进 程就会为我们创建一个专用服务器进程。 新的专用服务器进程继承了监听器建立的 连接,现在就与数据库物理地连接上了。
• 当我们发出共享服务器连接请求时,监听器的表 现有所不同,监听器进程知道实例中运行了哪些 调度器。接收到连接请求后,监听器可以从调度 器池中选择一个调度器进程,监听器会向客户返 回连接信息,其中说明了客户如何与调度器进程 进行连接,如果可能的化,还可以把连接“转发” 给调度器进程。 • 监听器发回连接信息后,它的工作就结束了。
几个名称
1、数据库名 一个数据库的标识 2、实例名 数据库实例名是用于和操作系统进行联系的标识,即数据 库和操纵系统之间的交互用的就是数据库实例名。 3、数据库实例和oracle_sid 两者都代表数据库实例,但有区别 instance_name是数据库的参数 oracle_sid是操作系统的环境变量,从操作系统的角度访问 实例名,必须通过oarcle_sid 4、全局数据库名 数据库名+域名
在专用服务器连接方式下,每一个应用,oracle总会创建一个新的服务器进程, 该服务器进程在应用的生存期中专门为应用服务,对于每个应用,都会出现一 个新的专用服务器进程,应用和专用服务器进程之间是一对一的关系。 该服务器进程不是实例的一部分, 当客户进程通过某种网络通道与这个专用服务器直接通信,并由这个服务器进 程接收和执行SQL,,如果有必要,它会读取数据文件,并在缓冲区中查找客户 要的数据,该服务器进程的主要目标是对用户提交的SQL调用做出响应。
• 共享服务器连接(shared server) • 正式的说法是多线程服务器 (multi_threaded server-MTS)在共享服务 器连接下,与数据库连接的客户进程不会 与共享服务器直接通信,之所以不能与共 享服务器直接对话,是因为这个服务器进 程是共享的。
• 如果采用这种方式,就不会对每条用户的 连接创建另外的线程。 • 在共享服务器中,oracle使用一个“共享进 程”池为大量的用户提供服务。
• 为了共享服务器进程,还需要另外一种机 制,通过该机制与服务器进程对话,为此, oracle使用一组称为调度器的进程。 • 客户进程通过网络与一个调度器进程通信, 这个调度器进程将客户的请求放入SGA中 的请求队列,第一个空闲共享服务器进程 得到这个请求,并进行处理,调度器一直 在监听这个队列,发现结果后,就会把结 果传给客户。
当运行该命令时,客户端的客户软件会读取位于机 器上的一个软件Tnsnames.ora文件,这是一个纯文 本的配置文件。
通过该配置,客户软件可以把我们使用的TNS连接串 ORCL映射到某些有用的信息,也就是主机名、该主机 上监听器进程接受连接的端口,该主机上所连接数据库 的服务名
• 客户端软件知道要连接到哪里,它会与主 机名为AAAA的服务器在端口1521打开一条 TCP/IP连接,如果服务器端DBA安装并配 置了oracle net,并且有一个监听器在端口 1521上监听连接请求,就会收到这个连接。
客户如何与数据库连接
• Oracle net是一个网络软件,它需要同时安 装在客户机和服务器上,通过它在客户端 应用程序与oracle数据库服务器之间或服务 器与服务器之间建立通信
--
• 分析: • Sqlplus 为客户端软件 • Sys/zhao 用户名/密码
• @orcl @引出需要来连接的连接串
@后的orcl为连接字符串,如何解析该连接字符串? 我们要用到sqlnet.ora这个文件,该文件决定怎样找一个连接中出 现的连接字符串。
Sqlnet.ora文件中NAMES.DIRECTORY_PATH中设置的解 析方法
1、主机命名(hostname) 2、本地命名(tnsnames) 3、oracle easy connect(EZCONNECT) 4、oracle internet directory 5、external naming
相关文档
最新文档