ORA-609频繁出现在alert.log,如何解决?
sinye56 2024-10-19 13:32 10 浏览 0 评论
ORA-609就alertlog中比较常见的一个报错,虽然并没有太大的影响,但是频繁的出现在alert log也是很让人厌烦的事情,本文介绍如何排查解决ORA-609问题。
1.ORA-609官方定义
could not attach to incoming connection Cause Oracle process could not answer incoming connection Action If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Support
简单的解释就是客户端和服务无法连接,如果排查需要看后续的跟着报错代码。
2.场景一: ORA-609 + TNS-12641
2.1首先排查alert log
一般会在alert log看到如下报错,alert log中并无TNS相关报错。
2.2排查$ORACLE_HOME/network/log/sqlnet.log
可以看到大量的TNS-12641报错
Fatal NI connect error 12641, connecting to:
(LOCAL=NO)
VERSION INFORMATION:
TNS for Linux: Version 11.2.0.4.0 - Production
Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production
Time: 27-APR-2024 22:14:00
Tracing not turned on.
Tns error struct:
ns main err code: 12641
TNS-12641: Authentication service failed to initialize
ns secondary err code: 0
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
从报错可以看到是和认证相关的,原因是因为在$ORACLE_HOME/network/admin/sqlnet.ora添加了
SQLNET.AUTHENTICATION_SERVICES= (ALL)
这里涉及到一个BUG
BUG 23728771 - ABOUT AN ACTUAL BEHAVIOR SQLNET.AUTHENTICATION_SERVICES
在将 SQLNET.AUTHENTICATION_SERVICES 设置为 ALL 时,服务器会默认选择认证适配器 KERBEROS5、RADIUS 和 KERBEROS5。如果在客户端/服务器的 sqlnet.ora 中未指定 sqlnet.authentication_kerberos5_service,则在执行 kerberos 认证时将失败,并出现 ORA-12641 错误。
2.3解决方案 修改$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (ALL) 改为
SQLNET.AUTHENTICATION_SERVICES= (NONE)
3.场景二:ORA-609 + ORA-12537
3.1 排查alert log
一般alert log中会有 ORA-609和ORA-12537的报错
ORA-00609: could not attach to incoming connection
ORA-12537: TNS:connection closed
ORA-609 : opiodr aborting process unknown ospid (xxxx)
3.2 排查$ORACLE_HOME/network/log/sqlnet.log
可以看到sqlnet.log中有TNS-12537
Fatal NI connect error 12537, connecting to:
(LOCAL=NO)
VERSION INFORMATION:
TNS for 64-bit Windows: Version 11.1.0.7.0 - Production
Oracle Bequeath NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production
Windows NT TCP/IP NT Protocol Adapter for 64-bit Windows: Version 11.1.0.7.0 - Production
Time: 12-OCT-2009 10:03:39
Tracing to file: E:\app\oracle\product\11.1.0\db_1\NETWORK\trace\svr1_7464.trc
Tns error struct:
ns main err code: 12537
TNS-12537: TNS:connection closed
ns secondary err code: 12560
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
3.3 listener log中会有类似如下报错
日志显示连接已建立,没有明显错误。这是因为在listener将连接移交给服务器进程之后,连接失败了。
12-OCT-2009 10:03:39 * (CONNECT_DATA=(SID=ORCL)) * (ADDRESS=(PROTOCOL=tcp)(HOST=123.456.1.123)(PORT=3158)) * establish * ORCL * 0
12-OCT-2009 10:03:39 * (CONNECT_DATA=(SID=ORCL)) * (ADDRESS=(PROTOCOL=tcp)(HOST=123.456.1.123)(PORT=3159)) * establish * ORCL * 0
3.4 解决方案
ORA-609 错误是在客户端连接在完成或在连接/身份验证过程完成之前中断连接过程时引发的。很多时候,这种连接中断是由于超时引起的。从 10gR2 开始,入站连接超时的默认值已设置为 60 秒。这个时间限制通常不足以完成整个连接过程。当错误是间歇性的时,通常不表示存在严重问题。这只是意味着服务器进程在整个连接过程完成之前超时。
我们还发现,在由 DB Console 和 Enterprise Manager 代理(emagent)监视的数据库安装中,ORA-609 错误经常发生。在启动 DB Console 并且作为例行操作后,emagent 将反复尝试连接到目标实例。我们可以在 listener.log 中看到频繁的 emagent 连接,而不会出现错误。然而,偶尔可能会在数据库处未能完成连接过程,因此会引发 ORA-609 错误。emagent 将简单地重试连接,并可能在随后的尝试中成功。(前提是在监听器或数据库上没有发生真正的故障)。这种临时连接失败不会反馈给 DB Console,并且除了 ORA-609 之外,没有其他指示表明发生了故障。
综上引起ORA-609报错的原因有很多,要想真正的追踪到根本原因相对是比较难 的;但是可以有相对简单的办法来应对,常用的方案就是拉长连接超时的时间具体操作为修改$ORACLE_HOME/network/admin/sqlnet.ora(oracle 非grid)添加如下参数,无需重启DB和reload监听
SQLNET.INBOUND_CONNECT_TIMEOUT=120
3.5排查根本原因方案
如果修改连接超时参数后还频繁的出现ORA-609,那么就需要更详细的排查官方建议方案如下:
A. 在客户端的 SQLNET.ORA 文件添加如下trace参数
DIAG_ADR_ENABLED=off # Disable ADR if version 11g
TRACE_LEVEL_CLIENT = 16 # Enable level 16 trace
TRACE_TIMESTAMP_CLIENT = ON # Set timestamp in the trace files
TRACE_DIRECTORY_CLIENT = <DIRECTORY> # Control trace file location
TRACE_FILELEN_CLIENT =<n> #Control size of trace set in kilobytes eg 20480
TRACE_FILENO_CLIENT =<n> #Control number of trace files per process
如果连接模型是 JDBC thin,则需要对客户端进行 Javanet 跟踪。请参阅文档 793415.1 How to Perform the Equivalent of SQL*Net Client Tracing with Oracle JDBC Thin Driver.。
如果使用的是 11.2 版本的 JDBC thin 客户端,则可以使用以下说明文档 1050942.1 How to Trace the Network Packets Exchanged Between JDBC and the RDBMS in Release 11.2。
B. 在服务器端设置trace参数
DIAG_ADR_ENABLED=off # Disable ADR if version 11g
TRACE_LEVEL_SERVER = 16 # Enable level 16 trace
TRACE_TIMESTAMP_SERVER = ON # Set timestamp in the trace files
TRACE_DIRECTORY_SERVER = <DIRECTORY> # Control trace file location
TRACE_FILELEN_SERVER =<n> #Control size of trace set in kilobytes eg 20480
TRACE_FILENO_SERVER =<n> #Control number of trace files per process
Cyclic tracing will allow you to control the size of and number of trace files that are produced.
The TRACE_FILELEN parameter is for the size of a trace file.
The TRACE_FILENO parameter is the number of traces per process.
C. 设置错误堆栈以捕获失败。 当捕获 Oracle Net 客户端跟踪不可行时,这可能会特别有用.
SQL> alter system set events '609 errorstack(3)';
Once a few traces have been collected while the error is reproduced:
SQL> alter system set events '609 off';
然后开SR把这些log上传给oracle support去做进一步排查。
参考官方文档
NOTE:609.1 - ORA-609 TNS-12537 and TNS-12547 in 11g Alert.log?
11g and Newer: ORA-609 TNS-12537 and TNS-12547 or TNS-12170 in DB Alert.log (Doc ID 1116960.1)
Troubleshooting Guide ORA-609 : Opiodr aborting process unknown ospid (Doc ID 1121357.1)
Alert Log Errors: ORA-609 & TNS-12641 -Authentication Service Failed To Initialize (Doc ID 2426368.1)
?
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)