運用Log和Trace檔案排除Oracle Net問題
有時候已經正常安裝和配置了 Oracle Net 相關組建,比如服務端的 TNS Listener,以及客戶端的 tnsnames.ora,在 Oracle Server 駐留的機器上也能正常連線,但是從客戶機器上出現了無法連線 Oracle 資料庫服務的情況。
通常出現這種情況,一般要按照以下兩個步驟來排除故障:首先,需要定位發生問題的位置或者說環節;然後,根據發生問題的位置或環節找出相應的解決辦法。
由於 Oracle Net 是按照 OSI 的七層模型來設計的(它包括了會話層、表示層和應用層三個 OSI 層的功能),而底下其他層的網路功能由網路軟硬體提供,因此,故障發生的環節可大體分為兩種情況:一是 Oracle Net 的配置有問題,二是底層的網路出了問題。
要定位故障,首先得把故障從整體中分離出來,分成不同的環節,單獨進行考慮和測試驗證,逐步找出故障所在。
一般的做法是,分別排除相應情況:
1、物理連線有沒有問題?驗證這個的最簡單辦法就是看是否能夠 ping 通服務主機。
2、如果第 1 步沒有問題,主機和客戶機之間能夠 ping 通,那麼就需要檢測伺服器上的服務是否正常,即從本地是否能夠連線到資料庫(本地連線 oracle 資料庫時,一般不用網路協議,而用程式間通訊協議),在資料庫駐留的主機上,既可以利用 tnsping 工具,也可以直接使用 sqlplus 等客戶端軟體直接連線資料庫服務。
3、如果前兩步均能夠正常完成,那麼就要考慮網路連線是否被防火牆阻塞?在能夠由於 ping 工具和 Oracle 的網路測試工具 tnsping 使用的埠不相同,因此資料庫伺服器上的防火牆可能允許其他機器 ping 本機,但不一定允許 Oracle Listener 的埠(預設為1521)對外提供服務(也就是外部程式試圖連線到1521這個埠的嘗試會被防火牆阻擋),因此,即使能 ping 通,也不一定能 tnsping 通或用 sqlplus 等應用程式連線到資料庫。
對於1出現問題的情況,就需要排除物理網路連線的問題,對於2出現問題的情況,就需要考慮重新驗證和配置相應的 Oracle Net 的相關配置檔案,對於 3 出現的問題,就要考慮防火牆策略和Selinux(如果是 Linux 作業系統)以及其他型別的防護手段的配置問題。
但是,有時候,即使你前面3步都完成了,還是無法從客戶機上連線資料庫伺服器,這時恐怕就得動用 log 檔案和 trace 檔案來檢視出問題的細節了。
筆者本人就遇到過一次 redhat enterprise linux 7下面的類似情況,1、2步不用說,正常透過,問題就是進行到第三步時,防火牆也關閉了,但始終無法連線到伺服器。最後只好透過分析 trace 檔案來定位問題。
要使用 trace 檔案來分析問題,首先要配置 SQL*Net 來啟用 trace 功能,因為該功能預設情況下是停用的。
要啟用 SQL*Net 的 Trace,需要在 $ORACLE_HOME/network/admin/ 下面的 sqlnet.ora 中新增如下程式碼:
注意:
- TRACE_DIRECTORY_CLIENT的路徑自己隨意,但不要以 / 結尾
- 以上8個引數,每個引數務必頂格寫,即:不要以空格開頭
- 以#開頭表示註釋。
- TRACE_UNIQUE_CLIENT 設定是否為每個客戶跟蹤會話建立單獨的 trace 檔案,如果設定為 ON,那麼 trace 檔案將會設定為 SQLNetTracepid.trc(假設預設檔名為 SQLNetTrace.trc)。
- TRACE_LEVEL_CLIENT 開啟客戶跟蹤的級別,取值為:off 或 0 表示沒有 trace 資訊輸出,user 或 4 表示使用者級跟蹤資訊,admin 或 10 表示管理級跟蹤資訊,support 或 16 表示 Oracle 支援服務級跟蹤資訊。
- TRACE_DIRECTORY_CLIENT 指定存放客戶端 trace 檔案的目錄,預設為當前工作目錄。需要注意的是,啟動 oracle net 的使用者應該對該目錄有寫許可權。
- TRACE_FILE_CLIENT 指定客戶端會話 trace 檔案的名稱。
- TRACE_TIMESTAMP_CLIENT 指定客戶端 trace 的事件記錄中是否包含時間戳,預設為 on
- TRACE_ADR_ENABLED 是否開啟 Automatic Diagnosic Repository ,預設為 on,注意:開啟 ADR 的情況下,TRACE_DIRECTORY_CLIENT、TRACE_FILE_CLIENT 、TRACE_UNIQUE_CLIENT、 TRACE_FILELEN_CLIENT 和 TRACE_FILENO_CLIENT 5個引數將不起作用。這時的跟蹤檔案將儲存在 ADR 庫中,該庫的位置由 ADR_BASE 引數設定,ADR_BASE 的預設值為 $ORACLE_BASE ,實際的跟蹤檔案將放在該目錄下的 diag/client/user_USERNAME/HOSTID 下面。
- TRACE_FILELEN_CLIENT 和 TRACE_FILENO_CLIENT 控制 trace 檔案大小(以KB計)和數量。
可以看出,在試圖向資料庫伺服器的偵聽地址寫資料時發生錯誤。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28853590/viewspace-2156690/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle清理trace、alert、aud、listener.log檔案Oracle
- oracle清理trace、alert、aud、listener等日誌檔案Oracle
- git的gitignore檔案排除資料夾和檔案Git
- oracle 資料庫lsnrctl監聽的日誌路徑和trace檔案Oracle資料庫
- log4net配置和MySQL無法連線問題MySql
- oracle ebs 根據請求id找到對應trace 檔案Oracle
- 檔案路徑問題( ./ 和 ../ 和 @/ )
- [20210622]logrotate清除oracle aud檔案的問題.txtlogrotateOracle
- C# Log4net配置檔案 總結C#
- Oracle session traceOracleSession
- AspNetCore配置多環境log4net配置檔案NetCore
- 使用Log4Net根據log level的不同將log輸出到不同的檔案中
- 清除Oracle控制檔案中的歸檔資訊v$archived_logOracleHive
- creator2.4.5 astc問題排除AST
- 排除anaconda的report false問題False
- 排查log4j不輸出日誌到檔案的問題
- Oracle 10046 SQL TRACEOracleSQL
- tar打包且排除某個檔案
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- .net core 專案使用log4net
- 【TRACE】如何設定或動態跟蹤Oracle net偵聽器Oracle
- Oracle資料檔案和臨時檔案的管理Oracle
- 清理Exchange 2013和2016的Log檔案(精華)
- [提問交流]用onethink 建立一個網站會生成15_03_17.log檔案網站
- Shell指令碼 | 抓取log檔案指令碼
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- Oracle診斷案例-Sql_traceOracleSQL
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- 分析及格式化trace檔案 - TKPROF (Transient Kernel Profiler)
- 用python生成oracle goldengate複製配置檔案PythonOracleGo
- Oracle 控制檔案Oracle
- 用ChatGPT問.NET的相關問題,.NET工程師的前景不錯ChatGPT工程師
- 故障排除提示:5 個最常見的 Linux 問題Linux
- Qxlsx庫解析xlsx檔案問題
- 檔案監控效能問題【BUG】
- 檔案上傳常見問題
- LOG巨集的引數問題
- 【.NET】C#/.NET新建專案sln,增加src和test資料夾問題和解決方案C#