sqlnet.log详解
1. 前言
在Oracle数据库中,sqlnet.log
是一个非常重要的日志文件。sqlnet.log
记录了与数据库之间进行通信的各种细节,包括连接建立、断开、验证、安全等过程中的所有信息。通过分析sqlnet.log
,可以更好地了解数据库的运行状况,并且可以快速定位和解决各种网络通信问题。本文将详细解释sqlnet.log
的结构和内容,帮助读者更好地理解和利用这个日志文件。
2. sqlnet.log
文件的位置和生成方式
sqlnet.log
文件通常位于Oracle数据库的$ORACLE_HOME/network/log
目录下。该目录可能因操作系统和Oracle版本的不同而有所差异,读者可以根据自己的系统进行相应的查找。
sqlnet.log
的生成方式有两种:
1. 手动创建:可以通过修改sqlnet.ora
文件,将TRACE_LEVEL_CLIENT
设置为ADMIN
,并重启数据库,即可生成sqlnet.log
。
2. 自动创建:当数据库发生与网络通信相关的错误时,sqlnet.log
会自动创建并记录相应的错误信息。
3. sqlnet.log
文件结构
sqlnet.log
文件使用文本文件的形式存储,可以使用文本编辑器打开查看。该文件内容比较复杂,包含了大量的信息和调试日志。下面是sqlnet.log
文件的典型结构:
*********************************************
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Solaris: Version 11.2.0.4.0 - Production
Oracle Bequeath NT Protocol Adapter for Solaris: Version 11.2.0.4.0 - Production
TCP/IP NT Protocol Adapter for Solaris: Version 11.2.0.4.0 - Production
Time: 08-NOV-2021 10:44:14
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS:operation timed out
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Operation timed out
nt secondary err code: 145
nt OS err code: 0
下面是对上述示例中关键部分的解释:
Fatal NI connect error 12170.
:这是一个致命的网络通信错误,错误代码为12170。VERSION INFORMATION:
:版本信息,显示了Oracle的版本和使用的网络协议适配器的版本。Time: 08-NOV-2021 10:44:14
:错误发生的时间。Tracing not turned on.
:说明未开启跟踪。Tns error struct:
:Tns错误结构开始标志。ns main err code: 12535
:主要错误代码,代表TNS操作超时。TNS-12535: TNS:operation timed out
:错误的具体描述。ns secondary err code: 12560
:次要错误代码,代表TNS操作超时。nt main err code: 505
:主要错误代码,代表操作超时。TNS-00505: Operation timed out
:错误的具体描述。nt secondary err code: 145
:次要错误代码,代表操作超时。nt OS err code: 0
:操作系统错误代码,表示没有错误。
可以看到,sqlnet.log
文件中的每一行都包含了重要的信息,这些信息对于了解和排查网络通信问题非常有帮助。
4. sqlnet.log
文件内容解析
sqlnet.log
文件中的内容非常丰富,包含了各种细节和事件的记录。在这一部分,我们将解析一些常见的内容,帮助读者更好地理解这些记录。
4.1 连接建立
在sqlnet.log
中,连接建立的过程会被详细记录。下面是一个连接建立成功的示例:
*********************************************
ns main err code: 0
ns main err msg: TNS-12535: TNS:operation timed out
ns secondary err code: 12560
nt main err code: 515
nt secondary err code: 60
nt OS err code: 0
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))
在这个示例中,我们可以看到以下信息:
ns main err code: 0
:主要错误代码为0,表示没有错误。ns main err msg: TNS-12535: TNS:operation timed out
:错误描述,表示TNS操作超时。ns secondary err code: 12560
:次要错误代码,表示TNS操作超时。nt main err code: 515
:主要错误代码,表示连接被拒绝。nt secondary err code: 60
:次要错误代码,表示连接被拒绝。nt OS err code: 0
:操作系统错误代码,表示没有错误。Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))
:连接的目标地址和端口。
4.2 连接断开
在sqlnet.log
中,连接断开的过程也会被记录。下面是一个连接断开的示例:
*********************************************
ns main err code: 12545
ns secondary err code: 12560
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
在这个示例中,我们可以看到以下信息:
ns main err code: 12545
:主要错误代码,表示连接中断。ns secondary err code: 12560
:次要错误代码,表示TNS操作超时。nt main err code: 0
:主要错误代码,表示没有错误。nt secondary err code: 0
:次要错误代码,表示没有错误。nt OS err code: 0
:操作系统错误代码,表示没有错误。
4.3 身份验证
在sqlnet.log
中,身份验证的过程也会被记录。下面是一个身份验证成功的示例:
*********************************************
-1: 13/12/13 12:12:12 Connect(SESSION:##### ): etc. username: scott