現(xiàn)象:
客戶端連接報(bào)錯(cuò)ora-12505,查詢集群資源發(fā)現(xiàn)一個(gè)listener節(jié)點(diǎn)報(bào)錯(cuò),not all endpoints registered。這個(gè)錯(cuò)誤一般是oracle用戶啟動(dòng)監(jiān)聽導(dǎo)致,一般是grid來啟動(dòng),但是排查發(fā)現(xiàn)不是這種情況。


1.oracle用戶查看監(jiān)聽發(fā)現(xiàn)是mgmtlsnr的監(jiān)聽,而不是listener
lsnrctl status

2.查看日志
tail -100f /u01/app/grid/diag/tnslsnr/bgqdb01/listener/trace/listener.log
報(bào)錯(cuò)信息:可以看出應(yīng)該是啟動(dòng)listener但是和已經(jīng)存在的進(jìn)程導(dǎo)致的地址沖突。
Error listening on: (ADDRESS=(PROTOCOL=TCP)(RATE_LIMIT=YES)(HOST=x.x.104.42)(PORT=1521)(IP=FIRST))
Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.101.86)(PORT=1521)))
02-SEP-2025 12:55:09 * service_register * LsnrAgt * 12542
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
Linux Error: 98: Address already in use3.重啟監(jiān)聽和重啟crs分別觀察
srvctl stop listener
srvctl stop scan_listener
srvctl start listener
srvctl start scan_listener
/u01/app/12.1.0/grid/bin/crsctl stop crs
/u01/app/12.1.0/grid/bin/crsctl start crs
重啟后還是報(bào)錯(cuò),錯(cuò)誤信息,intermediate,not all endpoints registered

4.停止監(jiān)聽后查看grid和oracle用戶的監(jiān)聽狀態(tài)
srvctl stop listener
su - grid
lsnrctl status grid用戶的監(jiān)聽停止

su - oracle
lsnrctl status oracle用戶發(fā)現(xiàn)還是有監(jiān)聽存在,并且監(jiān)聽的別名是MGMTLSNR

正常的狀態(tài)應(yīng)該是如下,提示沒有監(jiān)聽,但是現(xiàn)在注冊(cè)到了mgmtlsnr監(jiān)聽

5.核對(duì)監(jiān)聽配置文件 兩個(gè)監(jiān)聽的都是1521端口
srvctl config listener -l MGMTLSNR
srvctl config listener -l LISTENER

6.重新配置監(jiān)聽
su - grid
export DISPLAY=x.x.9.219:0.0
netca
reconfiguration的時(shí)候會(huì)出現(xiàn)端口被占用。但是這上面就一個(gè)數(shù)據(jù)庫實(shí)例,初步懷疑是mgmtlsnr導(dǎo)致的。
Use another port number.Pont 1521 provided for this listener is already in use on nodes of Oracle clusterware.Re-enter different information.

7.mgmtlsnr介紹
oracle12c及之后的版本,是一個(gè)引入的管理監(jiān)聽器,專門用于oracle集群組件之間的通信,通常運(yùn)行在1521端口。處理集群管理相關(guān)的連接,不用于常規(guī)數(shù)據(jù)庫連接。
用于業(yè)務(wù)的數(shù)據(jù)庫連接的監(jiān)聽器是lsnrctl,也是運(yùn)行在1521端口,但是綁定的ip地址不同。
mgmtlsnr:私有網(wǎng)絡(luò)ip,運(yùn)行在grid下,只在一個(gè)節(jié)點(diǎn)上運(yùn)行。
listener:公有網(wǎng)絡(luò)ip,運(yùn)行在grid下,在rac兩個(gè)節(jié)點(diǎn)上運(yùn)行。
8.問題剖析
數(shù)據(jù)庫監(jiān)聽器listener在一個(gè)節(jié)點(diǎn)上無法啟動(dòng),因?yàn)橐壎üW(wǎng)的ip104.42的1521端口被占用。占用的就是mgmtlsnr管理監(jiān)聽器。
問題的節(jié)點(diǎn)分別用grid和oracle用戶執(zhí)行,發(fā)現(xiàn)104.42業(yè)務(wù)ip出現(xiàn)在了mgmtlsnr里面,同時(shí)這個(gè)地址應(yīng)該也要在listener中啟動(dòng),但是同一個(gè)地址不可能綁定兩個(gè)監(jiān)聽,所以導(dǎo)致了地址沖突。


9.查看1521端口
netstat -tulnp | grep 1521 發(fā)現(xiàn)104.42已經(jīng)被mgmtlsnr監(jiān)聽進(jìn)程占用,listener監(jiān)聽無法綁定到104.42的1521端口。

10.查看集群網(wǎng)絡(luò)
oifcfg getif 發(fā)現(xiàn)有2個(gè)私網(wǎng)地址

11.最終處理
修改listener文件,之前沒有具體的host地址;手動(dòng)指定監(jiān)聽的ip地址,排除掉104.42。
MGMTLSNR =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = MGMTLSNR))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.7)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = xx.254.17.31)(PORT = 1521))
)
)srvctl stop listener
ps -ef|grep tns
kill -9 xx 殺掉mgmtlsnr進(jìn)程

srvctl start listener重啟
發(fā)現(xiàn)兩個(gè)監(jiān)聽都正常了。





