当前位置: 首页 > article >正文

Oracle 的网络配置文件详解

Oracle 的网络配置文件详解

目录

  • Oracle 的网络配置文件详解
    • 一、Oracle 的网络配置文件概述
        • 1、`listener.ora` 的内容
        • 2、`sqlnet.ora`的内容
        • 3、`tnsnames.ora` 的内容
    • 二、配置 listener.ora 文件
        • 1、注册
        • 2、动态注册
        • (1)动态注册默认端口
        • (2)动态注册非默认端口
        • 3、静态注册
    • 三、配置 tnsnames.ora 文件
        • 1、tnsnames.ora 文件的内容
        • 2、tnsnames 连接过程
    • 四、配置 sqlnet.ora 文件

一、Oracle 的网络配置文件概述

为了使外部进程能够访问 Oracle 数据库,必须配置 Oracle 网络环境。Oracle 网络环境是通过配置listener.orasqlnet.oratnsnames.ora 三个文件来实现的。

由于 Oracle 数据库是一个客户端服务器的软件,首先需要接收来自客户端的连接请求,服务器就必须配置监听器;其次,客户端要连接到某个制定的服务器,就必须配置到服务器的 tns 服务名。

其中 listener.ora 和服务器端相关,而 tnsnames.orasqlnet.ora 和客户端相关。只有远程连接数据库才需要用到这三个文件,其中,listener.ora 一般配置在服务端,sqlnet.oratnsnames.ora 一般配置在客户端。

以上三个文件保存在 $ORACLE_HOME/network/admin目录下。

[oracle@ora admin]$ cd $ORACLE_HOME/network/admin
[oracle@ora admin]$ ll
总用量 16
-rw-r--r-- 1 oracle oinstall 676 1231 18:47 listener.ora
drwxr-xr-x 2 oracle oinstall  64 1230 21:15 samples
-rw-r--r-- 1 oracle oinstall 381 1217 2012 shrept.lst
-rw-r--r-- 1 oracle oinstall 223 1230 21:28 sqlnet.ora
-rw-r----- 1 oracle oinstall 500 1231 18:51 tnsnames.ora

当我们安装好 Oracle数据库之后,会自动生成这三个文件。其中含有 listener.ora 文件是因为安装数据库的这台机器作为服务端,用来监听客户端发送过来的数据库连接;而含有 sqlnet.oratnsnames.ora 文件,是因为安装数据库的这台机器同时也可以作为客户端,用来配置连接其他远程数据库。

1、listener.ora 的内容
[oracle@oradg admin]$ cat listener.ora 
# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = oradg)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /usr/local/oracle
2、sqlnet.ora的内容
[oracle@oradg admin]$ cat sqlnet.ora 
# sqlnet.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /usr/local/oracle
3、tnsnames.ora 的内容
[oracle@ora admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

HISDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hisdb)
    )
  )

二、配置 listener.ora 文件

listener进程接受远程对数据库的接入申请并转交给 Oracle 的服务器进程。所以如果不是使用远程连接,listener进程就不是必需的,同样的如果关闭listener进程并不会影响已经存在的数据库连接。

1、注册

注册就是将数据库作为一个服务注册到监听程序!

客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也可能不一样。

在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务。无论何时启动一个数据库,都有两条信息注册到监听器中:数据库服务器对应的实例和服务。如下所示:

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 10:51:29

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                31-DEC-2024 18:51:55
Uptime                    0 days 15 hr. 59 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 1 instance(s).                                    # 服务名
  Instance "ora", status READY, has 1 handler(s) for this service...  # 实例名
Service "hisdbdg" has 1 instance(s).
  Instance "oradg", status UNKNOWN, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully

对应的服务名和实例名如下:

SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
cell_offloadgroup_name		     string
db_file_name_convert		     string
db_name 			     string	 hisdb
db_unique_name			     string	 hisdb
global_names			     boolean	 FALSE
instance_name			     string	 ora    -- 实例名
lock_name_space 		     string
log_file_name_convert		     string
processor_group_name		     string
service_names			     string	 hisdb  --- 服务名

在数据库服务器和客户端之间有一监听程序(Listener ),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

2、动态注册

动态注册是监听先启动,然后如果实例启动,则注册到监听当中,提供服务。

动态注册是在实例启动的时候PMON进程根据spfilepfileinit.ora)中的instance_nameservice_names两个参数将实例和服务动态注册到listener中。

首先要在init.ora中指定instance_nameservice_names两个参数的值。注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_name的值。如果在RAC中配置,必须将集群中每个实例的instance_name参数设置为一个唯一的值。

注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的db_namedb_domain的值来注册自己。如果选择提供service_names值,可以使用完全限定的名称(如:orcl.oracle.com)或缩写的名称(如:orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是service_name值和db_domain值的拼接。

例如:下面的设置将导致服务orcl.oracle.com被注册到监听器中:

db_domain=oracle.com
service_names=orcl

采取动态注册方法时,文件listener.ora中的内容如下:

SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = hisdb)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = ora)
    )
  )

可以在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数。

(1)动态注册默认端口

说明:动态注册默认端口时监听的名字必须叫LISTENER 、端口号必须是1521

动态注册默认端口时,文件 listener.ora的内容如下:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.59.129)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /usr/local/oracle
(2)动态注册非默认端口

说明:

■ 动态注册非默认端口时,监听的名字必须叫LISTENER

■ 端口使用其它未占用端口(如:1530)

■ 配置一个tns,假设名字为HISDB,使用1530 端口

■ 执行如下命令,配置数据库的local_listener参数为:HISDB

alter system set local_listener = HISDB ;

动态注册非默认端口的步骤如下:

步骤一:修改listener.ora 文件

[oracle@ora admin]$ vi listener.ora 

# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1530))
    )
  )


ADR_BASE_LISTENER = /usr/local/oracle

步骤二:修改tnsnames.ora 文件

ORA_LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1530))
    (CONNECT_DATA =
      (SERVICE_NAME = hisdb)
    )
  )

步骤三:修改参数

alter system set local_listener = HISTDB;

步骤四:重启监听,查看监听状态

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 12:01:11

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                01-JAN-2025 12:00:00
Uptime                    0 days 0 hr. 1 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1530)))
Services Summary...
Service "hisdb" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully
3、静态注册

静态注册监听一启动,不管实例是否启动,实例的名字已经注册到监听中,主要用于dba远程启动数据库实例。

静态注册设置方法:设置GLOBAL_DBNAMESID_NAME参数。

注意:静态注册的监听status永远为UNKNOWN

例如:

[oracle@ora admin]$ vi listener.ora 

# listener.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
# ===========以下为动态注册的监听============================================================
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    )
  )
# ===========以下为静态注册的监听============================================================
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = hisdb)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = ora)
    )
    (SID_DESC =
     (GLOBAL_DBNAME = hisdbdg)
     (ORACLE_HOME = /usr/local/oracle/product/11.2.0/db_1)
     (SID_NAME = oradg)
    )
  )


ADR_BASE_LISTENER = /usr/local/oracle

重启监听,查看监听状态:

[oracle@ora admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 01-JAN-2025 12:25:31

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                01-JAN-2025 12:24:12
Uptime                    0 days 0 hr. 1 min. 18 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/local/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/local/oracle/diag/tnslsnr/ora/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora)(PORT=1521)))
Services Summary...
Service "hisdb" has 2 instance(s).
  Instance "ora", status UNKNOWN, has 1 handler(s) for this service...
  Instance "ora", status READY, has 1 handler(s) for this service...
Service "hisdbdg" has 1 instance(s).
  Instance "oradg", status UNKNOWN, has 1 handler(s) for this service...
Service "oraXDB" has 1 instance(s).
  Instance "ora", status READY, has 1 handler(s) for this service...
The command completed successfully

说明:

实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

动态注册的数据库通过状态信息中的状态READY或状态BLOCKED来指明。不管何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。不管数据库是在运行还是已经关闭,监听器总是知道它的状态。

三、配置 tnsnames.ora 文件

1、tnsnames.ora 文件的内容

该文件类似于 Linuxhosts 文件,提供 tnsname到主机名或者ip的对应。文件的内容如下:

[oracle@ora admin]$ vi tnsnames.ora

# tnsnames.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.


HISDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = hisdb)
    )
  )

说明:

(1)PROTOCOL:客户端与服务器端通讯的协议,一般为TCP ,该内容一般不用改。

(2)HOST:数据库监听所在机器的主机名或IP地址,数据库侦听一般与数据库在同一个机器上。

(3)PORT:数据库监听的端口。

(4)SERVICE_NAME:服务名。

2、tnsnames 连接过程

当输入sqlplus sys/oracle@hisdb 时:

(1)查询sqlnet.ora,查看名称的解析方式,发现是 TNSNAME

(2)查询tnsnames.ora文件,找到 HISDB 的记录,并且找到主机名,端口和 service_name

(3)如果listener进程没有问题的话,建立与listener 进程的连接。

(4)根据不同的服务器模式(如:专用服务器模式或者共享服务器模式,默认为专用服务器模式),listener采取接下去的动作。

四、配置 sqlnet.ora 文件

Oracle 通过该文件决定怎么样找一个连接中出现的连接字符串。 sqlnet.ora 文件的默认内容如下:

[oracle@ora admin]$ cat sqlnet.ora 
# sqlnet.ora Network Configuration File: /usr/local/oracle/product/11.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ADR_BASE = /usr/local/oracle

此时,如果在客户端输入如下内容:

[oracle@ora admin]$ sqlplus sys/oracle@hisdb as sysdba

则客户端会首先在tnsnames.ora文件中找hisdb的记录,如果没有相应的记录则尝试把 hisdb当作一个主机名。


http://www.kler.cn/a/461800.html

相关文章:

  • (二)当人工智能是一个函数,函数形式怎么选择?ChatGPT的函数又是什么?
  • 【74HC192减法24/20/72进制】2022-5-17
  • ROS导航使用贝塞尔曲线对全局路径进行平滑处理
  • PostgreSQL 表达式
  • 线性代数自学资源推荐我的个人学习心得
  • Swift Combine 学习(四):操作符 Operator
  • 基于通用优化软件GAMS的数学建模和优化分析实践技术应用
  • 2 秒杀系统架构
  • Jenkins管理多版本python环境
  • 云效流水线使用Node构建部署前端web项目
  • 深入浅出:AWT事件监听器及其应用
  • git仓库上传
  • Spring Bean required a single bean, but 2 were found,发现多个 Bean
  • 深入浅出:事件监听中的适配器模式
  • 微信小程序调用 WebAssembly 烹饪指南
  • 25年开篇之作---动态规划系列<七> 01背包问题
  • Python机器学习笔记(十六、数据表示与特征工程-分类变量)
  • Linux隐藏登录和清除历史命令以及其他相关安全操作示例
  • 20241231 机器学习ML -(2)KNN(scikitlearn)
  • Selenium和WebDriver的安装与配置
  • TCP 链接与 HTTP 链接的区别
  • 二十三种设计模式-抽象工厂模式
  • 最大连续和(POJ2750)
  • Three.js教程006:物体的缩放与旋转
  • 创建flutter项目遇到无法连接源的问题
  • 计算机毕设-基于springboot的考研学习分享平台的设计与实现(附源码+lw+ppt+开题报告)