一個11g的開發庫,打算打開sqlplus的trace,看下sqlplus登入的連接配接資訊,但配置sqlnet.ora後沒有找到trace檔案,後來有一天發現磁盤空間不足,經過查詢後發現如下路徑下有幾千個檔案,占用了上G的空間:
這些檔案是什麼?打開一個,發現都是監聽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/..
否則就會存儲在:
實驗:
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檔案所占用空間的使用情況,避免撐爆檔案系統,建議使用時開啟,用完後需要立即關閉。