[26ai] ConnStr Tool
![[26ai] ConnStr Tool](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F8316641c-ac22-45c3-a59d-4a8a7dfd9de5.png&w=3840&q=75)
Ingeniero informático, Oracle ACE, DBA y Arquitecto OCI, con más de 15 años de experiencia en plataformas Oracle. Certificado en OCI Certified Architect Professional y OCI Migration and Integration Certified Professional.
If you prefer to read in Spanish Spanish version.
Today, let's talk about the new feature in 26ai: the ConnStr tool.
The tool is a command-line utility that it works in order to display the connections for every service in Easy Connect, JDBC and Python formats, with the option to include this information in tnsnames.
Another point, when we use the new tool, the listener should be up, otherwise, it will fail.
So, let's get down to business!
Let's check the listener:
[oracle@~]$ lsnrctl status
LSNRCTL for Linux: Version 23.26.0.0.0 - for Oracle Cloud and Engineered Systems on 25-MAR-2026 14:28:21
Alias LISTENER
Version TNSLSNR for Linux: Version 23.26.1.0.0 - Production
Start Date 09-MAR-2026 17:13:58
Uptime 15 days 21 hr. 14 min. 23 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/23.0.0.0/grid/network/admin/listener.ora
Listener Log File /u01/app/grid/diag/tnslsnr/l23ai/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.X.X)(PORT=1521)))
Services Summary...
Service "+APX" has 1 instance(s).
Instance "+APX1", status READY, has 1 handler(s) for this service...
Service "+ASM" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_DATA" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "+ASM_RECO" has 1 instance(s).
Instance "+ASM1", status READY, has 1 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 1 handler(s) for this service...
Service "XXXXX.paas.oracle.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.paas.oracle.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.paas.oracle.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
Service "XXXXX.XXXXX.XXXXX.oraclevcn.com" has 1 instance(s).
Instance "DB23ai", status READY, has 2 handler(s) for this service...
The command completed successfully
All right, the listener is up.
Let's execute the new command ConnStr in order to see what information we can get:
[oracle@ ~]$ connstr
Using Listener: LISTENER with Oracle Home: /u01/app/oracle/product/23.0.0.0/dbhome_1
Service Name: XXXXXXXXX.paas.oracle.com
Connection String: X.X.X.X:1521/XXXXXXXXX.paas.oracle.com
Service Name: XXXXXXX.XXXXXX.vcn23ai.oraclevcn.com
Connection String: X.X.X.X:1521/XXXXXX.XXXXXXXX.vcn23ai.oraclevcn.com
...
...
Connection strings can be used to connect to the specified service name.
For SQL*Plus you can use:
SQL> connect username@X.X.X.X:1521/XXXXX.paas.oracle.com
For Python you can use:
connection = oracledb.connect(user="username", password="password", dsn="X.X.X.X:1521/XXXXXX.paas.oracle.com")
For JDBC Thin you can use: OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@X.X.X.X:1521/XXXXXX.paas.oracle.com");
ods.setUser("username"); ods.setPassword("password");
Connection conn = ods.getConnection();
Write connect strings to tnsnames.ora (Y/N)? (Default: N):
Awesome! connstr displays the connection strings for Easy Connect, JDBC, and Python.
In the last line, connstr give us the possibility to include the connection string in the tnsnames.ora!
In this case, we used the command directly because we have an single listenner. In case we have several listeners, we can use the following parameter in order to filter by listener "connstr -L <name_listenner>".
Other useful utitlities are as follows:
- List the available listeners:
[oracle@~]$ connstr -e
PROTOCOL PORT HOST
tcp 1521 X.X.X.X
- List the available services:
[oracle@~]$ connstr -s
XXXXXXXX.paas.oracle.com
XXXXXXXX.paas.oracle.com
XXXXXXXX.XXXXXXXX.vcn23ai.oraclevcn.com
pdb_david.XXXXXXXX.vcn23ai.oraclevcn.com
+APX
+ASM
+ASM_DATA
+ASM_RECO
XXXXXXXX.XXXXXXXX.vcn23ai.oraclevcn.com
XXXXXXXX.paas.oracle.com
XXXXXXXX.XXXXXXXX.vcn23ai.oraclevcn.com
XXXXXXXX.XXXXXXXX.vcn23ai.oraclevcn.com
- Getting the connection string in JDBC format filtered by service.
[oracle@ ~]$ connstr -j pdb_david jdbc:oracle:thin:@X.X.X.X:1521/XXXXXXXX.paas.oracle.com
- Getting the connection string filtered by service.
[oracle@~]$ connstr -d pdb_david
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.X.X)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XXXXXXXX.paas.oracle.com)))
- Getting the connection string in Easy Connect format filtered by service.
[oracle@~]$ connstr -z pdb_david
X.X.X.X:1521/XXXXXXXX.paas.oracle.com
Looking forward to seeing you in the next article :)
![[26ai] JOIN_TO_ME](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F49867547-f920-47a6-b11f-f5db511bcc73.png&w=3840&q=75)
![[26ai] Cleanup of Obsolete PL/SQL Objects](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F64ada612-0048-411c-b9df-61b8825af6e7.png&w=3840&q=75)
![[26ai] Hybrid Read-Only Mode PDB](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2F23e8f92e-f89b-4746-930e-98156e3a1ec4.png&w=3840&q=75)
![[26ai] ALERT_LOG_MAX_SIZE](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F65605419d28f19cc44df7ef1%2Fdad5c53e-425c-4e82-9bbb-e0ccec6e9a4e.jpg&w=3840&q=75)