一个11g的开发库,打算打开sqlplus的trace,看下sqlplus登录的连接信息,但配置sqlnet.ora后没有找到trace文件,后来有一天发现磁盘空间不足,经过查询后发现如下路径下有几千个文件,占用了上G的空间:
/u01/app/oracle/11.2.0.4/diag/clients/user_oracle/host_1347578259_80/trace
这些文件是什么?打开一个,发现都是监听sqlpuls登录的信息,即trace文件:
那么为什么这个trace文件在这个路径中?
经@Yong Huang提醒,原来这个问题和11g的ADR设置有关,下面是ADR的官方介绍:
The Automatic Diagnostic Repository (ADR) is a file-based repository for database
diagnostic data such as traces, dumps, the alert log, health monitor reports, and more.
It has a unified directory structure across multiple instances and multiple products.
Beginning with release 11g, the database, Oracle Automatic Storage Management (Oracle
ASM), and other Oracle products or components store all diagnostic data in the ADR. Each
instance of each product stores diagnostic data underneath its own ADR home directory
(see “ADR Home”). For example, in an Oracle Real Application Clusters (Oracle RAC)
environment with shared storage and Oracle ASM, each database instance and each Oracle
ASM instance has a home directory within the ADR. The ADR’s unified directory structure
enables customers and Oracle Support to correlate and analyze diagnostic data across
multiple instances and multiple products.
自动诊断库(ADR)是一个基于文件的数据库诊断数据存储库,保存了trace、dump、alert log、health监控报告等等。对于多个实例和多个产品,都有一个统一的目录结构。11g开始,像Oracle ASM还有其他的Oracle产品或组件的诊断数据都会存储在ADR中。每个产品实例都在他自己的ADR根目录下存储诊断数据。ADR统一目录结构能让客户和Oracle支持将不同实例和不同产品的诊断数据关联起来进行分析。
MOS上的这篇文章说明了sqlnet.ora配置后,trace文件如何存放的问题:
NET Client Traces Generated In $ADR_BASE/oradiag_/diag/clients/ Directory (文档 ID 1545533.1)
大义就是如果配置了
ADR_BASE=ADR base location
则trace文件会自动存储在如下路径中:
$ADR_BASE/oradiag_OS user/diag/clients/..
否则就会存储在:
$ADR_BASE/diag/clients/...
实验:
1. 数据库版本
2.配置sqlnet.ora打开客户端trace
3.这里我没有配置ADR_BASE,只是在listener.ora中配置了ADR_BASE_LISTENER
4.执行一个错误的连接,以让其产生trace文件
5.由于没有设置ADR_BASE,应该不会有oradiag_OSuser路径,但会有diag路径,此时查看
确实在这个路径下生成了trace文件。
注意:
如果开启了sqlplus客户端trace,那么需要关注trace文件所占用空间的使用情况,避免撑爆文件系统,建议使用时开启,用完后需要立即关闭。