oracle相同SID对外提供多个service_names

时间:2023-03-09 02:14:43
oracle相同SID对外提供多个service_names

为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件)

 SQL> show parameter service_names;

 NAME                     TYPE     VALUE
 ------------------------------------ ----------- ------------------------------
 service_names                 string     vmdb

 SQL> alter system set service_names='vmdb,sn01,sn02' scope=both;

 System altered.

重启监听后,监听状态并未显示服务sn01,sn02

 [oracle@CentOS ~]$ lsnrctl stop

 LSNRCTL   ::

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

 Connecting )))
 The command completed successfully
 [oracle@CentOS ~]$ lsnrctl start

 LSNRCTL   ::

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

 Starting /dbhome_1/bin/tnslsnr: please wait...

 TNSLSNR  - Production
 System parameter /dbhome_1/network/admin/listener.ora
 Log messages written to /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
 Listening )))

 Connecting )))
 STATUS of the LISTENER
 ------------------------
 Alias                     LISTENER
 Version                   TNSLSNR  - Production
 Start Date                 ::
 Uptime                     days  hr.   sec
 Trace Level               off
 Security                  ON: Local OS Authentication
 SNMP                      OFF
 Listener Parameter /dbhome_1/network/admin/listener.ora
 Listener Log File         /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
 Listening Endpoints Summary...
   (DESCRIPTION)))
 Services Summary...
 Service "vmdb" has  instance(s).
   Instance "vmdb", status UNKNOWN, has  handler(s) for this service...
 The command completed successfully

通过另一台机器通过服务名sn01连接可以连接上:

 /sn01

 SQL Production  :: 

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

 ERROR:
 ORA: the password will expire within  days

 Connected to:
 Oracle  - 64bit Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options

 SQL> 

在数据库中可以查询v$session视图的service_name来判断会话是由通过哪个服务名连接创建的:

 SQL> col paddr format a20
 SQL
 SQL> col username format a15
 SQL> col service_name format a20
 SQL> Select paddr,Sid,serial#,username,service_name From v$session  Where username Is Not Null;

 PADDR              SID     SERIAL# USERNAME     SERVICE_NAME
 -------------------- -------- ---------- --------------- --------------------
 000000008DC95250                  SYS         SYS$USERS
 000000008DC98310                   TEST         vmdb
 000000008DC96290                  TEST         sn01
 000000008DC99350                  TEST         vmdb

重启数据库:

 SQL> shutdown immediate;
 Database closed.
 Database dismounted.
 ORACLE instance shut down.
 SQL> startup
 ORACLE instance started.

 Total System Global Area   bytes
 Fixed Size             bytes
 Variable Size           bytes
  bytes
 Redo Buffers             bytes
 Database mounted.
 Database opened.

再次查看监听,sn01,sn02服务名显示出来了:

 [oracle@CentOS ~]$ lsnrctl status

 LSNRCTL   ::

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

 Connecting )))
 STATUS of the LISTENER
 ------------------------
 Alias                     LISTENER
 Version                   TNSLSNR  - Production
 Start Date                 ::
 Uptime                     days  hr.   sec
 Trace Level               off
 Security                  ON: Local OS Authentication
 SNMP                      OFF
 Listener Parameter /dbhome_1/network/admin/listener.ora
 Listener Log File         /u01/app/oracle/diag/tnslsnr/CentOS/listener/alert/log.xml
 Listening Endpoints Summary...
   (DESCRIPTION)))
 Services Summary...
 Service "sn01" has  instance(s).
   Instance "vmdb", status READY, has  handler(s) for this service...
 Service "sn02" has  instance(s).
   Instance "vmdb", status READY, has  handler(s) for this service...
 Service "vmdb" has  instance(s).
   Instance "vmdb", status UNKNOWN, has  handler(s) for this service...
   Instance "vmdb", status READY, has  handler(s) for this service...
 Service "vmdbXDB" has  instance(s).
   Instance "vmdb", status READY, has  handler(s) for this service...
 The command completed successfully

但是监听配置文件里不会自动增加服务名sn01,sn02:

 /dbhome_1/network/admin/listener.ora
 # listener.ora Network Configuration /dbhome_1/network/admin/listener.ora
 # Generated by Oracle configuration tools.

 SID_LIST_LISTENER =
   (SID_LIST =
     (SID_DESC =
       (GLOBAL_DBNAME = vmdb)
       (ORACLE_HOME /dbhome_1)
       (SID_NAME = vmdb)
     )
   )

 LISTENER =
   (DESCRIPTION =
     (ADDRESS ))
   )

 ADR_BASE_LISTENER = /u01/app/oracle