空闲 Oracle 连接给出错误 'ORA-03114: not connected to ORACLE'

Idle Oracle connections give error 'ORA-03114: not connected to ORACLE'

我们有一个 Node.js 连接到 Oracle 数据库实例的 Web 应用程序,问题是在一些不活动之后,数据库连接变为只读模式。这意味着 SELECT 操作有效,但 INSERT 和 UPDATE 事务遇到此错误:

"Error: ORA-03114: not connected to ORACLE"

重启应用后问题解决。我们使用最新版本的knex(0.20.1)和node-oracledb(4.1.0)库来连接数据库。

该错误表示连接已过期(可能是防火墙)。您应该追查原因并消除它。可能有一些解决方法,例如配置 Oracle Net 层以通过网络偶尔发送 ping 以阻止空闲连接被终止,请参阅 https://oracle.github.io/node-oracledb/doc/api.html#connectionha

查询和 DML 都将同样受到出现错误的连接的影响 - 都将失败。我怀疑您正在为查询使用不同的(新的)连接。

如果您使用的是 19c 客户端库(顺便说一下,它连接到 Oracle DB 11.2 或更高版本),那么您的连接字符串可以使用 Easy Connect 语法,例如:

"mydbmachine.example.com/orclpdb1?expire_time=2"

这将对空闲连接执行保持活动操作,每两分钟发送一次探测。一般建议将期限设置为刚好小于连接终止时间的一半(例如,通过防火墙)。请参阅技术文章 Oracle Database 19c Easy Connect Plus Configurable Database Connection 语法.

其他语法可以在旧版本中使用,或者在 tnsnames.ora 文件中使用;检查文档。

我遇到了同样的问题并找到了解决方案。 添加环境变量(系统变量) ORACLE_HOME=我的安装路径 F:\app\krushna\product.2.0\dbhome_1 和 ORACLE_SID= orcl 或 xe 。 你有过哪个。 它对我有用。