ORACLE RAC 監聽配置 (listener.ora tnsnames.ora)
展開
Oracle RAC 監聽器的配置與單實例稍有不同,但原理和實現方法基本上是相同的。在Oracle中 tns進程用於為指定網絡地址上的一個或多個Oracle 實例提供服務注冊,並響應來自客戶端對該服務提出的連接請求。一旦連接請求到達,並派生出一個服務器進程建立服務器與用戶端之間的連接(專有服務器dedicated server)或轉發服務請求(共享服務器模式shared server)。如果監聽器知道多於一個實例提供所請求的服務,則可能會根據客戶端與服務器端相關配置將請求定位到較低負載的實例為其提供服務。因此合理正確配置監聽器以及tnsnames是Oracle RAC實現負載均衡以及failover的前提,本文將描述基於 suse linux 10 + Oracle 10g RAC 下監聽器的配置。
有關Oracle 網絡配置相關基礎請參考:
配置ORACLE 客戶端連接到數據庫
配置非默認端口的動態服務注冊
配置sqlnet.ora限制IP訪問Oracle
Oracle 監聽器日志配置與管理
設置 Oracle 監聽器密碼(LISTENER)
配置RAC負載均衡與故障轉移
一、節點上監聽信息
1、兩個節點及主機配置信息(bo2dbp,bo2dbs)
oracle@bo2dbp:/u01/oracle/db/network/admin> cat /etc/hosts
127.0.0.1 localhost.2gotrade.com localhost
# Public
192.168.7.51 bo2dbp.2gotrade.com bo2dbp
192.168.7.52 bo2dbs.2gotrade.com bo2dbs
#Private
10.10.7.51 bo2dbp-priv.2gotrade.com bo2dbp-priv
10.10.7.52 bo2dbs-priv.2gotrade.com bo2dbs-priv
#Virtual
192.168.7.61 bo2dbp-vip.2gotrade.com bo2dbp-vip
192.168.7.62 bo2dbs-vip.2gotrade.com bo2dbs-vip
2、節點bo2dbp上的listener.ora
oracle@bo2dbp:/u01/oracle/db/network/admin> more listener.ora
# listener.ora.bo2dbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbp
# Generated by Oracle configuration tools.
LISTENER_BO2DBP =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1521)(IP = FIRST))
)
)
SID_LIST_LISTENER_BO2DBP =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/db)
(PROGRAM = extproc)
)
)
3、節點bo2dbp上的tnsnames.ora
oracle@bo2dbp:/u01/oracle/db/network/admin> more tnsnames.ora
#對於連接字符串GOBO1A,GOBO1B,GOBO1在此處可以省略
#這些字符串通常用於客戶端連接到數據庫
GOBO1B =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO1)
(INSTANCE_NAME = GOBO1B)
)
)
GOBO1A =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO1)
(INSTANCE_NAME = GOBO1A)
)
)
GOBO1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO1)
)
)
#下面是幾個重要的用於設置local_listener 以及remote_listener參數的定義信息
LISTENER_BO2DB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
)
LISTENER_BO2DBP =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
)
LISTENER_BO2DBS =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
)
#Author: Robinson cheng
#Blog : http://blog.csdn.net/robinson_0612
4、節點bo2dbp上監聽器的信息
#可以看出只有實例 GOBO1A 注冊到監聽器 LISTENER_BO2DBP
oracle@bo2dbp:/u01/oracle/db/network/admin> lsnrctl status LISTENER_BO2DBP
LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-SEP-2012 17:12:04
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bo2dbp-vip.2gotrade.com)(PORT=1521)(IP=FIRST)))
STATUS of the LISTENER
------------------------
..............
Listener Parameter File /u01/oracle/db/network/admin/listener.ora
Listener Log File /u01/oracle/db/network/log/listener_bo2dbp.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO1" has 1 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Service "GOBO1XDB" has 1 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Service "GOBO1_XPT" has 1 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
5、節點bo2dbs上的listener.ora
oracle@bo2dbs:/u01/oracle/db/network/admin> more listener.ora
# listener.ora.bo2dbs Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbs
# Generated by Oracle configuration tools.
LISTENER_BO2DBS =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.52)(PORT = 1521)(IP = FIRST))
)
)
SID_LIST_LISTENER_BO2DBS =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/oracle/db)
(PROGRAM = extproc)
)
)
#由於節點bo2dbs上的tnsnames.ora與節點bo2dbp內容相同,不再列出
6、節點bo2dbs上的監聽器狀態
#同樣可以看到只有一個 instance,即GOBO1B注冊到了監聽器 LISTENER_BO2DBS
oracle@bo2dbs:/u01/oracle/db/network/admin> lsnrctl status LISTENER_BO2DBS
LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-SEP-2012 17:12:31
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bo2dbs-vip.2gotrade.com)(PORT=1521)(IP=FIRST)))
STATUS of the LISTENER
------------------------
.......................
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO1" has 1 instance(s).
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1XDB" has 1 instance(s).
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1_XPT" has 1 instance(s).
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
#通過上面的觀察可知,當前的兩個實例都是在各自所在主機上的監聽器進行了注冊。
二、設置remote_listener參數
1、在節點bo2dbp上執行下列的命令
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string GOBO1A
-->為節點bo2dbp設置遠程監聽器
-->這意味着可以將實例GOBO1A上提供的服務可以注冊到LISTENER_BO2DBS定義的監聽器中
SQL> alter system set remote_listener='LISTENER_BO2DBS' sid='GOBO1A';
System altered.
-->執行 register 實現注冊
SQL> alter system register;
System altered.
#再次查看節點bo2dbs監聽器狀態,實例GOBO1A已經注冊到bo2dbs節點
oracle@bo2dbs:/u01/oracle/db/network/admin> lsnrctl status LISTENER_BO2DBS
LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-SEP-2012 17:23:03
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bo2dbs-vip.2gotrade.com)(PORT=1521)(IP=FIRST)))
STATUS of the LISTENER
------------------------
..............
Listener Parameter File /u01/oracle/db/network/admin/listener.ora
Listener Log File /u01/oracle/db/network/log/listener_bo2dbs.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO1" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1XDB" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1_XPT" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
2、節點bo2dbs上設置local_listener,remote_listener
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
GOBO1B
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
remote_listener string
-->按照節點bo2dbp上的操作方式將節點bo2dbs上的remote_listener只向節點bo2dbp
SQL> alter system set remote_listener='LISTENER_BO2DBP' sid='GOBO1B';
System altered.
SQL> alter system register;
System altered.
-->在bo2dbp節點上也可以看到實例GOBO1B也注冊到了第一個節點上
oracle@bo2dbp:/u01/oracle/db/network/admin> lsnrctl status LISTENER_BO2DBP
LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 25-SEP-2012 17:32:19
Copyright (c) 1991, 2006, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=bo2dbp-vip.2gotrade.com)(PORT=1521)(IP=FIRST)))
STATUS of the LISTENER
------------------------
............
Listener Parameter File /u01/oracle/db/network/admin/listener.ora
Listener Log File /u01/oracle/db/network/log/listener_bo2dbp.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "+ASM_XPT" has 1 instance(s).
Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO1" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1XDB" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "GOBO1_XPT" has 2 instance(s).
Instance "GOBO1A", status READY, has 1 handler(s) for this service...
Instance "GOBO1B", status READY, has 1 handler(s) for this service...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
三、總結(缺省1521端口)
1、RAC 監聽的配置當使用缺省的監聽器時則監聽器名字為 LISTENER_${NODE}
2、如未設置remote_listener,本地實例只在本地的監聽器注冊。而當設置了正確的remote_listener,則本地實例可以實現遠程注冊
3、缺省情況下,PMON進程自動將instance_name和service_names等信息注冊到已啟動的缺省偵聽器
4、可以使用alter system register 實現快速注冊
Important:
Do not set the GLOBAL_DBNAME parameter in the SID_LIST_listener_name section of the listener.ora.
A statically configured global database name disables connect-time failover.
四、更多參考
有關基於用戶管理的備份和備份恢復的概念請參考
Oracle 冷備份
Oracle 熱備份
Oracle 備份恢復概念
Oracle 實例恢復
Oracle 基於用戶管理恢復的處理(詳細描述了介質恢復及其處理)
SYSTEM 表空間管理及備份恢復
SYSAUX表空間管理及恢復
Oracle 基於備份控制文件的恢復(unsing backup controlfile)
有關RMAN的備份恢復與管理請參考
RMAN 概述及其體系結構
RMAN 配置、監控與管理
RMAN 備份詳解
RMAN 還原與恢復
RMAN catalog 的創建和使用
基於catalog 創建RMAN存儲腳本
基於catalog 的RMAN 備份與恢復
RMAN 備份路徑困惑(使用plus archivelog時)
有關ORACLE體系結構請參考
Oracle 表空間與數據文件
Oracle 密碼文件
Oracle 參數文件
Oracle 聯機重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 歸檔日志
Oracle 回滾(ROLLBACK)和撤銷(UNDO)
Oracle 數據庫實例啟動關閉過程
Oracle 10g SGA 的自動化管理
Oracle 實例和Oracle數據庫(Oracle體系結構)
————————————————
版權聲明:本文為CSDN博主「Leshami」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/leshami/article/details/8020800