天天看點

如何公開Oracle trace檔案?

隐式參數_trace_files_public決定了Oracle産生的trace檔案是否公開,該參數預設值為FALSE,也就是非DBA/OINSTALL組的使用者是沒有權限讀取資料庫産生的trace檔案的;在某些場合中我們需要讓非DBA組的使用者也能通路trace檔案,就可以通過修改該參數實作。請看下面的例子:

<a href="http://blog.51cto.com/maclean/1277527#">?</a>

<code>SQL&gt; </code><code>select</code> <code>* </code><code>from</code> <code>v$version;</code>

<code>BANNER</code>

<code>----------------------------------------------------------------</code>

<code>Oracle </code><code>Database</code> <code>10g Enterprise Edition Release 10.2.0.4.0 - 64bi</code>

<code>PL/SQL Release 10.2.0.4.0 - Production</code>

<code>CORE    10.2.0.4.0      Production</code>

<code>TNS </code><code>for</code> <code>Linux: Version 10.2.0.4.0 - Production</code>

<code>NLSRTL Version 10.2.0.4.0 - Production</code>

<code>SQL&gt; col </code><code>name</code> <code>for</code> <code>a20</code>

<code>SQL&gt; col value </code><code>for</code> <code>a20</code>

<code>SQL&gt; col describ </code><code>for</code> <code>a40</code>

<code>SQL&gt; </code><code>SELECT</code> <code>x.ksppinm </code><code>NAME</code><code>, y.ksppstvl VALUE, x.ksppdesc describ</code>

<code>  </code><code>2   </code><code>FROM</code> <code>SYS.x$ksppi x, SYS.x$ksppcv y</code>

<code>  </code><code>3   </code><code>WHERE</code> <code>x.inst_id = USERENV (</code><code>'Instance'</code><code>)</code>

<code>  </code><code>4   </code><code>AND</code> <code>y.inst_id = USERENV (</code><code>'Instance'</code><code>)</code>

<code>  </code><code>5   </code><code>AND</code> <code>x.indx = y.indx</code>

<code>  </code><code>6  </code><code>AND</code> <code>x.ksppinm </code><code>LIKE</code> <code>'%_trace_files_public%'</code>

<code>  </code><code>7  </code><code>order</code> <code>by</code> <code>x.ksppinm;</code>

<code>NAME</code>                 <code>VALUE                DESCRIB</code>

<code>-------------------- -------------------- ----------------------------------------</code>

<code>_trace_files_public  </code><code>FALSE</code>                <code>Create</code> <code>publicly accessible trace files</code>

<code>SQL&gt; oradebug setmypid;</code>

<code>Statement processed.</code>

<code>SQL&gt; oradebug ipc;</code>

<code>Information written </code><code>to</code> <code>trace file.</code>

<code>SQL&gt; oradebug tracefile_name;</code>

<code>/s01/10gdb/admin/YOUYUS/udump/youyus_ora_10268.trc</code>

<code>SQL&gt; !ls -l /s01/10gdb/admin/YOUYUS/udump/youyus_ora_10268.trc</code>

<code>-rw-r</code><code>----- 1 maclean oinstall 4206 Aug 11 20:51 /s01/10gdb/admin/YOUYUS/udump/youyus_ora_10268.trc</code>

<code>/*所産生的trace檔案權限為640,非oinstall組使用者無權限讀取該檔案*/</code>

<code>SQL&gt; </code><code>alter</code> <code>system </code><code>set</code> <code>"_trace_files_public"</code><code>=</code><code>true</code><code>;</code>

<code>alter</code> <code>system </code><code>set</code> <code>"_trace_files_public"</code><code>=</code><code>true</code>

<code>                 </code><code>*</code>

<code>ERROR </code><code>at</code> <code>line 1:</code>

<code>ORA-02095: specified initialization parameter cannot be modified</code>

<code>/*修改該參數需要重新開機執行個體*/</code>

<code>SQL&gt; </code><code>alter</code> <code>system </code><code>set</code> <code>"_trace_files_public"</code><code>=</code><code>true</code> <code>scope=spfile;</code>

<code>System altered.</code>

<code>SQL&gt; startup </code><code>force</code><code>;</code>

<code>ORACLE instance started.</code>

<code>Total System </code><code>Global</code> <code>Area 1577058304 bytes</code>

<code>Fixed </code><code>Size</code>                  <code>2084264 bytes</code>

<code>Variable </code><code>Size</code>             <code>922747480 bytes</code>

<code>Database</code> <code>Buffers          637534208 bytes</code>

<code>Redo Buffers               14692352 bytes</code>

<code>Database</code> <code>mounted.</code>

<code>Database</code> <code>opened.</code>

<code>/s01/10gdb/admin/YOUYUS/udump/youyus_ora_10430.trc</code>

<code>SQL&gt; ! ls -l /s01/10gdb/admin/YOUYUS/udump/youyus_ora_10430.trc</code>

<code>-rw-r</code><code>--r-- 1 maclean oinstall 5471 Aug 11 20:54 /s01/10gdb/admin/YOUYUS/udump/youyus_ora_10430.trc</code>

<code>/*other組使用者也具有了讀權限*/</code>

<code>SQL&gt; ! ls -l /s01/10gdb/admin/YOUYUS/</code>

<code>total 24</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug 11 20:56 adump</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug 11 20:54 bdump</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug  5 21:35 cdump</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug  5 21:36 dpdump</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug  5 21:37 pfile</code>

<code>drwxr-x</code><code>--- 2 maclean oinstall 4096 Aug 11 20:54 udump</code>

<code>/*請注意修改_trace_files_public為</code><code>true</code><code>,并不會修改trace所在目錄的權限,Oracle預設建立bdump/udump等trace目錄時配置設定的權限為750,other組使用者無法進入這些目錄,需要修改目錄權限為755,即o+r+x*/</code>

<code>SQL&gt; ! chmod o+r+x /s01/10gdb/admin/YOUYUS/*dump</code>

<code>SQL&gt;  ! ls -l /s01/10gdb/admin/YOUYUS/</code>

<code>drwxr-xr-x 2 maclean oinstall 4096 Aug 11 20:56 adump</code>

<code>drwxr-xr-x 2 maclean oinstall 4096 Aug 11 20:54 bdump</code>

<code>drwxr-xr-x 2 maclean oinstall 4096 Aug  5 21:35 cdump</code>

<code>drwxr-xr-x 2 maclean oinstall 4096 Aug  5 21:36 dpdump</code>

<code>drwxr-xr-x 2 maclean oinstall 4096 Aug 11 20:54 udump</code>

<code>/*需要注意的另一點是修改_trace_files_public參數并不會引起既有的trace檔案的權限被修改,典型的例子是alert log告警日志*/</code>

<code>[maclean@rh2 bdump]$ ls -l</code>

<code>total 20</code>

<code>-rw-r</code><code>----- 1 maclean oinstall 12971 Aug 11 21:17 alert_YOUYUS.log</code>

<code>-rw-r</code><code>--r-- 1 maclean oinstall   690 Aug 11 21:12 youyus_lgwr_10514.trc</code>

<code>SQL&gt; !ls -l</code>

<code>total 32</code>

<code>-rw-r</code><code>----- 1 maclean oinstall 21189 Aug 11 21:20 alert_YOUYUS.log</code>

<code>-rw-r</code><code>--r-- 1 maclean oinstall   690 Aug 11 21:20 youyus_lgwr_11136.trc</code>

本文轉自maclean_007 51CTO部落格,原文連結:http://blog.51cto.com/maclean/1277527