前言
谢没人邀,人在中国,刚下公交。
一个小小的幽默开始这一篇,但确实是出差刚刚从高铁站到酒店哈哈。本篇会和大家分享下Oracle数据库网络相关的基本知识,也是我最近又忙里偷闲梳理了下这部分知识。本篇不会涉及RAC的内容,因为铁铁我爱说实话:RAC这部分的知识,我觉得我还不能游刃有余的讲述给大家;但后面一定会,因为铁铁我爱说实话。
首先是Oracle网络这部分知识的一个导图,大家可以先看下。导图的知识是层层递进的;先明确Oracle数据库在不同的模式下,网络结构和管理是不一样的;然后去探索专用服务器模式下Oracle的网络结构和管理。您要是问我为什么共享服务器模式下怎么没内容?因为共享服务器模式现在真的很少很少见了,起码在我见过的生产环境中,没有遇到过共享服务器模式。
Oracle的专用与共享
首先还是需要简单叙述下专用服务器模式与共享服务器模式。
专用服务器模式
也有称它为独占服务器模式的。简单描述来就是每个客户端都会拥有一个服务器进程。
共享服务器模式
一小部分服务器进程可以为大量客户端提供服务。
上面说的服务器进程就是Oracle中的 server process。
Oracle网络服务总览
下面是Oracle网络服务的一个草图。简单描述下此图:
(1)在12C之前,Oracle数据库中的PMON进程先将自己的实例信息注册到监听上;12C之后是使用LREG进程将实例信息注册到监听上。图中的实例注册区包括实例名、实例状态、实例服务器信息、客户端应答程序的可用性、服务端连接程序的可用性。
(2)客户端会通过TCP/IP协议访问到目标数据库服务器上的监听,找到目标数据库的实例信息,然后进行连接
(3)Oracle的网络服务都是基于Oracle网络配置文件进行管理的。网络配置文件有listener.ora、sqlnet.ora、tnsnames.ora。如果您是Linux服务器,这三个网络配置文件的位置是在 $ORACLE_HOME/network/admin路径下;如果是Windows服务器,就在您指定的安装路径下的network目录下的admin目录中。且admin目录下有个samples目录,这里面有三个网络配置文件的样例;如果原本的网络配置文件丢了坏了,或者您想自己写个网络配置文件,都可以参考这里面的样例。
Oracle客户端建立连接
上面已经简单介绍了Oracle网络服务的结构。那么现在就要引出客户端是怎么连接到Oracle服务的。我们现在已经知道了客户端要访问Oracle数据库,需要先连接到监听上,那为啥呢?
大家想象下我们去医院看病的这个场景(当然祝愿大家和家人身体健康不去医院)。我们平时不去医院,对医院的结构并不了解,想去某个门诊看病;那么我们肯定第一时间先去导医台,导医台的工作人员会告诉我们应该去哪个地方办什么事儿。那么转换一下,医院就是个Oracle服务器,我们是客户,导医台就是监听;客户端想访问Oracle服务服务器里面的某个区域,那么就需要先去监听那里获取Oracle的实例信息。
客户端建立连接相关知识主要有以下几点:
- 建立连接必要条件
- 连接方法
- session
>> 建立连接必要条件
客户端想要与Oracle建立连接,那么必须得获得下面4个信息:
(1)运行监听的服务器主机地址
(2)监听正在监视的端口
(3)监听正在使用的协议TCP/IP
(4)监听正在处理的服务或者实例的名称
>> 连接方法
(1)简单连接
简单连接不需要客户端配置,只支持TCP/IP协议。只需要将建立连接必要的4个条件按照如下语法格式写出即可。因为这种连接方式比较赤裸裸(连IP都直接暴露出来了),所以这种连接方式不支持高级连接选项。
sqlplus HR/[email protected]:1521/orcl
[oracle@oracle19c db_1]$ sqlplus HR/[email protected]:1521/orcl
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Mar 19 15:00:18 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Mar 19 2024 14:59:58 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
(2)本地命名连接
本地命名连接,是使用Oracle三大网络配置文件之一的tnsnames.ora文件进行本地命名配置。在连接事需要客户端解析文件,并且它支持Oracle的高级连接选项。这种连接方式的用法如下:
首先需要编辑Oracle的tnsnames.ora网络配置文件。
vim tnsnames.ora
大家可以看到我在tnsnames.ora文件中配置了ORCL和ORCL12,其中ORCL是本地数据库信息,ORCL12是另外一台服务器上的Oracle12C数据库信息。当然您当前的服务器可以访问通另外一台服务器的IP,不然这里配置了也没用。
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/19c/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c)(PORT = 1521))
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle19c)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL12 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.66)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
在连接Oracle时就可以使用本地命名方法进行连接,语法格式如下。这里如果使用ORCL12的本地命名(且用户密码正确),那么连接到的就是12C的数据库。
sqlplus HR/HR@ORCL
连接效果如下
[oracle@oracle19c admin]$ sqlplus HR/HR@ORCL
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 20 00:11:37 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Tue Mar 19 2024 15:00:18 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
(3)目录命名(Directory Naming)
目录命名要求LDAP服务已加载了Oracle Net名称解析信息:
— Oracle Internet Directory
— Microsoft Active Directory Services
它支持所有的Oracle Net协议,支持高级连接选项。但是,很少用这种方法。
(4)外部命名方法
外部命名方法使用受支持的非Oracle命名服务(这种方法其实也很少用)。包括下面两种:
— 网络信息服务(NIS)外部命名
— 分布式计算环境(DCE)单元目录服务(CDS)
>> session
前面讲了连接的必要条件和怎么建立连接;那么当连接建立后,就产生了session。但是!但是!这中间有个事儿得讲明白:当客户端访问到监听时,这时不算是真的连接上Oracle,只是在实例上找到了Oracle的实例信息。那么紧接着会发生如下操作:
> 监听会将客户端的访问请求发送到Oracle的PGA中的用户全局区(UGA)
> 用户全局区认为客户端访问请求符合要求后,会生成server process,并将此信息发送给监听
> 监听会将准许连接信息发送给客户端
> 客户端进程(user process)此时会去找到生成的server process建立连接
> 此时,生成session(会话)
值得注意的是,在会话建立后,此时如果监听崩溃或关闭,是不会影响到已经建立的会话的。
Oracle网络服务组件
其实上文的介绍中,已经基本都提到过了这些组件。还是打算搞个标题去梳理总结下这些组件,朋友们简单看下,有个印象。那么Oracle网络服务主要有以下组件
- Listeners
- Naming methods
- Naming (net service name)
- Profiles
- Listeners
监听,驻留在服务器上的进程。用来监听客户端的连接请求,并管理和分配到相应的数据库实例服务上。相关配置文件是listener.ora
监听分为动态监听、静态监听两种,Oracle默认是使用动态监听。
动态监听:后台进程会自动将实例注册到监听上。关键字是ready(lsnrctl status 可以在services summary下面看到)
如果使用动态监听的时候发现始终无法注册实例,可以使用下面的方法:
SQL> alter system set local_listener='' scope=both;
System altered.
SQL> alter system register;
System altered.
静态监听:手工编写或者使用netmgr程序设置监听。他会一直监听需要注册的实例。关键字unknown(lsnrctl status 可以在services summary下面看到)下面是静态监听的配置格式。
SID_LIST_LISTENER = (SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19c/db_1)
(SID_NAME = orcl)
) )
- Naming methods
客户端应用程序在尝试连接到数据库服务时用于将连接标识符解析为连接描述符的解析方法。这个其实也就是前文所提到过的连接方法。
- Naming (net service name)
服务的简单名称(连接标识符),解析为连接描述符以标识网络位置和服务标识。相关网络配置文件是tnsnames.ora。这个主要针对的是前文所提到的本地命名方法。
- Profiles
参数的集合,这些参数指定用于在客户端或服务器上启用和配置Oracle Net功能的首选项。相关配置文件是sqlnet.ora。说白了就是玩sqlnet.ora这个文件,例如可以通过修改此文件的参数,添加连接黑名单。
Oracle网络服务管理工具
朋友们可以发现上文我们的所有操作都是在直接和网络配置文件打交道,但其实是有一些管理工具提供给我们使用的;工具包含的配置功能有很多,但只要熟练掌握监听配置、本地命名配置两种就基本上够用了;其他的使用场景并不多。
Oracle所提供的管理工具主要有以下几种。
- Enterprise Manager Net Services Administration page
- Oracle Net Manager(netmgr)
- Oracle Net Configuration Assistant(netca)
- Listener Control Utility(lsnrctl)
- Enterprise Manager Net Services Administration page
这个工具是Oracle官方所提供。据说很叼很强大,Oracle网络相关的一切都可以在这里做,但我是真没用过,放在这里也就是给朋友们听个响,以后提起来有个印象。
- Oracle Net Manager(netmgr)
netmgr 还是比较好用的。它可以用来配置管理“Listeners、Naming methods、Naming (net service name)” 这三个网络配置,也是在前文提到三个组件。如下图所示。
对于netmgr应用最多的场景应该是配置本地命名(对应图中的service naming)。很少会用到另外两个网络配置,Naming methods是很少会去用到;listener(监听)推荐用netca工具去配置,更为简单。
而且配置本地命名在前文【Oracle客户端建立连接】这里已经描述过,只不过上面是通过修改tnsnames.ora网络文件实现的,这里是用netmgr工具实现。
- netca
netca是Oracle自带的一款非常简单好用的网络配置工具。功能与netmgr类似,且操作更加简单。尤其是配置监听,傻瓜操作一直下一步即可。每次建完库,都会用netca配置监听,十分的简单。
- lsnrctl
lsnrctl一个命令行工具,可以用来管理监听;使用方法简单易懂。它所提供的命令如下图标注,但常用的只有start(启动)、stop(停止)、status(查看状态)、reload(重载)这几个。而且在使用方法上,既可以像下图这样进入lsnrctl命令行;也可以按照 lsnrctl status 这种格式使用该命令行工具。
除了以上几种工具外,稍微提一下tnsping,一个用来测试Oracle监听是否可用的命令行工具。它无法验证Oracle服务是否可用,只能验证监听是否可用。
分享就到这里,感谢您的阅读。
昨晚凌晨才下班,太累了,今天早睡。
标签:网络管理,监听,Oracle,服务器,体系结构,连接,ora,客户端 From: https://blog.csdn.net/m0_58872140/article/details/136663417