客户端ADR配置

前两天YJ部门有一个使用occi的应用,启动时出现报错,应用日志记录的内容是Occipool error,没有任何其他信息了,后来同事向应用中加了一些日志语句,重编译运行才发现报的是ORA-00020错误,数据库process连接进程达到了上限,通过参数修改,解决了这个问题。这里我要说的是在排查过程中看到的另外一个报错。

为了更好地说明问题,我会结合实验一并叙述。

问题现象
首先,查找sqlnet.log所在路径:

find . -name sqlnet.log

./home/oracle/oradiag_oracle/diag/clients/user_oracle/host_2027447528_80/trace/sqlnet.log

在一个session中执行一个错误的sqlplus:

sqlplus a/a

SQL*Plus: Release 11.2.0.4.0 Production on Sat Sep 24 23:04:21 2016
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied

再查看sqlnet.log日志:

tail -0f sqlnet.log 

Sat Sep 24 21:08:07 2016
Directory does not exist for read/write [/u01/app/oracle/product/11.2.0.4/log] [/u01/app/oracle/product/11.2.0.4/log/diag/clients]

提示找不到用于写入和读取的目录:
/u01/app/oracle/product/11.2.0.4/log
/u01/app/oracle/product/11.2.0.4/log/diag/clients
这是什么意思?为啥提示这么个错误?

问题排查
1.首先,涉及的就是11g的一个新功能,ADR,全称是Automatic Diagnostic Repository,即将所有trace文件、core文件、alert文件等做了统一管理,存放于一个目录结构中,对于不同的实例、产品,例如数据库、ASM、CRS,都会在ADR中有自己的目录结构管理这些文件,之所以要统一目录,目的就是为了让客户还有Oracle支持能方便地关联和分析不同实例的诊断数据。以前的版本,若需要这些文件,则在不同的目录中查找。

如下文章对ADR做了非常详细的说明:
Understanding Automatic Diagnostic Repository. (文档 ID 422893.1),eygle的《深入解析Oracle:数据库的初始化》对ADR也有过非常详细的介绍,另外,我之前写过一篇文章:http://blog.csdn.net/bisal/article/details/50284991

ADR的根存储位置是由diagnostic_dest参数来决定,即ADR BASE,ADR目录结构是固定的,ADR的下一级目录名称是diag,ADR BASE下可以有各自的ADR HOME,格式如下:

diag/<product_type>/<prod_id>/<instance_id>

对于diagnostic_dest的默认值:
如果ORACLE_BASE环境变量已经设置,则diagnostic_dest参数值就是ORACLE_BASE。
如果ORACLE_BASE环境变量未设置,则diagnostic_dest参数值设置为ORACLE_HOME/log。
通过v$diag_info视图可以查询ADR的存储路径。
同时,ADR还提供了一个命令行工具adrci,但实际上没必要登录adrci操作,因为ADR中的数据仅用于诊断问题,并没有出于安全考虑做一些特殊处理,唯一可以有的就是ADR目录要遵守操作系统的权限要求。

2.除了数据库可以使用ADR目录,客户端,同样也可以使用,并且其默认的ADR目录是ORACLE_HOME/log,若此目录不存在,则ADR目录会创建在HOME中,例如:

$HOME/oradiag_<owning user>/diag/clients/user_<owning user>/host_*

此时可从以下目录查看sqlnet.log或log.xml文件:

$HOME/oradiag_<owning user>/diag/clients/user_<owning user>/host_*/trace/sqlnet.log

$HOME/oradiag_<owning user>/diag/clients/user_<owning user>/host_*/alert/log.xml

我们看下实际的情况,

sqlplus a/a

tail -0f sqlnet.log 

Sun Sep 25 20:31:52 2016
Directory does not exist for read/write [/u01/app/oracle/product/11.2.0.4/log] []

/u01/app/oracle/product/11.2.0.4/log就是ORACLE_HOME/log路径,接下来创建这个路径,再次执行时HOME下sqlnet.log不会写入任何信息。之所以之前sqlnet.log有内容,是因为缺少需要的目录文件夹。当然这还有一个前提,就是未开启sqlnet客户端trace,此时不会有任何信息写入ADR目录。

使用sqlnet.ora还可以指定ADR路径,如果需要验证ADR目录正确与否,是否还会写入HOME中,只需要设置sqlnet客户端trace,

vi $ORACLE_HOME/network/admin/sqlnet.ora

DIAG_ADR_ENABLED=on
ADR_BASE=/u01/app/oracle/log
trace_level_client=16

查看:

cd /u01/app/oracle/log/oradiag_oracle/diag/clients/user_oracle/host_2027447528_80/trace

ls -rlht
-rw-rw----. 1 oracle oracle  156 Sep 25 21:51 sqlnet.log
-rw-rw----. 1 oracle oracle  45K Sep 25 21:51 ora_3303_140094482417408.trm
-rw-rw----. 1 oracle oracle 228K Sep 25 21:51 ora_3303_140094482417408.trc

查看sqlnet.log,

Sun Sep 25 21:51:47 2016
Create Relation ADR_CONTROL
Create Relation ADR_INVALIDATION
Create Relation INC_METER_IMPT_DEF
Create Relation INC_METER_PK_IMPTS

初始化创建一些ADR信息。trc文件则记录了本次sqlplus的trace信息。另外,log.xml中记录了,

cd /u01/app/oracle/log/oradiag_oracle/diag/clients/user_oracle/host_2027447528_80/alert

vi log.xml

<msg time='2016-09-25T21:51:47.971+08:00' org_id='oracle' comp_id='clients'
 msg_id='dbgrmmdcrf_create_relation_full:1945:1503427940' type='NOTIFICATION' group='create'
 level='16' host_id='bisal' host_addr='::1'>
 <txt>Create Relation INC_METER_IMPT_DEF
 </txt>
</msg>
<msg time='2016-09-25T21:51:47.987+08:00' org_id='oracle' comp_id='clients'
 msg_id='dbgrmmdcrf_create_relation_full:1945:1503427940' type='NOTIFICATION' group='create'
 level='16' host_id='enmoedu' host_addr='::1'>
 <txt>Create Relation INC_METER_PK_IMPTS
 </txt>
</msg>

若不需要产生trace,可以注释sqlnet.ora中trace_level_client=16这行即可。

总结
1.11g中不仅是数据库,客户端是同样可以使用ADR,数据库ADR默认路径由diagnostic_dest参数决定,默认值是ORACLE_BASE,客户端ADR默认路径是ORACLE_HOME/log,如果此路径不存在,则会将ADR创建于HOME中。
2.如果客户端,ORACLE_HOME/log未创建,则HOME中的sqlnet.log会记录缺少目录,若不想出现这种错误,有两种做法:
(1) 手工创建日志中记录缺少的目录。
(2) ORACLE_HOME/network/admin/sqlnet.ora中指定ADR路径:

DIAG_ADR_ENABLED=on
ADR_BASE=/u01/app/oracle/log

3.如果需要打开sqlnet客户端trace,可以在ORACLE_HOME/network/admin/sqlnet.ora增加:

trace_level_client=16

对于客户端sqlnet.ora的变动,仅需要重启应用,对于服务端sqlnet.ora的变动,则需要重启监听。
若是使用了EM的agent,需要重启agent,若仅是sqlplus,则无需任何操作,立即生效。

时间: 2024-10-23 19:57:18

客户端ADR配置的相关文章

rsync文件同步应用:客户端的配置

紧接上篇文章rsync文件同步应用--服务器端的配置,这片将讲解客户端的配置 那么在客户端的话就不需要配置什么配置文件了,可是很烦躁的是这些全部都是命令行,以下将慢慢讲解在客户端发出rsync命令来实现将服务器端的文件备份到客户端来.rsync是一个功能非常强大的工具,其命令也有很多功能特色选项 一,客户端安装rsync软件包 [root@test4 ~]# tar zxvf rsync-3.0.9.tar.gz [root@test4 ~]# cd rsync-3.0.9 [root@test

oracle-Oracle绿色版客户端数据源配置

问题描述 Oracle绿色版客户端数据源配置 oracle安装的客户端为绿色版Oracle10g Client For Win32 10.2.0.1,如何配置数据源? 解决方案 原来一直想尝试一下不安装Oracle的客户端,就能使用PLSQL Developer登录数据库,在参考网上高人的帖子后,自己进行了尝试,尽管过程是艰辛的,但是结果是甜蜜的.现在将过程与大家分享一下:1.准备的文件:D:/>cd oracleinstantclientD:/oracleinstantclient>dir?

CAS .net 客户端如何配置让其不拦截某些指定的页面

问题描述 CAS.net客户端如何配置才能实现不需要CAS认证也可以浏览 解决方案 解决方案二:降低安全等级喽.配置文件中,应该有这种配置项的.

【DATAGUARD】物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置

[DATAGUARD]物理dg配置客户端无缝切换 (八.3)--客户端TAF 配置 1.1  BLOG文档结构图       1.2  前言部分   1.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① Data Guard Broker 的配置 ② Fast-Start Failover 的配置 ③ Oracle DataGuard 之客户端TAF 配置 ④ 使用DGMGRL 来管理数据库 ⑤ 物理dg管理和维护的一

飞信PC客户端如何配置网络设置

飞信PC客户端配置网络设置方法如下: 1.在登录界面点击"网络设置"链接,进入网络设置窗口,可以查看目前的网络连接状态,根据自身所处的网络环境设置代理(建议直接使用IE的代理). 2.通过代理设置可以穿透防火墙的限制,无障碍的使用飞信PC客户端.在代理设置中,如果在网络环境中原本就可以浏览因特网,那么只需要简单选中"使用IE的代理"即可,否则就需要根据您的网络特点设置代理. 3.网络环境详情,请咨询所在网络的管理员. 4.点击"更多设置"按钮,提

CentOS iSCSI客户端使用配置

配置步骤:  1.查看安装是否安装iSCSI驱动 rpm -qa|grep iscsi   2.查看yum安装源 yum list |grep iscsi   3.安装iscsi驱动 yum install iscsi-initiator-utils   4.配置客户端名称 vim /etc/iscsi/initiatorname.iscsi #initiatorname.iscsi InitiatorName=iqn.2012-10.net.cpd:san.initiator01 Initia

Oracle客户端简易配置

1.从 ORACLE 下载客户端的简易包,加压缩到磁盘上的任意目录,例如 E: \Utility\Oracle\Win32 2.将该路径增加到系统环境变量 PATH 中,然后将下面的注册表文件导入到注册表中 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE] "NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

Linux下安装oracle客户端并配置php5.3_php技巧

因项目需要在linux下进行php5.3的oracle客户端编译,简要介绍一下步骤及走过的弯路. 1.下载Oracle客户端程序包,其中包含OCI.OCCI和JDBC-OCI等相关文件. 1.1下载文件地址 http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 根据操作系统的版本选择对应的软件,我需要的是X86_64选择 Instant Client for Linux x86-6

Linux下安装使用Mutt邮件客户端并配置邮件警报功能

0.在正式安装Mutt之前先检查一下两个安全组件.OPENSSL:  代码如下:openssl version -a #检查安装及版本信息SASL(系统一般已经自带):  代码如下: rpm -qa | grep sasl 查询到如下即可:cyrus-sasl-gssapi-2.1.23-15.el6_6.2.x86_64cyrus-sasl-devel-2.1.23-15.el6_6.2.x86_64cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64cyrus-sa