首页 » ORACLE 9i-23ai » Oracle sqlnet.ora配置sqlnet.expire_time 需要重启吗?

Oracle sqlnet.ora配置sqlnet.expire_time 需要重启吗?

最近有个Exadata客户总是出现12c R1数据库等待library cache lock, 根据P3值能发现是Last_Successful_Logon_Time的namespace,关于该特性确实引入了一些问题,之前在《Oracle19c 建议的 One-off patch之disable LAST SUCCESSFUL LOGIN TIME》和Oracle 12c New Feature: Last Login Time for Non-Sys Users对于登录相关的 LAST SUCCESSFUL LOGIN TIME的Library cache lock又出新参数 记录过该问题,是与登录相关的问题,如果我们在这个版本没有相应的补丁怎么办?是否可以通过降低链接频率规避问题发生?理论上是的。通常是配置SQLNET.EXPIRE_TIME,那需要重启吗?

这套db alert log有较多的ORA-12170 TNS-12535,判断应该是有firewall配置 TCP connection 保持 idle的时间长度限制。

常见的解决方法:
1,增加firewall配置的idle time
2,   配置OS TCP KeepAlive
3, sqlnet.ora 配置SQLNET.EXPIRE_TIME (DCD)

之前Oracle 12c 19c Automatic terminal/kill session feature& DCD 记录过该行为。在DB的ORACLE_HOME或TNS_ADMIN环境变量目录下,配置$ORACLE_HOME/network/admin/sqlnet.ora, 增加SQLNET.EXPIRE_TIME=N 单位分钟,对于配置SQLNET.EXPIRE_TIME到sqlnet.ora究竟是否需要重启? 一直没有找到明确的答案。

需要重启监听吗?

通常当lsnrctl reload listener 时(重新读取配置,而不是实际重新启动侦听器进程),sqlnet.ora 文件会被读取,但前提是该文件在listener启动时存在! 如果监听器启动时存在sqlnet.ora文件(并且在listener运行时删除了sqlnet.ora文件),并且reload listener,它会发现sqlnet.ora文件不再存在,并且不会 下次重新reload listener时尝试读取 sqlnet.ora 文件。 您唯一的选择是停止并再次启动LISTENER.

然而,要真正让oracle服务器进程使用sqlnet.expire_time参数,只需在sqlnet.ora中设置该参数即可。 当打开数据库的新会话时,将启动一个新的 Oracle 专用服务器进程(当然,如果您的数据库在专用服务器模式下运行),它将读取 sqlnet.ora 文件并使用指定的 sqlnet.expire_time。 因此,每当您更改此参数时,更改后创建的所有 Oracle 处理都会使用新值。 所有正在运行的专用服务器进程都会继续使用创建它们时的参数值。

那么您是否需要重新启动任何东西才能开始使用 sqnlet.expire_time 参数? 对于新会话不需要!如果您想对现有会话使用新值,则必须使这些会话重新连接。

另外对于alert log中此类错误影响阅读,建议配置如下:

(in sqlnet.ora)

SQLNET.EXPIRE_TIME=10
SQLNET.INBOUND_CONNECT_TIMEOUT=120
DIAG_ADR_ENABLED = OFF

(in listener.ora)

DIAG_ADR_ENABLED_<listener_name>=OFF
打赏

对不起,这篇文章暂时关闭评论。