{"id":44747,"date":"2026-05-22T15:34:46","date_gmt":"2026-05-22T13:34:46","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=44747"},"modified":"2026-05-22T15:34:48","modified_gmt":"2026-05-22T13:34:48","slug":"oracle-database-26ai-client-and-sqlnet-expire_time","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/","title":{"rendered":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME"},"content":{"rendered":"\n<p>We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, I would like to share with you the problem and then the tests that have been performed helping us to conclude to a solution.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3>Environment and problem description<\/h3>\n\n\n\n<p>At our customer environment, client connection run from the HelperVM does not establish database connections directly to the database listener. The connection goes through the Network Load Balancer, so called NLB, and the Oracle Connection Manager, so called CMAN.<\/p>\n\n\n\n<p>The diagram below describes the database connection establishment process.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-1024x537.jpg\" alt=\"\" class=\"wp-image-44751\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-1024x537.jpg 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-300x157.jpg 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-768x403.jpg 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram.jpg 1396w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>This is how it works.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 &#8211; Client seeks for connection details (ideally, get the connection details from Oracle Directory Service)<\/li>\n\n\n\n<li>2 &#8211; Client connects to Network Load Balancer<\/li>\n\n\n\n<li>3 &#8211; Network Load Balancer &#8220;forwards&#8221; the request to Oracle Connection MANager using Virtual IP<\/li>\n\n\n\n<li>4 &#8211; Oracle Connection MANager acts as a rule-based firewall and ensure the database target service is running on the &#8220;white listed targets (next_hop)<\/li>\n\n\n\n<li>5 &#8211; Oracle Database establish connectivity upon credential validate (Oracle listener acts in between). The listener hands the connection over to the Oracle CMAN gateway process, which passes data back and forth between the client and the db-server and collects statistics.<\/li>\n<\/ul>\n\n\n\n<p>We could observed per reverse engineering&nbsp;&nbsp;technique that the TCP connection established between the Oracle client and Oracle CMAN works upon Network Load Balancer Virtual IP.<\/p>\n\n\n\n<p>The Network Load Balancer needs for Session persistence &#8220;statefullnes&#8221; to be enabled. This means that once the connection is established, the NLB &#8220;remembers&#8221; established connections and fails them over in case of planned downtime.<\/p>\n\n\n\n<p>We have been facing some broken connectivity issue. Checking\u00a0Linux socket connection with linux ss command (# ss -nop) we could see TCP connection hungs between client and NLB virtual IP (CNAME DNS entry). On CMAN and DB-Server side the connection were already cleaned up as per Dead Connection Detection configuration. We can see in the diagram that EXPIRE_TIME is setup with a value of 10 minutes on the CMAN side and the listener configuration from the VM Cluster database.<\/p>\n\n\n\n<p>The connection was still opened on the client side because:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The client was still waiting on a result which would never come<\/li>\n\n\n\n<li>TCP connection to the NLB Virtual IP was still existing albeit closed with the CMAN and database listener<\/li>\n\n\n\n<li>TCP connection to the NLB would remain alive for days<\/li>\n<\/ul>\n\n\n\n<p>The problem is that by default Oracle client does not enable TCP Keepalive, which is an expected behavior. Oracle expects the keepalive to be set on the server side. The \u201cDead Connection Detection\u201d will then be enforced for all clients.<\/p>\n\n\n\n<p>TCP Keepalive should then be managed in our case on the client side. And we are currently running Oracle 19c Client.<\/p>\n\n\n\n<h3>EXPIRE_TIME handled on Oracle 19c Client<\/h3>\n\n\n\n<p>Oracle 19c\u00a0client does not come with SQLNET.EXPIRE_TIME aka &#8220;Oracle dead connection detection&#8221;, unless hacked over connection string hidden (unsupported) parameter ENABLE_BROKEN.\u00a0<\/p>\n\n\n\n<p>See following blog from a one of my former colleagues: <\/p>\n\n\n\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/sqlnet-expire_time-and-enablebroken\">sqlnet-expire_time and enablebroken<\/a><\/p>\n\n\n\n<p>And what about Oracle 26ai Client? Let&#8217;s do some test&#8230;<\/p>\n\n\n\n<h3>Installation of Oracle 26ai Client<\/h3>\n\n\n\n<p>On the lab, I will use the VM called bastion to act as the client. The bastion has already an Oracle 19c Client installed. I&#8217;m going to installed new Oracle 26ai Client on it.<\/p>\n\n\n\n<p>First we need to download the client version, which can be done from the following website:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.oracle.com\/database\/technologies\/oracle26ai-linux-downloads.html\">https:\/\/www.oracle.com\/database\/technologies\/oracle26ai-linux-downloads.html<\/a><\/p>\n\n\n\n<p>I will install Oracle 26ai Client version in \/opt\/oracle.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4]\">\n[root@bastion oracle]# pwd\n\/opt\/oracle\n\n[root@bastion oracle]# ls -ld client*\ndrwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c\ndrwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c\n[root@bastion oracle]#\n<\/pre>\n<\/br>\n\n\n\n\n<p>I will first unzip the downloaded oracle zip file.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4]\">\n[oracle@bastion oracle]$ pwd\n\/opt\/oracle\n\n[oracle@bastion oracle]$ unzip -q LINUX.X64_2326100_client.zip\n<\/pre>\n<\/br>\n\n\n\n<p>I will then rename the client installation directory:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,6,9]\">\n[oracle@bastion oracle]$ ls -ld client*\ndrwxr-xr-x.  5 oracle oinstall   90 Jan 17 13:59 client\ndrwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c\ndrwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c\n\n[oracle@bastion oracle]$ mv client client26ai\n[oracle@bastion oracle]$\n\n[oracle@bastion oracle]$ ls -ld client*\ndrwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c\ndrwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c\ndrwxr-xr-x.  5 oracle oinstall   90 Jan 17 13:59 client26ai\n[oracle@bastion oracle]$\n<\/pre>\n<\/br>\n\n\n\n<p>I will prepare the response file for the command line installation.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5]\">\n[oracle@bastion client26ai]$ cp -p response\/client_install.rsp response\/client_install_custom.rsp\n\n[oracle@bastion client26ai]$ vi response\/client_install_custom.rsp\n\n[oracle@bastion client26ai]$ diff response\/client_install.rsp response\/client_install_custom.rsp\n22c22\n UNIX_GROUP_NAME=oinstall\n26c26\n INVENTORY_LOCATION=\/opt\/oracle\/oraInventory\n30c30\n ORACLE_HOME=\/opt\/oracle\/client26ai\n34c34\n ORACLE_BASE=\/opt\/oracle\n48c48\n oracle.install.client.installType=Administrator\n[oracle@bastion client26ai]$\n<\/pre>\n<\/br>\n\n\n\n<p>And I will run the Oracle 26ai Client installation.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,12]\">\n[oracle@bastion client26ai]$ pwd\n\/opt\/oracle\/client26ai\n\n[oracle@bastion client26ai]$ ls -ltrh\ntotal 24K\n-rwxrwx---.  1 oracle oinstall  500 Feb  6  2013 welcome.html\n-rwxr-xr-x.  1 oracle oinstall 8.7K Jan 17 12:38 runInstaller\ndrwxr-xr-x.  4 oracle oinstall 4.0K Jan 17 12:38 install\ndrwxr-xr-x. 15 oracle oinstall 4.0K Jan 17 13:37 stage\ndrwxr-xr-x.  2 oracle oinstall   82 May 21 16:13 response\n\n[oracle@bastion client26ai]$ .\/runInstaller -silent -responseFile \/opt\/oracle\/client26ai\/response\/client_install_custom.rsp\nStarting Oracle Universal Installer...\n\nChecking Temp space: must be greater than 415 MB.   Actual 5025 MB    Passed\nChecking swap space: must be greater than 150 MB.   Actual 4095 MB    Passed\nPreparing to launch Oracle Universal Installer from \/tmp\/OraInstall2026-05-21_04-16-17PM. Please wait ... [WARNING] [INS-32016] The selected Oracle home contains directories or files.\n   ACTION: To start with an empty Oracle home, either remove its contents or specify a different location.\n*********************************************\nPackage: compat-openssl10-1.0.2 (x86_64): This is a prerequisite condition to test whether the package \"compat-openssl10-1.0.2 (x86_64)\" is available on the system.\nSeverity: IGNORABLE\nOverall status: VERIFICATION_FAILED\nError message: PRVF-7532 : Package \"compat-openssl10(x86_64)-1.0.2\" is missing on node \"bastion\"\nCause:  A required package is either not installed or, if the package is a kernel module, is not loaded on the specified node.\nAction:  Ensure that the required package is installed and available.\n-----------------------------------------------\n[WARNING] [INS-13014] Target environment does not meet some optional requirements.\n   CAUSE: Some of the optional prerequisites are not met. See logs for details. \/opt\/oraInventory\/logs\/installActions2026-05-21_04-16-17PM.log.\n   ACTION: Identify the list of failed prerequisite checks from the log: \/opt\/oraInventory\/logs\/installActions2026-05-21_04-16-17PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.\nThe response file for this session can be found at:\n \/opt\/oracle\/client26ai\/install\/response\/client_2026-05-21_04-16-17PM.rsp\n\nYou can find the log of this install session at:\n \/opt\/oraInventory\/logs\/installActions2026-05-21_04-16-17PM.log\n\nThe installation of Oracle Client 26ai was successful.\nPlease check '\/opt\/oraInventory\/logs\/silentInstall2026-05-21_04-16-17PM.log' for more details.\nSuccessfully Setup Software with warning(s).\n[INS-10115] All configuration tools were previously ran successfully, no further configuration is required.\n\n[oracle@bastion client26ai]$\n<\/pre>\n<\/br>\n\n\n\n<p>And the Oracle 26ai Client is now installed.<\/p>\n\n\n\n<h3>Prepare target database<\/h3>\n\n\n\n<p>I will create a user on the target lab PDB, named TESTZ_TMR_003I, in order to establish sqlplus connection and test the EXPIRE_TIME configuration.<\/p>\n\n\n\n<p>I will create a user test01 and grant the connect permissions.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,16,31,35,39]\">\n[oracle@svl-oat ~]$ echo $ORACLE_SID\nCDB001I\n\n[oracle@svl-oat ~]$ sqlplus \/ as sysdba\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Thu May 21 14:30:39 2026\nVersion 19.23.0.0.0\n\nCopyright (c) 1982, 2023, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c EE High Perf Release 19.0.0.0.0 - Production\nVersion 19.23.0.0.0\n\nSQL&gt; show pdbs\n\n    CON_ID CON_NAME           OPEN MODE  RESTRICTED\n---------- ------------------------------ ---------- ----------\n     2 PDB$SEED           READ ONLY  NO\n     3 TESTZ_APP_006I         READ WRITE NO\n     4 RCLON_TMR_003I         MOUNTED\n     5 RCLON_TMR_002I         MOUNTED\n     6 RCLON_TMR_001I         MOUNTED\n     7 CLONZ_TMR_002I         MOUNTED\n     8 TESTZ_TMR_003I         READ WRITE NO\n    10 TESTZ_APP_004I         READ WRITE NO\n    11 CLONZ_APP_001I         READ WRITE NO\n    12 RCLON_APP_003I         READ WRITE NO\n\nSQL&gt; alter session set container=TESTZ_TMR_003I;\n\nSession altered.\n\nSQL&gt; create user test01 identified by \"test_expire\";\n\nUser created.\n\nSQL&gt; grant connect to test01;\n\nGrant succeeded.\n\nSQL&gt;\n<\/pre>\n<\/br>\n\n\n\n<h3>Test connection with Oracle 26ai Client<\/h3>\n\n\n\n<p>I will first set the ORACLE_HOME variable on the appropriate client directory.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,6]\">\n[oracle@bastion client26ai]$ echo $ORACLE_HOME\n\/opt\/oracle\/client19c\n\n[oracle@bastion client26ai]$ export ORACLE_HOME=\/opt\/oracle\/client26ai\n\n[oracle@bastion client26ai]$ echo $ORACLE_HOME\n\/opt\/oracle\/client26ai\n[oracle@bastion client26ai]$\n<\/pre>\n<\/br>\n\n\n\n<p>I will update the PATH variable to get tnsping and sqlplus binary from the appropriate Oracle 26ai Client.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,6]\">\n[oracle@bastion client26ai]$ echo $PATH\n\/usr\/share\/Modules\/bin:\/usr\/local\/bin:\/usr\/bin:\/usr\/local\/sbin:\/usr\/sbin:\/opt\/oracle\/client19c\/bin:\/opt\/oracle\/sqlcl-24.1.0.087.0929\/\/bin\n\n[oracle@bastion client26ai]$ export PATH=\/opt\/oracle\/client26ai\/bin\n\n[oracle@bastion client26ai]$ echo $PATH\n\/opt\/oracle\/client26ai\/bin\n[oracle@bastion client26ai]$\n<\/pre>\n<\/br>\n\n\n\n<p>I will check that the appropriate tnsping and sqlplus is taken.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4]\">\n[oracle@bastion client26ai]$ which sqlplus\n\/opt\/oracle\/client26ai\/bin\/sqlplus\n\n[oracle@bastion client26ai]$ which tnsping\n\/opt\/oracle\/client26ai\/bin\/tnsping\n<\/pre>\n<\/br>\n\n\n\n<p>I checked that the connection to target PDB is working.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion ~]$ tnsping svl-oat:1521\/testz_tmr_003i.db.jewlab.oraclevcn.com\n\nTNS Ping Utility for Linux: Version 23.26.1.0.0 - Production on 21-MAY-2026 16:28:56\n\nCopyright (c) 1997, 2026, Oracle.  All rights reserved.\n\nUsed parameter files:\n\/opt\/oracle\/client19c\/network\/admin\/sqlnet.ora\n\nUsed EZCONNECT adapter to resolve the alias\nAttempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=testz_tmr_003i.db.jewlab.oraclevcn.com))(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.1.135)(PORT=1521)))\nOK (0 msec)\n[oracle@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p>The TNS_ADMIN used is from the 19c Oracle client directory, which is absolutely not a problem.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion ~]$ echo $TNS_ADMIN\n\/opt\/oracle\/client19c\/network\/admin\n[oracle@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<h3>Test sqlplus connection with Oracle 26ai Client<\/h3>\n\n\n\n<p>As I can see on my client side, I do not have any sqlplus connection running right now.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[opc@bastion ~]$ ss -nop | grep 1521\n[opc@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p> I will generate a sqlplus connection.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion client26ai]$ sqlplus test01\/test_expire@svl-oat:1521\/testz_tmr_003i.db.jewlab.oraclevcn.com\n\nSQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:34:23 2026\nVersion 23.26.1.0.0\n\nCopyright (c) 1982, 2025, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c EE High Perf Release 19.0.0.0.0 - Production\nVersion 19.23.0.0.0\n\nSQL&gt;\n<\/pre>\n<\/br>\n\n\n\n<p>And I can see that I have got a sqlplus connection with no timer\/keepalive.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[opc@bastion ~]$ ss -nop | grep 1521\ntcp   ESTAB  0      0   X.X.0.89:51404    X.X.1.135:1521\n[opc@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p>I will now configure Oracle Dead Connection Detection with SQLNET.EXPIRE_TIME parameter set in the client sqlnet.ora with a value of 1 minute.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,6,8]\">\n[oracle@bastion ~]$ cd $TNS_ADMIN\n\n[oracle@bastion admin]$ \/usr\/bin\/grep -i expire sqlnet.ora\n[oracle@bastion admin]$ \n\n[oracle@bastion admin]$ \/usr\/bin\/vi sqlnet.ora\n\n[oracle@bastion admin]$ \/usr\/bin\/grep -i expire sqlnet.ora\nSQLNET.EXPIRE_TIME=1\n[oracle@bastion admin]$\n<\/pre>\n<\/br>\n\n\n\n<p>I will run a new sqlplus connection.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion admin]$ sqlplus test01\/test_expire@svl-oat:1521\/testz_tmr_003i.db.jewlab.oraclevcn.com\n\nSQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:41:06 2026\nVersion 23.26.1.0.0\n\nCopyright (c) 1982, 2025, Oracle.  All rights reserved.\n\nLast Successful login time: Thu May 21 2026 16:34:23 +02:00\n\nConnected to:\nOracle Database 19c EE High Perf Release 19.0.0.0.0 - Production\nVersion 19.23.0.0.0\n\nSQL&gt;\n<\/pre>\n<\/br>\n\n\n\n<p>I can now see that I have got a connection configured with a timer and keep alive remaining of 38s.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[opc@bastion ~]$ ss -nop | grep 1521\ntcp   ESTAB  0      0     X.X.0.89:62868    X.X.1.135:1521   timer:(keepalive,38sec,0)\n[opc@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p>Let&#8217;s configure the EXPIRE_TIME with a value of 15 minutes.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">\n[oracle@bastion admin]$ \/usr\/bin\/vi sqlnet.ora\n\n[oracle@bastion admin]$ \/usr\/bin\/grep -i expire sqlnet.ora\nSQLNET.EXPIRE_TIME=15\n<\/pre>\n<\/br>\n\n\n\n<p>I run a new sqlplus connection.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion admin]$ sqlplus test01\/test_expire@svl-oat:1521\/testz_tmr_003i.db.jewlab.oraclevcn.com\n\nSQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:43:25 2026\nVersion 23.26.1.0.0\n\nCopyright (c) 1982, 2025, Oracle.  All rights reserved.\n\nLast Successful login time: Thu May 21 2026 16:42:29 +02:00\n\nConnected to:\nOracle Database 19c EE High Perf Release 19.0.0.0.0 - Production\nVersion 19.23.0.0.0\n\nSQL&gt;\n<\/pre>\n<\/br>\n\n\n\n<p>And I now have got a connection configured with a timer and keep alive remaining of 14min.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[opc@bastion ~]$ ss -nop | grep 1521\ntcp   ESTAB  0      0     X.X.0.89:60630    X.X.1.135:1521   timer:(keepalive,14min,0)\n[opc@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p>So, all good Oracle 26ai Client is supporting Dead Connection Detection with SQLNET.EXPIRE_TIME parameter.<\/p>\n\n\n\n<h3>Let&#8217;s test it with Oracle 19c Client<\/h3>\n\n\n\n<p>We can easily confirm again that Oracle 19c Client does not support Dead Connection Detection on the client side.<\/p>\n\n\n\n<p>Let&#8217;s move back to Oracle 19c Client home.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">\n[oracle@bastion admin]$ export PATH=\/opt\/oracle\/client19c\/bin\n\n[oracle@bastion admin]$ which sqlplus\n\/opt\/oracle\/client19c\/bin\/sqlplus\n<\/pre>\n<\/br>\n\n\n\n<p>Run a sqlplus connection.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[oracle@bastion admin]$ sqlplus test01\/test_expire@svl-oat:1521\/testz_tmr_003i.db.jewlab.oraclevcn.com\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Thu May 21 16:48:09 2026\nVersion 19.3.0.0.0\n\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\n\nLast Successful login time: Thu May 21 2026 16:46:07 +02:00\n\nConnected to:\nOracle Database 19c EE High Perf Release 19.0.0.0.0 - Production\nVersion 19.23.0.0.0\n\nSQL&gt;\n<\/pre>\n<\/br>\n\n\n\n\n<p>And check connection configuration.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[opc@bastion ~]$ ss -nop | grep 1521\ntcp   ESTAB      0      0    X.X.0.89:64078    X.X.1.135:1521\n[opc@bastion ~]$\n<\/pre>\n<\/br>\n\n\n\n<p>There is no timer\/keepalive handled with Oracle 19c Client.<\/p>\n\n\n\n<h3>To wrap up&#8230;<\/h3>\n\n\n\n<p>Oracle Database 26ai Client is now supporting Dead Connection Detection on the client side. For our customer configuration this will help the client to check every X minutes (EXPIRE_TIME configured value) for Dead Connection. So if the CMAN and listener connections have already died and if for any reason the Network Load Balancer is still keeping the connection with the client, the client will close the connection after X minutes.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[3804,280,4064,1824,4063],"type_dbi":[],"class_list":["post-44747","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-26ai","tag-database","tag-dead-connection-detection","tag-expire_time","tag-oracle-26ai-client"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle Database 26ai Client and SQLNET.EXPIRE_TIME - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME\" \/>\n<meta property=\"og:description\" content=\"We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-22T13:34:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-22T13:34:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1396\" \/>\n\t<meta property=\"og:image:height\" content=\"732\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marc Wagner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc Wagner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/\"},\"author\":{\"name\":\"Marc Wagner\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\"},\"headline\":\"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME\",\"datePublished\":\"2026-05-22T13:34:46+00:00\",\"dateModified\":\"2026-05-22T13:34:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/\"},\"wordCount\":1065,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/05\\\/diagram-1024x537.jpg\",\"keywords\":[\"26ai\",\"database\",\"Dead Connection Detection\",\"EXPIRE_TIME\",\"Oracle 26ai Client\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/\",\"name\":\"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/05\\\/diagram-1024x537.jpg\",\"datePublished\":\"2026-05-22T13:34:46+00:00\",\"dateModified\":\"2026-05-22T13:34:48+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/05\\\/diagram.jpg\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/05\\\/diagram.jpg\",\"width\":1396,\"height\":732},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-database-26ai-client-and-sqlnet-expire_time\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\",\"name\":\"Marc Wagner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"caption\":\"Marc Wagner\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/marc-wagner\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/","og_locale":"en_US","og_type":"article","og_title":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME","og_description":"We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/","og_site_name":"dbi Blog","article_published_time":"2026-05-22T13:34:46+00:00","article_modified_time":"2026-05-22T13:34:48+00:00","og_image":[{"width":1396,"height":732,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram.jpg","type":"image\/jpeg"}],"author":"Marc Wagner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marc Wagner","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/"},"author":{"name":"Marc Wagner","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"headline":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME","datePublished":"2026-05-22T13:34:46+00:00","dateModified":"2026-05-22T13:34:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/"},"wordCount":1065,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-1024x537.jpg","keywords":["26ai","database","Dead Connection Detection","EXPIRE_TIME","Oracle 26ai Client"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/","name":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram-1024x537.jpg","datePublished":"2026-05-22T13:34:46+00:00","dateModified":"2026-05-22T13:34:48+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/05\/diagram.jpg","width":1396,"height":732},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-database-26ai-client-and-sqlnet-expire_time\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle Database 26ai Client and SQLNET.EXPIRE_TIME"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628","name":"Marc Wagner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","caption":"Marc Wagner"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/marc-wagner\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=44747"}],"version-history":[{"count":28,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44747\/revisions"}],"predecessor-version":[{"id":44777,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/44747\/revisions\/44777"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=44747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=44747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=44747"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=44747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}