oracle NET学习(1):NET-8和监听器行为分析

本文详细阐述了Oracle网络体系结构的核心概念,包括监听器、客户端和服务端的交互流程,以及静态配置与动态注册的区别。重点介绍了如何配置监听器以实现高效、稳定的数据库连接。

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

环境:

14:56:24 sys@ORCL (^ω^) select * from v$version where rownum=1;

BANNER
--------------------------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod


oracle NET 涉及面面方方,包括服务端、客服端、防火墙等,且以OS NET为基础搭建。oracle NET能够建立客服端或应用服务器到数据库服务器的连接,并负责连接的维护和数据的传送。客户端和服务端必须使用相同的协议,其中最流行的当属TCP/IP。

1 oracle 网络体系结构

oracle的网络架构基于OSI七层模型

客户端的OCI和服务端的OPI组成了会话层,负责在客户端和服务端之间建立一个完整的sql会话,功能包括:

㈠ 解析sql,进行语法分析
㈡ 为sql申请和分配cursor
㈢ 为sql提供绑定变量
㈣ 从服务器的数据字典获取记录的元数据
㈤ 执行sql
㈥ 返回结果
㈦ 关闭cursor

TTC层对应OSI的表示层,负责客户端和服务器之间字符集和数据类型的转换。

NET8,之所以称之为8,大抵是因为独立于OSI任何一层,配置oracle网络连通能力,实际上就是配置NET8这一层,而NET8这一层包括两个部分,服务器端的监听器、客户端的TNS.

2 监听器

在服务端,oracle NET包括一个活动的进程叫监听器。监听器活着的意义,就只是传递用户的请求。监听器必须存在于服务端。是客户端和服务端的中间组件。监听器的功能只是负责建立客户端和服务端的连接,它并不承担客户端和服务端的通信。监听器启动后,会去读取监听器配置文件--listener.ora。位于$ORACLE_HOME/network/admin下。通过命令lsnrctl可进入监听器的属性配置。OS命令tnsping只能判断客户端到监听器的连接是否通畅,与服务端是否正常运行无任何瓜葛。客户进程通过读取tnsnames.ora请求和服务器建立连接,如果是一条专用服务器连接,监听器进程就会为客户端创建一个server process(通过fork()创建)。

这其中涉及三种进程:服务进程、监听进程、客户进程。工作原理如下:

① 服务器端启动监听进程,这个进程会在一个固定的IP和端口上监听用户请求
② 用户进程向指定的IP和端口发出连接请求,送达给监听进程
③ 监听进程收到用户请求后,会fork()一个服务进程
④ 监听进程把用户请求转发给服务进程,此时,监听进程的使命就此结束,不在参与后续的任何工作,回去继续监听其他用户的请求
⑤ 服务进程和用户进程建立连接后,开始处理和返回用户的请求,直到用户进程结束连接。

类比一下,oracle NET如同非诚勿扰,监听进程犹如乐嘉和孟非,服务进程和客户进程如同男方、女方,双方牵手之后的事情就不在是乐嘉和孟非的事情了

[oracle@localhost ~]$ lsnrctl 

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 11-SEP-2012 09:57:03

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:

start               stop                status              
services            version             reload              
save_config         trace               spawn               
change_password     quit                exit                
set*                show*               


reload:重新加载listener.ora,不需要重启监听器就使配置生效
监听器的实例状态信息:
READY:表示实例可以接受连接
BLOCKED:表示实例不能接受连接
READY/SECONDARY:表示RAC的第二个实例准备接受连接
UNKNOWN:表示监听器是静态注册的

3 静态配置和动态注册

服务端的监听器和数据库是两组独立的组件。监听进程并不绑定到某个特定的数据库。若望传递用户请求,首先必须知道如何才能找到目标数据库,这种信息的获得可以通过两种方式:静态配置和动态注册


静态配置:明确告诉监听器某个数据库的信息,监听器在启动过程中就会去加载这部分信息。这部分信息同样记录在listener.ora,其中SID_LIST_<listener_name>部分就是静态配置内容。
动态注册:只要数据库处于运行状态,PMON就会自动、定期的向监听进程注册、更新信息。DBA也可以通过:alter system register。强制PMON向监听进程注册。如果没有定义service_name,PMON会使用global db_name注册到监听进程.如果监听器具有缺省的名称、端口及协议,则无需任何特殊配置,oracle就能执行动态配置;如果监听器具有非标配置,则需要设置local_listener参数。可以通过alter system set service_names来设置一个或者多个服务名。

区别:

1)静态配置的状态是UNKNOWN,动态注册的状态是READY
2)动态注册不需要对监听器做任何配置,静态配置需要针对每个数据库做额外配置
3)动态注册,由于监听器确切地知道实例的状态,能够做到连接时故障转移,运行时去连接负载均衡。而静态配置,实例对监听器是透明的。

4 客户端的配置

客户端若想连接到数据库,需要得到两方面信息:

① 数据库所在服务器的IP和端口
② 数据库的service_name

这两部分称之“连接描述符”。

为了加强用户体验,oracle提出“连接标识符”,也叫网络服务名。在服务端配置。

无论使用哪种方式连接数据库,最终使用的都是连接描述符。但若使用连接标识符,客户端需要有一个地方来保存连接标识符和连接描述符之间的关系

oracle提供了4种方式:

① local naming:利用tnsnames.ora完成翻译过程
② easy connect naming:客户端不需要任何配置,只有ora 10g才支持
③ external naming
④ directory naming

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值