最近有个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
微信logo 微信扫一扫,打赏作者吧~
  • Migrate Oracle to PostgreSQL (系): AS Table OF
  • Oracle国产化改造迁移时的问题: Varchar data type中的 invalid 字符集字符编码
  • Troubleshooting Oracle 12.1 ‘enq: TC – contention’ wait event and related issues
  • Oracle国产化改造迁移时的问题: Date data type中的 invalid date 0000-00-00(zero year )
  • Oracle Column Group Extended Statistics列组扩展统计信息
  • Migrate Oracle to PostgreSQL (系): User and Schema
  • 体验一下GaussDB集中式(本地部署)的Flashback/TIMECAPSULE 闪回功能
  • 故障诊断 Oceanbase “ORA-00600: internal error code, arguments: -4013, No memory or reach tenant memory limit” 特烦恼
  • 聊聊PostgreSQL Visibility Map File?
  • 如何查看PostgreSQL中的buffer,并清空buffer cache(shared_buffer)
  • 追求卓越,完善自我