图文深入理解Oracle Network配置管理(二)

  1. 本篇图文深入介绍Oracle Network配置管理。

Oracle网络配置的目的

为了方便对Oracle 数据库进行管理,一般以下情况应该对Oracle进行网络配置。
• 在客户端对服务器端数据库进行管理(网络客户端管理)
• 在一台服务器上管理多个数据库(本地管理)
在客户端上管理,只需要安装客户端管理软件即可。客户端为了连接特定的服务器和数据库,需要对网络进行配置,通过网络可以连接到不同的Oracle 数据库服务器。如图所示,首先需要在数据库服务器端配置侦听程序,然后需要在客户端配置网络服务名。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/782d6513585c4c8c959f2f0b62eb7857.png

配置服务端侦听器(LISTENER)

网络配置可以使用网络配置管理器 Net Manager 来完成。Net Manager 用于网络连接服务名、侦听器等的创建和设置。在同一台服务器上可以配置多个侦听器,但侦听的端口号不能相同。不同的侦听器可以侦听对同一个数据库的请求,同一个侦听器也可以侦听对不同数据库的请求。这样当一个侦听器忙时,另外的侦听器仍然可以为客户端请求提供服务,减少用户连接的等待时间。侦听器的配置信息存入对应的配置文件listener.ora(注:使用Net Manager工具配置侦听器相当于修改该文件),该文件的默认路径为 O R A C L E H O M E / n e t w o r k / a d m i n ,其中 ORACLE_HOME/network/admin,其 中 ORACLEHOME/network/admin,其中ORACLE_HOME代表服务器软件的安装目录。另外通过设置环境变量TNS_ADMIN可以改变侦听器配置文件的位置(.bash_profile文件中设置)。侦听器的设置主要包括侦听位置和对应的数据库服务,侦听位置包括主机、端口和使用的通讯协议,Oracle 默认的标准端口是1521,通常采用的协议是TCP/IP。
1.启动NetManager
[oracle@oracle ~]$ netmgr
2.弹出页面,可以增加和删除侦听器。
在这里插入图片描述
3. 点击“+”增加一个监听器,并且输入监听名称。
在这里插入图片描述
• 协议:用于指定监听程序要使用的网络协议,监听程序可以使用多种网络协议,但最常用的是“TCP/IP”协议。
• 主机:用于指定Oracle 服务器所在机器的主机名或IP 地址。因为侦听器和Oracle服务器位于同一台机器,主机名在这里也可以输入LOCALHOST。
• 端口号:用于指定监听程序所要使用的TCP/IP 端口号,默认监听端口号为1521。如果要指定其他端口号,则必须是操作系统未占用的端口。
例如:为了区别于LISTENER与LISTENER1,将LISTENER1 端口号改为1522。
注意:如果网络客户端想要通过LISTENER1 连接数据库,其用于连接数据库的网络服务名配置,也要使用同样的端口号。
在这里插入图片描述
• 全局数据库名:一般设置为DB_NAME.DB_DOMAIN(DB_NAME 和DB_DOMAIN为初始化参数),这里设为orcl。
• Oracle 主目录:应该设置为Oracle 软件的安装路径。
• SID:设置为数据库的 SID,这里设置为 orcl。

配置客户端网络服务名

通过客户端访问服务器端的数据库,就需要进行网络配置。客户端通过提供必要的参数,包括要连接的服务器名称、连接的端口号、使用的通讯协议等连接到服务器端。对于普通用户,这些参数不便于理解和记忆。通过网络配置,可以把网络服务名同配置联系起来,一旦配置完成,以后就可以使用该网络服务名进行数据库的连接,使连接过程得
到简化。当安装Oracle 数据库产品时,系统会自动在服务器端为数据库配置相应的网络服务名,默认网络服务名与实例标识(SID)相同。为了便于访问同一台服务器上的多个Oracle 数据库,应该为新数据库配置相应的网络服务名。网络服务名对应的配置文件名称为 tnsnames.ora,该文件的默认路径为$ORACLE_HOME/network/admin。同样,通过设置环境变量 TNS_ADMIN 可以改变该配置文件的位置。配置网络服务名也可以使用工具 Net Manager 来完成。
1. 填写客户端网络服务名
在这里插入图片描述
2. 选择协议
在这里插入图片描述
3. 填写主机名
在这里插入图片描述
4. 填写数据库的服务名(Service_names)
在这里插入图片描述
5. 点击“Finish”完成配置。

注册的意义

  1. 什么是注册:
    注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。)相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。
    2.关于注册的两个参数
  1. instance_name:
    注册到监听器中的实例值从参数文件中的 instance_name 参数取得。如果该参数没有设定值,那么它将取参数文件中的 db_name 的值。如果在 RAC 中配置,您必须将集群中每个实例的 instance_name 参数设置为一个唯一的值。
  2. service_names:
    注册到监听器中的服务值从参数文件中的参数 service_names 取得。如果该参数没有设定值,数据库将拼接参数文件中的 db_name 和 db_domain 的值来注册自己。
//修改参数 service_names
SQL> alter system set service_names='orcl,aaa';
System altered.
SQL> show parameter service_names;
NAME                    TYPE                 VALUE
---------------------------------- ------- ----------------
service_names        string                orcl,aaa
//查看监听状态
[oracle@oracle admin]$ lsnrctl stat
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle.example.com)
(PORT=1521)))
STATUS of the LISTENER
------------------------
Listener Parameter File
/u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File
/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle.example.com)(PORT
=1521)))
Services Summary...
Service "aaa" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl_XPT" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
//查看 listener.ora 内容
[oracle@oracle admin]$ more listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/n
etwork/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle.example.com)(PORT =
1521))
)
//没有写 list,动态注册
//查看 tnsnames.ora 内容
[oracle@oracle admin]$ more tnsnames.ora
ORCL_S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle.example.com)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
AAA_S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle.example.com)(PORT =
1521))
)
(CONNECT_DATA =
(SERVICE_NAME = aaa)
)
)
//验证能否通过 orcl_s 成功登录
[oracle@oracle admin]$ sqlplus sys/oracle@orcl_s as sysdba
//验证能否通过 aaa_s 成功登录
[oracle@oracle admin]$ sqlplus sys/oracle@aaa_s as sysdba
/验证 oracle 注册 service_names 的值
SQL> alter system set service_names='bbb';
System altered.
//aaa_s 无法正常连接
[oracle@oracle admin]$ sqlplus sys/oracle@aaa_s as sysdba
//orcl_s 仍然可以正常连接(oracle 会自动注册)
//测试 service_names 参数的值
SQL> show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- -----------
db_name string orcl
//当前 db_domain 的值为空
SQL> show parameter domain
NAME TYPE VALUE
------------------------------------ ----------- ------------
db_domain string
//当前 servcie_names 的值为非默认值
SQL> show parameter service_names
NAME TYPE VALUE
------------------------------------ ----------- -----------
db_name string bbb
//定义 db_domain 的值
SQL> alter system set db_domain='oracle.com' scope=spfile;
System altered.
//重置 service_names 的值
SQL> alter system reset service_names scope=spfile sid='*';
System altered.
//重启数据库
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter domain
NAME TYPE VALUE
------------------------------------ ----------- ---------------
db_domain string oracle.com
SQL> show parameter service
//验证 service_names 的值为 db_name+db_domain
NAME TYPE VALUE
------------------------------------ ----------- --------------------
service_names string orcl.oracle.com
  1. 动态注册
    动态注册是在 instance 启动的时候 PMON 进程根据参数文件中的 instance_name,service_names 两个参数将实例和服务动态注册到 listener 中。首先要在参数文件中指定 instance_name,service_names 两个参数的值。在 sqlplus 下通过 show parameter service_names 和 show parameter instance_name 可以查看这两个参数的值。可选择的是,您可以在 service_names 参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。动态注册默认只注册到默认的监听器上(名称是 LISTENER、端口是1521、协议是TCP),因为 pmon 只会动态注册 port 等于1521的监听,否则 pmon 不能动态注册 listener,如果需要向非默认监听注册,则需要配置 local_listener 参数!
  1. Pmon 进程注册(默认端口):
//为方便实验,将 db_domain 参数改回来
SQL> alter system set db_domain='' scope=spfile;
System altered.
//重启数据库使参数生效
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 92276304 bytes
Database Buffers 188743680 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
//验证参数
SQL> show parameter service_names
NAME TYPE VALUE
------------------------------------ ----------- --------------
service_names string orcl
//查看 listener.ora
[oracle@oracle admin]$ more listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/12.2.0/db_1/n
etwork/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle.example.com)(PORT =
1521))
)
//查看监听器状态
[oracle@oracle admin]$ lsnrctl stat
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle.example.com)(PORT=15
21)))
//查看 tnsnames.ora
[oracle@oracle admin]$ more tnsnames.ora
ORCL_S =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle.example.com)(PORT
= 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
//尝试连接
[oracle@oracle admin]$ sqlplus sys/oracle@orcl_s as sysdba
  1. 修改参数注册(非默认端口):
    演示过程省去。
  1. 静态注册
    静态注册就是实例启动时读取 listener.ora 文件中实例和服务的配置,将实例和服务注
    册到监听程序。
//示例:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = emrep)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = emrep)
)
)

List 列表中的即是需要静态注册的服务。

如何查询某服务是静态还是动态注册

可以使用命令 lsnrctl status 来查看某服务是静态注册还是动态注册。
• 实例状态为 UNKNOWN 值时表明此服务是静态注册的。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,才检查该实例是否存在。
• 实例状态为 READY 或 BLOCKED(数据库 nomount 时)表明是此服务是动态注册的。

完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB基本知识和排障案例及经验、性能调优等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1549698.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

fmql之Linux内核定时器

内容依然来自于正点原子。 Linux内核时间管理 内容包括: 系统频率设置节拍率:高节拍率的优缺点全局变量jiffies绕回的概念(溢出)API函数(处理绕回) HZ为每秒的节拍数 Linux内核定时器 内容包括&#xf…

基于python的爱心代码游戏实现 面试最常见问题(源码+内容介绍)

开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费!全文6000干货。 工作招聘无领导小组面试全攻略最常见面试题(第一部分)共有17章可用于国企私企合资企业工作招聘面试面试必备心得面试总结资源-CSDN文库https…

【重学 MySQL】四十一、子查询举例与分类

【重学 MySQL】四十一、子查询举例与分类 引入子查询在SELECT子句中引入子查询在FROM子句中引入子查询在WHERE子句中引入子查询注意事项 子查询分类标量子查询列子查询行子查询表子查询 子查询注意事项子查询的位置子查询的返回类型别名的使用性能考虑相关性错误处理逻辑清晰 总…

一文带你读懂分库分表,分片,Sharding的许多概念

一文带你读懂分库分表,分片,Sharding的许多概念 分库是将一个库拆分为多个库,分表就是将一个表拆分为多个表。分库分表有垂直拆分和水平拆分。垂直拆分一般是按照业务将表分到不同的库中(此种不在本发的讨论范围)。水平拆分是将表的数据拆分…

Java---异常及处理

一.异常 1.概念 程序的非正常执行。高级语言都有异常处理机制(C,Java) 2.一般处理异常的方法 Scanner sc new Scanner(System.in);System.out.println("请输入一个数字:");String s sc.nextLine();if (s.matches("[0-9]&qu…

ViTamin——视觉-语言时代的可扩展视觉模型设计

人工智能咨询培训老师叶梓 转载标明出处 尽管视觉-语言模型(VLMs)已经取得了显著的成就,但在图像编码器的选择上,传统的视觉Transformer(ViT)依然是主流。尽管Transformer在文本编码领域已经证明了其有效性…

【C++笔记】初始模版和STL简介

【C笔记】初始模版和STL简介 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】初始模版和STL简介前言一.初始模版1.1泛型编程1.2函数模版1.3类模板 二.STL简介2.1什么是STL2.2STL的版本2.3STL的六大组件2.4STL的重要…

TypeScript概念讲解

简单来说,TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准; TypeScript 由微软开发的自由和开源的编程语言; TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 Jav…

这款免费工具让你的电脑焕然一新,专业人士都在用

HiBit Uninstaller 采用单一可执行文件的形式,无需复杂的安装过程,用户可以即刻开始使用。这种便捷性使其成为临时使用或紧急情况下的理想选择。尽管体积小巧,但其功能却异常强大,几乎不会对系统性能造成任何负面影响。 这款工具的一大亮点是其多样化的功能。它不仅能够常规卸…

QT:常用类与组件

1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget&#xff0c;该类封装了图形化界面的相关操作&#xff…

第十三周:机器学习

目录 摘要 Abstract 一、生成式对抗网络&#xff08;上&#xff09; 1、引入——generator 2、discriminator 3、GAN算法 4、GAN的理论 5、GAN的训练技巧 二、word2vec——gensim实践 1、引入 2、 word2vec模型 3、fasttext模型 总结 摘要 本周学习了对GAN进行了…

栏目一:使用echarts绘制简单图形

栏目一&#xff1a;使用echarts绘制简单图形 前言1. 在线编辑图形1.1 折线图1.2 柱状图1.3 扇形图 2. 本地绘制图表2.1 下载echarts.min.js2.2 创建一个简单的图形 前言 Echarts是一款基于JavaScript的可视化图表库。它提供了丰富的图表类型和交互功能&#xff0c;可以用于在网…

qt6 使用QPSQL

qt6 自带pg数据库驱动&#xff1a; pro文件加个说明&#xff1a; 引用位置添加&#xff08;按需添加&#xff0c;这里我就大致加一下&#xff09;&#xff1a; test code: 理想情况当然是要用pool,这里只是演示调用而已 QSqlError DbTool::testConnection(const QString &…

JSON的C实现(上)

JSON的C实现&#xff08;上&#xff09; JSON的C实现&#xff08;上&#xff09;前言JSON简介JSON的C实现思路小结 JSON的C实现&#xff08;上&#xff09; 前言 JSON是众多项目中较为常见的数据交换格式&#xff0c;为不同项目、系统间的信息交换提供了一个规范化标准。JSON…

测试用例的进阶二

1. 按开发阶段划分 1.1 测试金字塔 从上到下&#xff0c;对于测试人员代码就是要求越来越低&#xff1b; 从下到上&#xff0c;越来越靠近用户&#xff1b; 从下到上&#xff0c;定位问题的成本越来越高&#xff1b; 1.2 单元测试(Unit Testing) 单元测试是对软件组成单元进…

《迁移学习》—— 将 ResNet18 模型迁移到食物分类项目中

文章目录 一、迁移学习的简单介绍1.迁移学习是什么&#xff1f;2.迁移学习的步骤 二、数据集介绍三、代码实现1. 步骤2.所用到方法介绍的文章链接3. 完整代码 一、迁移学习的简单介绍 1.迁移学习是什么&#xff1f; 迁移学习是指利用已经训练好的模型&#xff0c;在新的任务上…

Linux防火墙-常用命令,零基础入门到精通,收藏这一篇就够了

我们经过上小章节讲了Linux的部分进阶命令&#xff0c;我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#xff0c;而云服务器基本上就不会使用系统自带的防火墙&#xff0c;而是使用安全组来代替了防火墙的功能&#xff0c;可以简单理解安全组就是web版的防火墙&…

Windows环境下训练开源图像超分项目 ECBSR 教程

ECBSR 介绍 ECBSR&#xff08;Edge-oriented Convolution Block for Real-time Super Resolution&#xff09;是一种针对移动设备设计的轻量级超分辨率网络。它的核心是一种可重参数化的构建模块&#xff0c;称为边缘导向卷积块&#xff08;ECB&#xff09;&#xff0c;这种模…

Qt 首次配置 Qt Creator 14.01 for Python

前言&#xff1a; 如何用QT实现Python的配置的交互界面。本文从0开始&#xff0c;进行实践的介绍。 在上一节里面&#xff0c;我们做了社区版本的配置&#xff1a; https://blog.csdn.net/yellow_hill/article/details/142597007?spm1001.2014.3001.5501 这一节&#xff0…

vue+UEditor附件上传问题

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…