oracle网络架构

server/2024/12/16 7:22:20/

Oracle 网络配置文件

Oracle 的网络配置主要涉及三个关键的文件:listener.oratnsnames.orasqlnet.ora。这些文件通常位于 $ORACLE_HOME/network/admin/ 目录下,$ORACLE_HOME 是 Oracle 安装目录的环境变量,通常为 /u01/app/oracle/product/xx.x.x/dbhome_1

1. listener.ora 文件

listener.ora 文件用于配置数据库监听器(Listener)。监听器是 Oracle 网络架构中的一个重要组件,负责客户端与数据库实例之间的连接请求。监听器可以是静态或动态的。

静态监听配置

静态监听配置依赖于 listener.ora 文件的手动设置。即使数据库实例未启动,监听器也会启动并等待客户端请求。

示例配置:

LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))))
​
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = orcl)                -- 数据库实例名(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)  -- Oracle 安装路径(PROGRAM = extproc)              -- 可选,外部过程处理))

配置说明:

  • SID_NAME:数据库实例的 SID 名称。

  • ORACLE_HOME:Oracle 软件的安装路径。

  • PROGRAM:指定运行的程序,如 extproc(外部过程处理)。

  • ADDRESS:监听器的网络地址,包括协议、主机地址和端口号。

动态监听配置

动态监听依赖于数据库实例自动向监听器注册自身信息。Oracle 12c 及以后版本使用 LREG(Listener Registration Process)进程实现动态注册,注册时数据库实例会根据 init.ora 文件中的 instance_nameservice_names 自动注册。

工作流程:

1.实例启动时

LREG 读取 init.ora文件中的INSTANCE_NAMESERVICE_NAMES 等参数,并通过 LOCAL_LISTENER 或默认地址(localhost:1521)与监听器通信。

2.动态注册

LREG 将实例和服务信息发送给监听器,包括:

- 实例名称(INSTANCE_NAME)。 - 服务名称(SERVICE_NAMES)。 - 数据库负载和状态(如 READYNOT READY)。

3.状态更新

在实例运行期间,LREG 监控服务状态的变化(如实例变为不可用时),并及时通知监听器更新服务信息。

4.重新注册

当监听器重启时,LREG 会自动重新注册实例和服务信息。

无论是静态监听还是动态监听,最终的结果都是创建了监听器,最终都会有一个监听器在运行,负责接收和处理客户端或服务端的连接请求。两者的区别主要在于创建和管理监听器的时机及方式。

2. tnsnames.ora 文件

tnsnames.ora 文件用于为 Oracle 客户端提供数据库连接的简化信息。它允许客户端通过简单的 TNS 名称(如 ORCL)来访问数据库,而无需每次输入复杂的连接信息(如主机名、端口号等)。

示例配置:

ORCL =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))  -- 数据库连接信息)(CONNECT_DATA =(SERVICE_NAME = orcl)  -- 数据库服务名))

配置说明:

  • ORCL:TNS 名称,客户端通过此名称连接数据库。

  • ADDRESS:连接的协议、主机地址和端口。

  • SERVICE_NAME:数据库的服务名。

使用时,客户端可以通过以下命令连接:

sqlplus user/password@ORCL

而无需每次都指定完整的连接字符串。

如果不配置tnsname.ora文件,连接需要

sqlplus user/password@//hostname:port/service_name

3. sqlnet.ora 文件

sqlnet.ora 文件用于定义客户端与数据库之间的连接参数,控制数据库的网络行为,如身份验证协议、连接超时等。

示例配置:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 12
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
TCP.INVITED_NODES = (192.168.1.0/24, 10.0.0.0/8)
TCP.EXCLUDED_NODES = (192.168.2.0/24)
SQLNET.EXPIRE_TIME = 10

配置说明:

  • SQLNET.ALLOWED_LOGON_VERSION_CLIENT:客户端允许的最低身份验证协议版本。

  • SQLNET.ALLOWED_LOGON_VERSION_SERVER:服务器允许的最低身份验证协议版本。

  • TCP.INVITED_NODES:允许连接数据库的 IP 地址范围。

  • TCP.EXCLUDED_NODES:拒绝连接数据库的 IP 地址范围。

  • SQLNET.EXPIRE_TIME:设置客户端与服务器之间连接的超时检查时间(以分钟为单位)。

4. 连接方式:共享连接与专有连接

在 Oracle 数据库中,客户端连接的方式有两种:专有连接共享连接

专有连接(Dedicated Server)

每个客户端请求都会由一个独立的服务器进程(Dedicated Server Process)处理。每当客户端请求连接时,Oracle 会为该客户端分配一个专门的服务器进程。

共享连接(Shared Server)

多个客户端共享同一个服务器进程。Oracle 使用一个“共享进程池”来处理多个用户的请求,这种机制类似于连接池。

5.Oracle 数据库的连接建立过程

或者说 监听器与客户端的连接过程

1.客户端请求连接

- 客户端(比如 SQL*Plus 或应用程序)通过网络向 Oracle 数据库发起连接请求,通常包括要连接的服务名、主机名、端口等信息。 - 这个请求首先会发送到 Listener

2.Listener (监听)接收请求:

- Listener 会查看请求中的服务名或其他参数,找到对应的 Oracle 数据库实例。

3.Listener 分配 Service Handler

- Listener 根据请求信息找到对应的数据库实例(如 ORCL),并为客户端创建一个 service handler。 - 这个 handler 通常是一个独立的后台进程(例如 Oracle 的 服务器进程),负责处理客户端的请求。

4.客户端与 Handler 直接连接

- 一旦 Listener 为客户端分配了一个可用的 handler,客户端就会直接与这个 handler 进行连接。此时,Listener 不再参与后续的通信。 - 客户端与 handler 之间的通信是通过网络协议进行的,处理查询、事务等操作。

5.Listener 可以停止而不影响连接

- 因为 Listener 仅负责处理连接请求,一旦连接建立,客户端与 handler 之间的交互就独立于 Listener。即使 Listener 停止,已经建立的连接仍然能够继续运行。 - 这种机制确保了即使在 Listener 停止或重启的情况下,已经与数据库建立的连接仍然保持有效。

过程总结图

  1. 客户端请求 → 2. Listener 接收请求 → 3. Listener 分配 Service Handler → 4. 客户端与 Handler 连接 → 5. Listener 停止对后续连接不影响


http://www.ppmy.cn/server/150559.html

相关文章

MIF格式详解,javascript加载导出 MIF文件示例

MIF 格式详解 MIF(MapInfo Interchange Format)是由Pitney Bowes Software开发的一种文本格式,用于存储地理空间数据。它通常与地图可视化和地理信息系统(GIS)相关联。MIF文件通常成对出现,一个.mif文件用…

基于SpringBoot的疫苗在线预约功能实现十

一、前言介绍: 1.1 项目摘要 随着全球公共卫生事件的频发,如新冠疫情的爆发,疫苗成为了预防和控制传染病的重要手段。传统的疫苗预约方式,如人工挂号或电话预约,存在效率低、易出错、手续繁琐等问题,无法…

自动驾驶域控制器简介

汽车智能驾驶功能持续高速渗透,带来智能驾驶域控制器市场空间快速增 长。智驾域控制器是智能驾驶决策环节的重要零部件,主要功能为处理感知 信息、进行规划决策等。其核心部件主要为计算芯片,英伟达、地平线等芯 片厂商市场地位突出。随着消费…

saltstack 和 ansible 最新比对

Ansible 和 SaltStack、Puppet 等都是配置管理系统(configuration management system) Ansible 和 SaltStack 都是 Python 编译的自动化运维工具,都是使用模块管理。不同的是Ansible没有客户端(使用的 SSH 通道传输)而…

报错:Method Not Allowed

当报错这个的时候就要注意了,自己的方法是否写对了!!! 就像我的这个因为我的后端是put,所以这也是put,我报错就是因为这写了get,虽然页面是改变了,但是一刷新,就会原形毕…

asp.net老项目运维,出现的问题6之数据库

数据库会有很多张表,表内一般会有自增列,如果想统一管理这个自增数值,可以使用如下方法,放在一个存储过程中,想用的时候调用存储过程即可生成数据库层面的全局唯一值: create procedure [dbo].[P_getSeqID…

ZUC256 Go Go Go!!!

文章目录 背景运行效果代码 背景 因业务需要使用ZUC算法,GitHub上又没有对ZUC256相对应的Go语言的实现。 吃水不忘挖井人,在这里感谢GmSSL及BouncyCastle两个强大的密码学库! 本ZUC256的编写,参考了这两个库及中科院软件院发布的…

javaScript交互补充

1、元素的三大系列 1.1、offset系列 1.1.1、offset初相识 使用offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等 ●获得元素距离带有定位祖先元素的位置 ●获得元素自身的大小(宽度高度) ●注意:返回的…