1. 程式人生 > >【翻譯自mos文章】 在錯誤的從os級別remove掉 trace file 之後,怎麽找到該trace file的內容?

【翻譯自mos文章】 在錯誤的從os級別remove掉 trace file 之後,怎麽找到該trace file的內容?

否則 lin reat -m evel data node name rate des


在錯誤的從os級別remove掉 trace file 之後,怎麽找到該trace file的內容?


參考原文:


適用於:
Oracle Database - Enterprise Edition - Version 8.1.7.4 to 11.2.0.1.0 [Release 8.1.7 to 11.2]
Generic UNIX
Generic Linux


目標:

當錯誤的從從os級別remove(這個remove是指rm)掉 trace file 之後,oracle進程的trace file 是不會被又一次創建的。

那怎麽看到這些trace file的內容?

解決方式:


這樣的行為的解釋 和解決方式在
Bug 8367394: A NEW TRACE FILE IS NOT BEING CREATED IF THE INITIAL ONE WAS REMOVED

給出了。

--->註意:我看了一下該bug的workground,是restart instance。

在以下的樣例中,請註意從11g開始,trace file的位置不在bdump 下。而是在{ADR_HOME}/trace/下。



當進程是alive的時候,進程不會在 trace file上運行close()函數。


進程依舊持有 指向trace file 的 file descriptor。

trace file 的名字包含進程的pid,
因此,除非進程被重新啟動,否則我們不能關閉 file descriptor,也不能創建一個用新文件名稱或者老文件名稱的新文件


這並不意味著,在緊急情況下,你不能訪問該trace file。
當該trace file 被delete掉後。僅僅要file descriptor依舊open,你就能夠獲得該文件的內容。該內容依舊被正常寫。

通過例如以下方法經過file descriptor 來訪問 file

ps -ef|grep v10204|grep dbw0
oracle 11283 1 0 16:23 ? 00:00:00 ora_dbw0_v10204

lsof -p 11283|grep dbw0
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
oracle 11283 oracle 2

REG 3,1 767 20728692 /bdump/v10204_dbw0_11283.trc

從上面的結果中,我們能夠看到fd 為2。例如以下也能驗證fd 為2

ls -lA /proc/11283/fd | grep dbw0
l-wx------ 1 oracle dba-64 Mar 25 16:24 2 -> /bdump/v10204_dbw0_11283.trc


從os級別 remove掉trace file 。fd 依舊存在,僅僅是file 被delete掉了。

ls -lA /proc/11283/fd | grep dbw0
l-wx------ 1 oracle dba-64 Mar 25 16:24 2 -> /bdump/v10204_dbw0_11283.trc (deleted)

這個fd (file descriptor)在它被關閉 或者 進程被重新啟動之前 是存在的。
你能夠訪問它的內容:
cat /proc/11283/fd/2 > /tmp/v10204_dbw0_11283.trc

【翻譯自mos文章】 在錯誤的從os級別remove掉 trace file 之後,怎麽找到該trace file的內容?