Oracle單實例配置多監聽
一、前言
有時候我們項目中需要使用Oracle數據庫,同時要需要不同的數據源,而Oracle不像Mysql那樣直接建個庫即可,Oracle是以賬號為單位,可以理解為一個賬號就是一個庫,但實際有區別,項目中數據庫連接數據源往往默認是安裝Oracle時生成的ORCL(目前只有一個ORCL實例,稱為“單實例”),這時候有人就想,那創建一個賬號不就行了,的確是需要創建賬號,但是本身數據源還是ORCL這一點始終沒有變,在Oracle數據庫中我們創建一個賬號實現了相當於創建了一個庫,但對於項目來說,還是一個ORCL數據源,無非就是賬號和密碼變了,對於他來說這一點是不行的,所以可以使用一下方法解決他
方案一
創建一個新實例,並將它注冊到監聽中即可(本篇文章暫不介紹,可自行百度)
方案二(本篇)
也就是標題說的,單個實例,配置多個監聽,此時,對內實際還是使用同一個實例,對外看似是不同數據源和不同賬號,實際上是同一實例,不同賬號(可以理解為Mysql的不同庫)罷了
二、單實例配置多監聽
主要修改兩個配置文件即可 在ORACLE_HOME目錄下的/network/admin/目錄下
listener.ora和tnsnames.ora文件,卻有注釋,可根據自身實際情況進行修改
listener.ora
#這是名稱為LISTENER的監聽器靜態注冊的服務
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
#服務名 多個監聽不能配置相同,否則連接進來不知道具體在那個服務上
(GLOBAL_DBNAME = snorcl11g)
#oracle實例名稱
(SID_NAME = snorcl11g)
(ORACLE_HOME = /oracle/home)
)
)
#LISTENER2監聽器監聽的靜態實例注冊
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl11g)
#oracle實例名稱
(SID_NAME = snorcl11g)
(ORACLE_HOME = /oracle/home)
)
)
#這是名稱為LISTENER的監聽器 默認
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
)
)
#LISTENER2的監聽器
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1522))
)
)
#oracle安裝目錄
ADR_BASE_LISTENER = /oracle
tnsnames.ora
#SNORCL11G 隨便起,建議見名知意
#snorcl11g是實例名
#表示使用TCP協議,連接IP地址為127.0.0.1,端口號為1521的數據庫主機上服務名為snorcl11g的數據庫
#如果有多個監聽,可以手動添加
SNORCL11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = snorcl11g)
)
)
LISTENER2_SNORCL11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = snorcl11g)
)
)
至此配置就結束啦,我們來啟動試試
啟動監聽服務
# 默認啟動listener監聽
# stop 停止
# status 監聽狀態
lsnrctl start
# 啟動新監聽LISTENER2
lsnrctl start listener2
可以看到默認配置的監聽啟動成功了,對外連接使用SNORCL11G,監聽實例為SNORCL11G,監聽端口1521
可以看到我們配置的第二個監聽啟動成功了,對外連接使用ORCL11G,監聽實例為SNORCL11G,監聽端口1522
# 測試實例是否被監聽
tnsping snorcl11g
此處的端口號為默認的,可忽略,只要看到OK,就表示該實例已監聽到了
這下可以通過遠程連接根據監聽的內容去嘗試連接啦