對於一個實例的oracle數據庫,配置多個監聽器的實驗。
服務版本信息:
[oracle@LINUX10 admin]$ lsb_release -a
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: OracleServer
Description: Oracle Linux Server release 6.5
Release: 6.5
Codename: n/a
查看數據庫版本信息:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
查看監聽文件listener.ora的內容
[oracle@LINUX15 ~]$ cd $ORACLE_HOME/network/admin
[oracle@LINUX15 admin]$ ls
listener.ora samples shrept.lst tnsnames.ora
[oracle@LINUX15 admin]$ more listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.3/oracle)
(SID_NAME = orcldb)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
開始配置多個監聽器,即更改監聽文件listener.ora,也可以通過netmgr命令進行圖形化更改,增加兩個監聽器 LISTENER1, 端口:1522, LISTENER2, 端口:1523
[oracle@LINUX15 admin]$ vi listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.3/oracle)
(SID_NAME = orcldb)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1522))
)
LISTENER2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1523))
)
然後通過 lsnrctl 命令將 LISTENER1 和 LISTENER2 啓動(由於之前 LISTENER默認監聽器已經啓動,所以不用啓動)
[oracle@LINUX15 admin]$ lsnrctl
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 31-MAR-2015 00:23:05
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start listener1
Starting /u01/app/oracle/product/11.2.3/oracle/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/LINUX15/listener1/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.15)(PORT=1522)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.15)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias listener1
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 31-MAR-2015 00:23:22
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/LINUX15/listener1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.15)(PORT=1522)))
The listener supports no services
The command completed successfully
LSNRCTL> start listener2
Starting /u01/app/oracle/product/11.2.3/oracle/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/LINUX15/listener2/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.15)(PORT=1523)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.15)(PORT=1523)))
STATUS of the LISTENER
------------------------
Alias listener2
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 31-MAR-2015 00:23:34
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.3/oracle/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/LINUX15/listener2/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.15)(PORT=1523)))
The listener supports no services
The command completed successfully
監聽器LISTENER1 和 LISTENER2 已經正常啓動。但是沒有服務將實例信息註冊進來,需要註冊實例信息,有兩種方法,“動態註冊”和“靜態註冊”
1.首先進行靜態註冊,
靜態註冊在文章(http://blog.itpub.net/30150152/viewspace-1477401/)中已經提到,即只需要修改listener.ora文件即可
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb)
(ORACLE_HOME = /u01/app/oracle/product/11.2.3/oracle)
(SID_NAME = orcldb)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1521))
)
ADR_BASE_LISTENER = /u01/app/oracle
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb1)
(ORACLE_HOME = /u01/app/oracle/product/11.2.3/oracle)
(SID_NAME = orcldb)
)
)
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1522))
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcldb2)
(ORACLE_HOME = /u01/app/oracle/product/11.2.3/oracle)
(SID_NAME = orcldb)
)
)
LISTENER2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.15)(PORT = 1523))
)
增加了 SID_LIST_LISTENER1 對應的服務名爲 orcldb1 , SID_LIST_LISTENER2 對應的服務名爲 orcldb2 , 注意每個註冊的GLOBAL_DBNAME 不能相同,否則,客戶端通過服務名連接進來的時候將會是隨機連接進來的,這樣導致可能客戶端連接進來的時候,每次對應的監聽不同從而sid_name不同。
現在重新啓動監聽器 LISTENER1 和 LISTENER2, 就可以通過客戶端連接進來了(在客戶端連接進來的時候,確保1522 和1523 端口是通的,不然無法連接的),下面是我通過一臺windows機器連接進來的
C:\Users\Administrator>sqlplus system/[email protected]:1522/orcldb1
SQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 31 00:43:22 2015
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL>
當然,還可以通過
sqlplus system/[email protected]:1523/orcldb2
進行連接