安装与配置 Oracle 11g RAC(18)—— 配置监听

在 Oracle 11g rac 环境中,数据库监听(listener.ORA)位于 grid 账号的 $ORACLE_HOME/network/admin 目录下。监听器的启动与关闭由 grid 账号控制。我们也可以通过 oracle 账号用 netca 命令创建监听器,此时监听器位于 oracle 账号的$ORACLE_HOME/network/admin 目录下。

一、概述

1、监听的注册

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

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

2、如何查询某服务是静态监听注册还是动态监听注册

可以使用命令 lsnrctl status 来查看某服务是静态注册还是动态注册。
实例状态为 UNKNOWN 值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。动态监听的状态是 READY。如下所示的监听都是动态监听:

[grid@rac1 ~]$ lsnrctl status listener_scan2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 12:29:50

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                25-AUG-2021 08:15:25
Uptime                    0 days 4 hr. 14 min. 27 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=7788)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully
3、动态监听

动态注册不需要显示的配置 listener.ora 文件,实例 MOUNT 时,PMON 进程就会根据 instance_name、service_name 参数将实例和服务动态注册到 listerer 中。

(1)查看 instance_name、service_name
--数据库对应的 instance_name、service_name
SQL> show parameter name

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

--ASM 实例对应的: instance_name、service_name
SQL> show parameter name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 +ASM
instance_name			     string	 +ASM1 --实例名
lock_name_space 		     string
service_names			     string	 +ASM  --服务名
(2)查看监听状态
[grid@rac1 ~]$ lsnrctl status listener      

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 12:35:13

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                25-AUG-2021 09:07:25
Uptime                    0 days 3 hr. 27 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=7788)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.101)(PORT=7788)))
Services Summary...
########################################################################################
Service "+ASM" has 1 instance(s).                                       ### 服务名:+ASM
  Instance "+ASM1", status READY, has 1 handler(s) for this service...  ### 实例名:+ASM1
########################################################################################
Service "orcl" has 1 instance(s).                                       ### 服务名:orcl
  Instance "orcl1", status READY, has 1 handler(s) for this service...  ### 实例名:orcl1
########################################################################################
Service "orclXDB" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
The command completed successfully

不同的参数注册到监听中的服务名、实例名有以下情况:
A:如果没有设定 instance_name,将使用 db_name 初始化参数值。
B:如果 service_names 值为空,将拼接 db_unique_name 和 db_domain 参数值来注册监听。
C:如果设置 service_names 值,可以使用指定的名称(比如:orcl.oracle.com)或缩写的名称(比如:orcl)。
D:如果选择缩写的名称并设置了 db_domain 参数,注册到监听器中的服务将是 service_name 值和 db_domain 值的拼接。

(3)动态监听的优点

A:不需要人工干预,在 lsnrctl start 后,会自动注册数据库的 instance_name 和 service_name,tns 使用 SID 和SERVICE_NAME 均可以连接。
B:修改 SERVICE_NAME 或者 SID 不用修改 listener.ora 文件。
C:动态注册的数据库通过状态信息中的状态 READY 或状态 BLOCKED 来指明。
D:无论何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载均衡。动态监听由 PMON 进程向监听进行动态注册,也可以使用以下命令手动注册:

ALTER SYSTEM REGISTER;
4、静态监听

静态注册指实例启动时读取 listener.ora 配置文件,将实例和服务注册到监听程序。

无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务。在数据库未 open 状态时,就可以远程连接到数据库,对数据库进行操作。

二、查看监听状态

1、切换到 grid 用户

查看监听文件:

[grid@rac2 admin]$ cd $ORACLE_HOME/network/admin
[grid@rac2 admin]$ pwd
/u01/app/11.2.0/grid/network/admin
[grid@rac2 admin]$ ll
total 24
-rw-r--r-- 1 grid oinstall  181 Apr 21 16:01 endpoints_listener.ora
-rw-r--r-- 1 grid oinstall  718 Aug  5 03:56 listener.ora
-rw-r--r-- 1 grid oinstall  534 Aug  5 03:56 listener.ora.bak.rac2
drwxr-xr-x 2 grid oinstall 4096 Apr 21 15:39 samples
-rw-r--r-- 1 grid oinstall  381 Apr 21 15:39 shrept.lst
-rw-r--r-- 1 grid oinstall  212 Apr 21 16:02 sqlnet.ora
2、查看监听状态
[grid@rac2 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 06:30:33

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:34:04
Uptime                    1 days 17 hr. 56 min. 29 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.12)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully
3、查看初始化参数:local_listener、remote_listener

(1)在 grid 用户下查看初始化参数:local_listener 和 remote_listener

[grid@rac2 admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed Aug 25 06:33:57 2021
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> select instance_name,status from v$instance;
INSTANCE_NAME	 STATUS
---------------- ------------
+ASM2		 STARTED       --当前实例为 ASM 实例,实例名:+ASM2

SQL> show parameter listen
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	  (DESCRIPTION=(ADDRESS_LIST=(A
						 DDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=1521))))
remote_listener 		     string

--初始化参数:local_listener 设置为当前节点的 vip
--初始化参数:remote_listener 为空

(2)在 oracle 用户下查看初始化参数:local_listener 和 remote_listener

[oracle@rac2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed Aug 25 06:38:13 2021
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name,status from v$instance;
INSTANCE_NAME	 STATUS
---------------- ------------
orcl2		 OPEN       --当前实例为数据库实例,实例名:orcl2

SQL> show parameter listener
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
listener_networks		     string
local_listener			     string	  (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=1521))
remote_listener 		     string	 rac-scan:1521

--初始化参数:local_listener 设置为当前节点的 vip
--初始化参数:remote_listener 为 scan 对应的主机名
4、查看监听器的配置
[grid@rac2 admin]$ cd $ORACLE_HOME/network/admin

[grid@rac2 admin]$ pwd
/u01/app/11.2.0/grid/network/admin

[grid@rac2 admin]$ ll
total 24
-rw-r--r-- 1 grid oinstall  181 Apr 21 16:01 endpoints_listener.ora
-rw-r--r-- 1 grid oinstall  718 Aug  5 03:56 listener.ora
-rw-r--r-- 1 grid oinstall  534 Aug  5 03:56 listener.ora.bak.rac2
drwxr-xr-x 2 grid oinstall 4096 Apr 21 15:39 samples
-rw-r--r-- 1 grid oinstall  381 Apr 21 15:39 shrept.lst
-rw-r--r-- 1 grid oinstall  212 Apr 21 16:02 sqlnet.ora

[grid@rac2 admin]$ cat listener.ora

LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))		# line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))		# line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))		# line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON		# line added by Agent
5、查看 scan vip 配置
[grid@rac1 admin]$ srvctl config scan

SCAN name: rac-scan, Network: 1/192.168.1.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /rac-scan/192.168.1.201
SCAN VIP name: scan2, IP: /rac-scan/192.168.1.202
SCAN VIP name: scan3, IP: /rac-scan/192.168.1.203
6、查看 scan vip 状态
[grid@rac1 admin]$ srvctl status scan

SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac2
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac1
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac1
7、查看 scan listener 配置
[grid@rac1 admin]$ srvctl config scan_listener

SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
8、查看 scan listener 状态
[grid@rac1 admin]$ srvctl status scan_listener

SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac2
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac1
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac1
7、使用 lsnrct 命令查看 scan vip 状态
## LISTENER_SCAN2、LISTENER_SCAN3 在节点1上,可以在节点1上查看 LISTENER_SCAN2、LISTENER_SCAN3 的状态
[grid@rac1 admin]$ lsnrctl status LISTENER_SCAN2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:24:48

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:31:10
Uptime                    1 days 18 hr. 53 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=1521)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully



[grid@rac1 admin]$ lsnrctl status LISTENER_SCAN3

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:24:51

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN3
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:31:13
Uptime                    1 days 18 hr. 53 min. 38 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan3/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN3)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.203)(PORT=1521)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully


## LISTENER_SCAN1 在节点2上,可以在节点2上查看 LISTENER_SCAN1 的状态
[grid@rac2 admin]$ lsnrctl status LISTENER_SCAN1

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:25:36

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN1
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:34:04
Uptime                    1 days 18 hr. 51 min. 31 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac2/listener_scan1/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.201)(PORT=1521)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully
8、查看本地监听器配置
##节点1
[grid@rac1 admin]$ srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521

##节点2
[grid@rac2 admin]$ srvctl config listener
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521
9、查看本地监听器状态
##节点1
[grid@rac1 admin]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): rac2,rac1

##节点2
[grid@rac2 admin]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): rac2,rac1
10、使用 lsnrctl 查看本地监听器状态
## 节点1
[grid@rac1 admin]$ lsnrctl status listener

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:31:33

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:31:15
Uptime                    1 days 19 hr. 0 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.101)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
The command completed successfully

## 节点2
[grid@rac2 admin]$ lsnrctl status listener

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:32:51

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                23-AUG-2021 12:34:04
Uptime                    1 days 18 hr. 58 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/rac2/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.12)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully
11、查看监听服务
##--节点1
[grid@rac1 admin]$ ps -ef|grep lsnr
grid       2422      1  0 Aug23 ?        00:00:02 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN2 -inherit
grid       2448      1  0 Aug23 ?        00:00:02 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN3 -inherit
grid       2454      1  0 Aug23 ?        00:00:02 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid      18083  15431  0 07:35 pts/1    00:00:00 grep lsnr

##--节点2
[grid@rac2 admin]$ ps -ef|grep lsnr
grid       2153      1  0 Aug23 ?        00:00:01 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER -inherit
grid       2155      1  0 Aug23 ?        00:00:01 /u01/app/11.2.0/grid/bin/tnslsnr LISTENER_SCAN1 -inherit
grid     112246 109574  0 07:34 pts/0    00:00:00 grep lsnr
12、查看监听服务的状态
[grid@rac1 admin]$ lsnrctl service

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 25-AUG-2021 07:36:18

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM1", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         LOCAL SERVER
Service "orcl" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:4 refused:0 state:ready
         LOCAL SERVER
Service "orclXDB" has 1 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER <machine: rac1, pid: 2736>
         (ADDRESS=(PROTOCOL=tcp)(HOST=rac1.example.com)(PORT=24624))
The command completed successfully

三、配置 Oracle rac 的监听

1、查看服务器端监听配置文件

使用 grid 用户查看:

[grid@rac2 admin]$ cd $ORACLE_HOME/network/admin
[grid@rac2 admin]$ ll
total 28
-rw-r--r-- 1 grid oinstall  181 Aug 25 09:07 endpoints_listener.ora
-rw-r--r-- 1 grid oinstall  181 Apr 21 16:01 endpoints_listener.ora.bak.rac2
-rw-r--r-- 1 grid oinstall  718 Aug  5 03:56 listener.ora
-rw-r--r-- 1 grid oinstall  534 Aug  5 03:56 listener.ora.bak.rac2
drwxr-xr-x 2 grid oinstall 4096 Apr 21 15:39 samples
-rw-r--r-- 1 grid oinstall  381 Apr 21 15:39 shrept.lst
-rw-r--r-- 1 grid oinstall  212 Apr 21 16:02 sqlnet.ora


[grid@rac2 admin]$ cat listener.ora
LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))		# line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))		# line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))		# line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON		# line added by Agent

上面的 listener.ora 配置文件中的信息是 Grid Infrastructure 安装过程中 Agent 自行添加的,LISTENER 仅指定了PROTOCOL = IPC 的信息,并没有指定监听的地址、端口等信息。

Line added by Agent 说明是由 Oraagent 进程更新的记录!!

实际上 Oracle11g GI 的 LISTENER 监听器配置默认由 endpoints_listener.ora 配置文件管理:

## 节点1
[grid@rac1 admin]$ cat endpoints_listener.ora
LISTENER_RAC1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=7788))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=7788)(
IP=FIRST))))		# line added by Agent

##节点2
[grid@rac2 admin]$ cat endpoints_listener.ora
LISTENER_RAC2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=7788))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=7788)(
IP=FIRST))))		# line added by Agent
注意:

使用 endpoints_listener.ora 的情况下不应使用 lsnrctl 管理 LISTENER,而需使用 srvctl 或 crsctl 工具管理,否则 lsnrctl 将不会识别 endpoints_listener.ora 中的信息。如下所示:

## 查看监听状态
[grid@rac1 admin]$ lsnrctl status listener_scan2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 01:55:23

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                25-AUG-2021 08:15:25
Uptime                    0 days 17 hr. 40 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=7788)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully



## reload listener
[grid@rac1 admin]$ lsnrctl reload listener_scan2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 01:55:31

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
The command completed successfully


##查看监听状态
[grid@rac1 admin]$ lsnrctl status listener_scan2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 01:55:36

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                25-AUG-2021 08:15:25
Uptime                    0 days 17 hr. 40 min. 13 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
The listener supports no services
The command completed successfully


####################################################################################
######## 使用 srvctl 命令启停监听
[grid@rac1 admin]$ srvctl stop scan_listener -i 2
[grid@rac1 admin]$ srvctl start scan_listener -i 2

##查看监听状态
[grid@rac1 admin]$ lsnrctl status listener_scan2

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 02:29:23

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN2
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                26-AUG-2021 02:27:39
Uptime                    0 days 0 hr. 1 min. 44 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac1/listener_scan2/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN2)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.202)(PORT=7788)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 2 instance(s).
  Instance "orcl1", status READY, has 1 handler(s) for this service...
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully
2、使用 srvctl 工具添加监听
(1)检查 network 的 network number
[grid@rac1 admin]$ srvctl config network
Network exists: 1/192.168.1.0/255.255.255.0/eth0, type static

## network number:1
(2)添加监听
## 查看 srvctl add listener 命令的语法
[grid@rac1 admin]$ srvctl add listener -h

Adds a listener configuration to the Oracle Clusterware.

Usage: srvctl add listener [-l <lsnr_name>] [-s] [-p "[TCP:]<port>[, ...][/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]"] [-o <orac
le_home>] [-k <net_num>]    -l <lsnr_name>           Listener name (default name is LISTENER)
    -o <oracle_home>         ORACLE_HOME path (default value is CRS_HOME)
    -k <net_num>             network number (default number is 1)
    -s                       Skip the checking of ports
    -p "[TCP:]<port>[, ...][/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]"       Comma separated tcp ports or listener endpoints
    -h                       Print usage

## 添加监听
[grid@rac1 admin]$ srvctl add listener -l NEW_LISTENER -o $ORACLE_HOME -p 8888 -k 1

## 说明:
## -k:network number:1
## -p:端口号(8888)
## -l:监听名
## -o:GI HOME路径

## 启动监听
[grid@rac1 admin]$ srvctl start listener -l NEW_LISTENER

## 查看监听 NEW_LISTENER 状态
[grid@rac1 admin]$ srvctl status listener -l NEW_LISTENER
Listener NEW_LISTENER is enabled
Listener NEW_LISTENER is running on node(s): rac2,rac1
(3)查看监听状态
[grid@rac2 admin]$ lsnrctl status new_listener

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 02:54:40

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=NEW_LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     NEW_LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                26-AUG-2021 02:45:38
Uptime                    0 days 0 hr. 9 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac2/new_listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=NEW_LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.12)(PORT=8888)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=8888)))
The listener supports no services
The command completed successfully

## 监听没有注册信息
3、查看文件 listener.ora 信息
[grid@rac2 admin]$ cat listener.ora
#############################################################################################
NEW_LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=NEW_LISTENER))))		# line added by Agent  ### 新增的监听信息
#############################################################################################

LISTENER_SCAN3=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))))		# line added by Agent
LISTENER_SCAN2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))))		# line added by Agent
LISTENER_SCAN1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))))		# line added by Agent
LISTENER=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))))		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN1=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN2=ON		# line added by Agent
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER_SCAN3=ON		# line added by Agent
#############################################################################################
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_NEW_LISTENER=ON		# line added by Agent   ### 新增的监听信息
############################################################################################# 
4、查看文件 endpoints_listener.ora 信息
[grid@rac2 admin]$ cat endpoints_listener.ora
#############################################################################################
### 新增的监听信息
NEW_LISTENER_RAC2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=8888))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=8888)(IP=FIRST))))		# line added by Agent
#############################################################################################

LISTENER_RAC2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=7788))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=7788)(IP=FIRST))))		# line added by Agent
5、修改初始化参数 local_listener
(1)以 oracle 用户登录数据库

修改数据库实例对应的 local_listener:

SQL> show parameter local_listener

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
local_listener			     string	 (ADDRESS=(PROTOCOL=TCP)(HOST=1
						 92.168.1.101)(PORT=7788))

SQL> alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.101)(PORT=8888))'
     scope = both sid = 'orcl1';
System altered.

SQL> alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=8888))'
     scope = both sid = 'orcl2';
System altered.
(2)以 grid 用户登录

修改 ASM 实例对应的 local_listener:

SQL> show parameter local_listener

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
local_listener			     string	 (DESCRIPTION=(ADDRESS_LIST=(AD
						 DRESS=(PROTOCOL=TCP)(HOST=192.
						 168.1.101)(PORT=7788))))

SQL> show parameter instance_name
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
instance_name			     string	 +ASM1

SQL> alter system set local_listener = 
     '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.101)(PORT=8888))))'
     scope = both sid = '+ASM1';
     
SQL> alter system set local_listener = 
     '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.102)(PORT=8888))))'
     scope = both sid = '+ASM2';
6、查看监听状态
[grid@rac2 admin]$ lsnrctl status new_listener

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-AUG-2021 03:13:40

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=NEW_LISTENER)))
STATUS of the LISTENER
------------------------
Alias                     NEW_LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                26-AUG-2021 02:45:38
Uptime                    0 days 0 hr. 28 min. 1 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/rac2/new_listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=NEW_LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.12)(PORT=8888)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.102)(PORT=8888)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl2", status READY, has 1 handler(s) for this service...
The command completed successfully

四、配置监听客户端信息

监听服务器端的配置文件在 grid 用户的 $ORACLE_HOME/network/admin 的 listener.ora 文件中。客户端配置文件在 Oracle 用户的 $ORACLE_HOME/network/admin 的 tnsnames.ora 文件中。

[oracle@rac1 ~]$ cd $ORACLE_HOME/network/admin
[oracle@rac1 admin]$ ll
total 12
drwxr-xr-x 2 oracle oinstall 4096 Apr 21 16:29 samples
-rw-r--r-- 1 oracle oinstall  381 Dec 17  2012 shrept.lst
-rw-r----- 1 oracle oinstall  323 Aug 25 14:32 tnsnames.ora
1、查看 tnsnames.ora 文件的内容

客户机为了和服务器连接,必须先和服务器上的监听进程联络。ORACLE 通过 tnsnames.ora 文件中的连接描述符来说明连接信息。一般情况下,tnsnames.ora 是建立在客户机上的。如果是客户机/服务器结构,整个网络上只有一台机器安装了 ORACLE 数据库服务器,那么只需在每个要访问 ORACLE 服务器的客户机上定义该文件,在服务器上无需定义。

tnsnames.ora 中的配置信息称为服务命名,用于 Oracle 的远程连接。包含连接时使用的网络协议(PROTOCOL)、主机名(HOST)、端口号(PORT)以及服务名称(SERVICE_NAME)。
文件内容如下:

[oracle@rac1 admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan.oracle.com)(PORT = 8888))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

如果不配置监听客户端,可以使用以下命令远程连接:

[oracle@rac1 admin]$ sqlplus sys/oracle@rac-scan:8888/orcl as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 26 03:59:14 2021

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> 

也可以使用监听客户端配置的服务命名来远程登录:

[oracle@rac1 admin]$ sqlplus scott/tiger@mydb                    

SQL*Plus: Release 11.2.0.4.0 Production on Thu Aug 26 03:59:38 2021

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


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> 

因此,监听客户端中的服务命名就相当于把登录时所需要的信息(网络协议、主机名、端口号、服务名称)写入客户端配置文件中的一个服务命名当中。这样,远程登录数据库时只需要使用服务命名进行登录即可。

2、 tnsnames.ora 文件的格式
mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan.oracle.com)(PORT = 8888))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

## 字段含义如下:
## ADDRESS_LIST:表示该客户机要经由多种协议与一台或多台服务器连接
## PROTOCOL:指明要连接使用的协议
## SERVICE_NAME:SERVICE_NAME 就是 Global Database Name
## HOST:TCP/IP 协议使用的服务器IP地址
## PORT:TCP/IP 使用的端口地址
## SID:指定要连接的服务器上 ORACLE 数据库的 ORACLE_SID
## SERVER=DEDICATED:表示用专用服务器连接 ORACLE 数据库。

示例:

ORA817 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = sun62)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora817.huawei.com)
    )
  )
## PROTOCOL:TCP
## HOST:sun62
## PORT:1521
## SERVICE_NAME:ora817.huawei.com

INST1_HTTP =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = sun62)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = ora817.huawei.com)
      (PRESENTATION = http://admin)
    )
  )
## PROTOCOL:TCP
## HOST:sun62
## PORT:1521
## SERVER:SHARED
## SERVICE_NAME:ora817.huawei.com
## PRESENTATION:http://admin

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
## PROTOCOL:IPC
## KEY:EXTPROC
## SID:PLSExtProc
## PRESENTATION:RO
3、用户远程登录服务器过程分析

sqlplus 运行的基本机理:

## 查看 sqlnet.ora 文件内容:

[grid@rac2 admin]$ cat sqlnet.ora

# sqlnet.ora.rac2 Network Configuration File: /u01/app/11.2.0/grid/network/admin/sqlnet.ora.rac2
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
ADR_BASE = /u01/app/grid

## sqlplus 登录过程分析
## 当用户输入:sqlplus scott/tiger@mydb 
## 第1步:sqlplus 程序会自动到 sqlnet.ora 文件中找 NAMES.DEFAULT_DOMAIN 参数。
## 第2步:分两种情况:
## (1)如果 NAMES.DEFAULT_DOMAIN 参数不存在,sqlplus 程序会直接到 tnsnames.ora 文件中找 mydb 网络服务名,然后取出其中的 host、port、tcp、service_name,利用这些信息将连接请求发送到正确的数据库服务器上。
## (2)如果 NAMES.DEFAULT_DOMAIN 参数存在,则将该参数中的值取出(比如:NAMES.DEFAULT_DOMAIN 参数的值为 server.com),加到网络服务名的后面。此时输入自动变为:sqlplus scott/tiger@mydb.server.com。

假定 tnsnames.ora 文件的内容如下:

mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = scan.oracle.com)(PORT = 8888))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

## 输入:sqlplus scott/tiger@mydba
## 第1步:查询 sqlnet.ora 看名称的解析方式,发现是:TNSNAME 
## 第2步:查询 tnsnames.ora 文件,从中找 mydb 的记录,并且找到主机名,端口号和 service_name 
## 第3步:如果 listener 进程没有问题的话,建立与 listener 进程的连接
## 第4步:根据不同的服务器模式(专用服务器或共享服务器),listener 采取接下去的动作,没有问题的话客户端就连接上了数据库的 server process
## 第5步:建立网络连接,listener 进程的历史使命完成
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐