TCPS configuration: ora.LISTENER.lsnr is in INTERMEDIATE state
August 18, 2020 Leave a comment
Problem
After configuring TCPS endpoint in listener configuration using the following way:
In srvctl:
[grid@rac1 ~]$ srvctl modify listener -p "TCP:1522/TCPS:1524"
In listener.ora file:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1.example.com)(PORT = 1522))
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
(ADDRESS = (PROTOCOL = TCPS)(HOST =rac1.example.com)(PORT = 1524))
))
So from the above, we see that I’ve configured as static endpoint registration as well as dynamic.
Restarted listener and saw that ora.LISTENER.lsnr resource left in the INTERMEDIATE state:
# srvctl stop listener;srvctl start listener
# crsctl status res -t|head
...
ora.LISTENER.lsnr
ONLINE INTERMEDIATE rac1 Not All Endpoints Registered,STABLE
ONLINE INTERMEDIATE rac2 Not All Endpoints Registered,STABLE
Troubelshooting
After checking listener.log file, found the following messages:
Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=rac1.example.com)(PORT=1524)))
Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.example.com)(PORT=1522)))
Dynamic address is already listened on (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rac1.example.com)(PORT=1522)))
So, due to the static registration, the dynamic failed and Agent thought it could not register endpoints, which left resource in the INTERMEDIATE state (which should not be normal I think)
I tried to disable dynamic registration by setting ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER
to OFF
in listener.ora
file, but after modifying and restarting listener using srvctl Oracle Agent changed the value back to ON
. I could not find a way to disable it so far.
The second option was to remove static entries from listener.ora file and leave only dynamic registration, but after that, the important endpoint on TCPS/1524 was not registered:
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.1.11)(PORT=1524)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.1)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=1522)))
The endpoint that I want is 192.168.1.1:1524 and not 192.168.1.11:1524
Workaround
Configured dynamic registration in srvctl for TCP/1522 port only:
[grid@rac1 ~]$ srvctl modify listener -p "TCP:1522"
Configured static registration in listener.ora file for TCPS/1524:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = LISTENER))
(ADDRESS = (PROTOCOL = TCPS)(HOST =rac1.example.com)(PORT = 1524))
)
)
After restarting listener, the status became ONLINE:
ora.LISTENER.lsnr
ONLINE ONLINE rac1 STABLE
ONLINE ONLINE rac2 STABLE
Another workaround that my colleage found is the following:
Set ENDPOINTS to null in crsctl (in srvctl it’s not possible):
# crsctl modify resource ora.LISTENER.lsnr -attr "ENDPOINTS=" –unsupported
And register all endpoints statically in listener.ora. Using that way, no dynamic registration is triggered, only static endpoints will be visible.
Please comment bellow, if you have a better way. Thank you!