環(huán)境說(shuō)明:
OS:Redhat 7.5
DB:Oracle 11.2.0.4.0 單實(shí)例
問(wèn)題:
測(cè)試環(huán)境數(shù)據(jù)庫(kù)端口使用默認(rèn)端口1521,嘗試修改默認(rèn)端口為8821,修改成功后進(jìn)行驗(yàn)證。
發(fā)現(xiàn)通過(guò)8821可以登錄到數(shù)據(jù)庫(kù)了,搞定,收工?
sqlplus cjc/******@10.0.0.10:8821/cjcdb
在驗(yàn)證下1521是不是連接不上了,居然還能連接?
sqlplus cjc/******@10.0.0.10:1521/cjcdb
操作過(guò)程如下:
1.停止監(jiān)聽(tīng)
lsnrctl stop
2.修改監(jiān)聽(tīng)文件listener.ora
cd $ORACLE_HOME/network/admin
cp listener.ora listener.ora.bak
vi listener.ora
1 2 3 4 5 | LISTENER =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
(ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = myport))
)
|
3.修改tnsnames.ora文件
cd $ORACLE_HOME/network/admin
cp tnsnames.ora tnsnames.ora.bak
vi tnsnames.ora
(1)修改對(duì)應(yīng)端口號(hào)
(2)文件末尾添加如下內(nèi)容
1 2 3 4 | MYLISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myserver )(PORT = myport))
)
|
4.修改LOCAL_LISTENER參數(shù)
show parameter local
ALTER SYSTEM SET LOCAL_LISTENER='MYLISTENER' SCOPE=BOTH;
5.啟動(dòng)監(jiān)聽(tīng)文件
lsnrctl start
6.驗(yàn)證
sqlplus cjc/******@10.0.0.10:8821/cjcdb
成功!
sqlplus cjc/******@10.0.0.10:1521/cjcdb
成功?
sqlplus cjc/******@10.0.0.10:61521/cjcdb
隨便寫(xiě)一個(gè)端口號(hào),失敗
問(wèn)題排查:
為什么改完端口了通過(guò)1521還能遠(yuǎn)程登錄?
停止監(jiān)聽(tīng)
lsnrctl stop
測(cè)試,通過(guò)1521還能遠(yuǎn)程登錄
sqlplus cjc/******@10.0.0.10:1521/cjcdb
難道是配置了多個(gè)監(jiān)聽(tīng)?
全盤(pán)搜索,只有一個(gè)listener.ora,而且配置沒(méi)問(wèn)題
#find / -name listener.ora
檢查1521端口對(duì)應(yīng)的進(jìn)程
lsof -i:1521
找到1521對(duì)應(yīng)進(jìn)程pid
查看進(jìn)程信息
ps -ef|grep pid
xxx/bin/tnslsnr listener -inherit
已經(jīng)停了監(jiān)聽(tīng),為何還有監(jiān)聽(tīng)進(jìn)程
手動(dòng)殺掉這個(gè)進(jìn)程,重啟監(jiān)聽(tīng)恢復(fù)正常。
問(wèn)題原因:
Metalink上沒(méi)有找到對(duì)應(yīng)版本的問(wèn)題,
和Bug 4518443類似,但是版本對(duì)不上,這個(gè)bug描述如下:
The listener process can hang under load while spawning a process.
The last process the listener spawned will have a stack which
includes a mutex lock call in ons_atfork_prepare().
如何檢查你的數(shù)據(jù)庫(kù)是否有這個(gè)問(wèn)題?
ps -ef|grep -i tnslsnr|grep -v grep
如果有2個(gè)進(jìn)程,說(shuō)明可能會(huì)有類似的問(wèn)題。
解決方案:
臨時(shí)解決方案:
殺掉多余的進(jìn)程。
永久解決方案:
單實(shí)例下,將SUBSCRIBE_FOR_NODE_DOWN_EVENT_<listener_name>=OFF配置到監(jiān)聽(tīng)文件匯總。
或者打補(bǔ)丁。
其他:如何修改RAC環(huán)境下默認(rèn)監(jiān)聽(tīng)端口號(hào)?
1.查看當(dāng)前監(jiān)聽(tīng)配置
srvctl config listener
2.修改ocr中記錄的端口號(hào)
srvctl modify listener -l LISTENER -p "TCP:<new-listener-port>"
3.修改scan_listener端口號(hào)
srvctl modify scan_listener -p <new-scan-port>
4.修改LOCAL_LISTENER
alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<Host-name>)(PORT=<new-port-number>))))' scope=both sid='[<your-chosen-instance> | * ] '
5.修改REMOTE_LISTENER
6.重啟監(jiān)聽(tīng)
參考:
Changing Default Listener Port Number (Doc ID 359277.1)
Changing Listener Ports On RAC/EXADATA (Doc ID 1473035.1)
Bug 4518443 - Listener hang under load (Doc ID 4518443.8)