Are you running RAC/GI with role separation? You’re tired of constantly switching between “oracle” and “grid” users or you don’t have access to “grid” at all?
This little trick saves me lots of time whenever I need to check the status or services details of a listener running as “grid”. I hope it serves you as well as it does serve me 🙂
This gives me the listener names running on the connected node:
$ ps -ef|grep tnslsnr grid 3468 1 0 21:50 ? 00:00:00 /u01/app/gi12201/bin/tnslsnr ASMNET1LSNR_ASM -no_crs_notify -inherit grid 3643 1 0 21:50 ? 00:00:00 /u01/app/gi12201/bin/tnslsnr LISTENER -no_crs_notify -inherit grid 3646 1 0 21:50 ? 00:00:00 /u01/app/gi12201/bin/tnslsnr MGMTLSNR -no_crs_notify -inherit grid 3652 1 0 21:50 ? 00:00:00 /u01/app/gi12201/bin/tnslsnr LISTENER_SCAN3 -no_crs_notify -inherit grid 3665 1 0 21:50 ? 00:00:00 /u01/app/gi12201/bin/tnslsnr LISTENER_SCAN2 -no_crs_notify -inherit
By default, every listener in a GI/RAC setup has an IPC end-point with the KEY being the same as the listener name. For instance:
Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.56.55)(PORT=1523))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.55)(PORT=1521)))
So you can simply run lsnrctl with the connect descriptor on the command line (as oracle):
$ lsnrctl status "(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))" LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 17-MAY-2018 22:12:49 Copyright (c) 1991, 2016, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) STATUS of the LISTENER ------------------------ Alias LISTENER_SCAN1 Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production Start Date 17-MAY-2018 21:52:41 Uptime 0 days 0 hr. 20 min. 8 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/gi12201/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/ol7122rac2/listener_scan1/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.56.55)(PORT=1523))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.55)(PORT=1521))) Services Summary... Service "65388e79ee096b69e0533238a8c08c32.localdomain" has 2 instance(s). Instance "RAC11", status READY, has 2 handler(s) for this service... Instance "RAC12", status READY, has 2 handler(s) for this service... Service "RAC1.localdomain" has 2 instance(s). Instance "RAC11", status READY, has 2 handler(s) for this service... Instance "RAC12", status READY, has 2 handler(s) for this service... Service "pdbrac1.localdomain" has 2 instance(s). Instance "RAC11", status READY, has 2 handler(s) for this service... Instance "RAC12", status READY, has 2 handler(s) for this service... The command completed successfully
Yes, this only works for listeners that run on the node you’re connected to. You can’t do it across nodes, but I still find it extremely useful.
For your convenience, you can put the connect descriptors in the TNSNAMES.ORA sourced by “oracle”:
$ cat $TNS_ADMIN/tnsnames.ora listener_scan1=(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) $ lsnrctl services listener_scan1 LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 17-MAY-2018 22:30:10 Copyright (c) 1991, 2016, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) Services Summary... Service "65388e79ee096b69e0533238a8c08c32.localdomain" has 2 instance(s). Instance "RAC11", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.56.53)(PORT=1523)) ...
It also works within the lsnrctl command line:
$ lsnrctl LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 17-MAY-2018 22:39:58 Copyright (c) 1991, 2016, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> set current_listener (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) Current Listener is (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) LSNRCTL> services Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1))) Services Summary... Service "65388e79ee096b69e0533238a8c08c32.localdomain" has 2 instance(s). Instance "RAC11", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.56.53)(PORT=1523)) "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.53)(PORT=1521)) ...
Any comments? I’m listening…